机器学习入门-交叉验证选择参数(数据切分)train_test_split(under_x, under_y, test_size, random_state), (交叉验证的数据切分)KFold, recall_score(召回率)
1. train_test_split(under_x, under_y, test_size=0.3, random_state=0) # under_x, under_y 表示输入数据, test_size表示切分的训练集和测试集的比例, random_state 随机种子
2. KFold(len(train_x), 5, shuffle=False) # len(train_x) 第一个参数数据数据大小, 5表示切分的个数,即循环的次数, shuffle表示是否进行打乱数据
3. recall_score 表示的是召回率, 即预测对的/这个类别的个数
我们将数据分为训练集和测试集,为了确定好参数,我们从训练集中对数据进行再次的切分,切分成训练集和验证集以此来获得好的训练参数
我们对正则化参数c做验证
交叉验证的意思是比如,KFold(len(train_x), 5, shuffle=False) 将索引值分成5份,四分作为训练集,1份作为验证集,为了防止由于部分数据表现不好,导致结果的偏低或者偏高
训练集 验证集
1234 5
2345 1
3451 2
4512 3
5123 4
一共5次循环,对获得的score求平均作为最终的预测得分
我们使用recall_score 来做为验证结果, 使用KFold来进行数据的索引的拆分, 返回最佳的参数
# 进行整体数据的拆分
train_x, test_x, train_y, test_y = train_test_split(X, y, test_size=0.3, random_state=0) # 进行下采样数据的拆分
under_train_x, under_text_x, under_train_y, under_test_y = train_test_split(under_x, under_y, test_size=0.3, random_state=0)
from sklearn.cross_validation import KFold
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import recall_score # 使用交叉验证来选择参数
def printing_KFold_score(train_x, train_y):
"""
进行数据的交叉验证
:param train_x:输入的数据的变量
:param train_y:输入数据的标签
:return: 返回最佳的参数
"""
# 对数据的索引进行拆分
fold = KFold(len(train_x), 5, shuffle=False)
# 正则化参数
c_parameter = [0.01, 0.1, 1, 10, 100]
# 建立DataFrame用于参数和recall得分的储存
train_score = pd.DataFrame(index=range(len(c_parameter), 2), columns=['c_parameter', 'F_score_mean'])
train_score['c_parameter'] = c_parameter
for c in c_parameter:
scores = []
for iter, fol in enumerate(fold, start=1):
lr = LogisticRegression(C=c, penalty='l1')
lr.fit(train_x.iloc[fol[0], :], train_y.iloc[fol[0], :])
pred_y = lr.predict(train_x.iloc[fol[1], :])
# 导入recall_score模块进行计算
score = recall_score(train_y.iloc[fol[1], :], pred_y)
print('{} {}'.format(iter, score))
scores.append(score)
mean_score = np.mean(scores)
train_score['F_score_mean'] = mean_score
print(train_score)
# 根据索引, idxmax() 表示获得最大值的索引,获得最佳的best_parameter
best_parameter = train_score.iloc[train_score['F_score_mean'].idxmax(), :]['c_parameter']
print('the best_parameter is {}'.format(best_parameter)) return best_parameter best_c = printing_KFold_score(under_train_x, under_train_y)
机器学习入门-交叉验证选择参数(数据切分)train_test_split(under_x, under_y, test_size, random_state), (交叉验证的数据切分)KFold, recall_score(召回率)的更多相关文章
- 机器学习入门 - Google机器学习速成课程 - 笔记汇总
机器学习入门 - Google机器学习速成课程 https://www.cnblogs.com/anliven/p/6107783.html MLCC简介 前提条件和准备工作 完成课程的下一步 机器学 ...
- python进行机器学习(四)之模型验证与参数选择
一.模型验证 进行模型验证的一个重要目的是要选出一个最合适的模型,对于监督学习而言,我们希望模型对于未知数据的泛化能力强,所以就需要模型验证这一过程来体现不同的模型对于未知数据的表现效果. 这里我们将 ...
- 支持向量机(SVM)利用网格搜索和交叉验证进行参数选择
上一回有个读者问我:回归模型与分类模型的区别在哪?有什么不同,我在这里给他回答一下 : : : : 回归问题通常是用来预测一个值,如预测房价.未来的天气情况等等,例如一个产品的实际价格为500元,通过 ...
- 机器学习入门-随机森林预测温度-不同参数对结果的影响调参 1.RandomedSearchCV(随机参数组的选择) 2.GridSearchCV(网格参数搜索) 3.pprint(顺序打印) 4.rf.get_params(获得当前的输入参数)
使用了RamdomedSearchCV迭代100次,从参数组里面选择出当前最佳的参数组合 在RamdomedSearchCV的基础上,使用GridSearchCV在上面最佳参数的周围选择一些合适的参数 ...
- 机器学习入门07 - 验证 (Validation)
原文链接:https://developers.google.com/machine-learning/crash-course/validation/ 1- 检查直觉 将一个数据集划分为训练集和测试 ...
- python大战机器学习——模型评估、选择与验证
1.损失函数和风险函数 (1)损失函数:常见的有 0-1损失函数 绝对损失函数 平方损失函数 对数损失函数 (2)风险函数:损失函数的期望 经验风险:模型在数据集T上的平均损失 根据大 ...
- 【机器学习】机器学习入门02 - 数据拆分与测试&算法评价与调整
0. 前情回顾 上一周的文章中,我们通过kNN算法了解了机器学习的一些基本概念.我们自己实现了简单的kNN算法,体会了其过程.这一周,让我们继续机器学习的探索. 1. 数据集的拆分 上次的kNN算法介 ...
- 吴裕雄 python 机器学习——模型选择参数优化暴力搜索寻优GridSearchCV模型
import scipy from sklearn.datasets import load_digits from sklearn.metrics import classification_rep ...
- 吴裕雄 python 机器学习——模型选择参数优化随机搜索寻优RandomizedSearchCV模型
import scipy from sklearn.datasets import load_digits from sklearn.metrics import classification_rep ...
随机推荐
- leetcode:Valid Palindrome【Python版】
1.注意空字符串的处理: 2.注意是alphanumeric字符: 3.字符串添加字符直接用+就可以: class Solution: # @param s, a string # @return a ...
- 基于windows IIS的C语言CGI WEB服务器环境搭建
网页编程对我来说特别亲切,因为我就是从html.ASP.PHP一步步接触编程的.自己的编程爱好也是从那里一点一点被满足.不过离开大学之后很久没有碰过WEB了,最近看到嵌入式中的涉及到的web服务器,了 ...
- C语言面试题5
C语言面试宝典 第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为 ...
- Servlet是单例的吗?
如题,是吗?首先我们得搞清楚啥是单例.一聊起单例,条件反射的第一个想到的自然是单例模式.单例模式的定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供.如果按照Java中单例的定义,那么当Ser ...
- JZ2440 裸机驱动 第14章 ADC和触摸屏接口
本章目标: 了解S3C2410/S3C2440和触摸屏的结构: 了解电阻触摸屏的工作原理和等效电路图: 了解S3C2410/S3C2440触摸屏控制器的多种工作模式: ...
- 【python】正则表达式-常用函数
m = re.search(pattern, string) # 搜索整个字符串,直到发现符合的子字符串. m = re.match(pattern, string) # 从头开始检查字符串是否符合正 ...
- VS2010程序调试
http://blog.csdn.net/kingzone_2008/article/details/8133048 调试初识及实例.
- <<APUE>> 线程
一个进程在同一时刻只能做一件事情,线程可以把程序设计成在同一时刻能够做多件事情,每个线程处理各自独立的任务.线程包括了表示进程内执行环境必需的信息,包括进程中标识线程的线程ID.一组寄存器值.栈.调度 ...
- 一小时入门webpack
webpack现在已经成为了大众化的项目必要脚手架,基本上现在的很多项目都需要webpack,由于webpack的出现glup和grunt已经完败,今天我们来说一下webpack如何使用. 首先我们需 ...
- Druid 连接池 JDBCUtils 工具类的使用
Druid工具介绍 它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. 支持所有JDBC兼容的数据库,包括Oracle.MySQL. ...