博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sklearn交叉验证3-【老鱼学sklearn】
阅读量:4316 次
发布时间:2019-06-06

本文共 2072 字,大约阅读时间需要 6 分钟。

在上一个博文中,我们用learning_curve函数来确定应该拥有多少的训练集能够达到效果,就像一个人进行学习时需要做多少题目就能拥有较好的考试成绩了。

本次我们来看下如何调整学习中的参数,类似一个人是在早上7点钟开始读书好还是晚上8点钟读书好。

加载数据

数据仍然利用手写数字识别作为训练数据:

from sklearn.datasets import load_digits# 加载数据digits = load_digits()X = digits.datay = digits.target

调整参数

我们想要调整·SVC(gamma=0.001)·SVC中的gamma参数,看到底把gamma参数设置成哪个值是最优的。

因此需要定义测试的参数范围,这里设置了参数值的范围为从10的-6次方到10的-2.3次方,总共5个值:

import numpy as np# 定义gamma参数的可能取值范围,从10**-6, 到10**-2.3,总共5个参数值param_range = np.logspace(-6, -2.3, 5)

validation_curve不停尝试在不同参数值下的损失函数值:

from sklearn.model_selection import validation_curvefrom sklearn.svm import SVC# param_name中指定了修改SVC中的哪个参数值,这里修改的是gamma参数值;param_range参数指定了具体参数值的可选范围train_loss, test_loss = validation_curve(SVC(), X, y, param_name="gamma", param_range=param_range, cv=10, scoring='neg_mean_squared_error')train_loss_mean = -np.mean(train_loss, axis=1)test_loss_mean = -np.mean(test_loss, axis=1)

可视化图形

可视化图形,横坐标为参数可选值的范围,纵坐标为在各参数下的损失函数值

# 可视化图形,横坐标为参数可选值的范围,纵坐标为在各参数下的损失函数值import matplotlib.pyplot as pltplt.plot(param_range, train_loss_mean, label="Train")plt.plot(param_range, test_loss_mean, label="Test")plt.legend()plt.show()

图形显示为:

544412-20171206142901425-289006613.png

在这个图形中,我们发现gamma值有一个转折点,当其在0.001之后,测试集的误差值就开始扩大了,因此,从图形上看,一个比较好的学习参数值是gamma=0.001或者再往前一点点,大概在0.0007左右。

完整代码

完整的代码如下:

from sklearn.datasets import load_digits# 加载数据digits = load_digits()X = digits.datay = digits.targetimport numpy as np# 定义gamma参数的可能取值范围,从10**-6, 到10**-2.3,总共5个参数值param_range = np.logspace(-6, -2.3, 5)from sklearn.model_selection import validation_curvefrom sklearn.svm import SVC# param_name中指定了修改SVC中的哪个参数值,这里修改的是gamma参数值;param_range参数指定了具体参数值的可选范围train_loss, test_loss = validation_curve(SVC(), X, y, param_name="gamma", param_range=param_range, cv=10, scoring='neg_mean_squared_error')train_loss_mean = -np.mean(train_loss, axis=1)test_loss_mean = -np.mean(test_loss, axis=1)# 可视化图形,横坐标为参数可选值的范围,纵坐标为在各参数下的损失函数值import matplotlib.pyplot as pltplt.plot(param_range, train_loss_mean, label="Train")plt.plot(param_range, test_loss_mean, label="Test")plt.legend()plt.show()

转载于:https://www.cnblogs.com/dreampursuer/p/7989569.html

你可能感兴趣的文章
POJ 2488 A Knight's Journey-dfs
查看>>
MyBatis 插入时返回刚插入记录的主键值
查看>>
Python基本语法
查看>>
图像处理------颜色梯度变化 (Color Gradient) 分类: ...
查看>>
Hadoop_我理解的Map-Reduce
查看>>
HDU1242 Rescue(BFS+优先队列)
查看>>
mysql入门-数据类型(一)
查看>>
FTP服务的搭建
查看>>
Net开源HelloData之:系统配置
查看>>
当时学习《鸟哥的Linux私房菜-基础学习篇》记录的点
查看>>
如何设置eclipse下查看java源码
查看>>
Iview 表单提交: Cannot read property 'validate' of undefined
查看>>
sharepoint securityToken.svc 无法打开
查看>>
Hadoop不同模式下关键配置属性
查看>>
带通滤波器
查看>>
在CentOS搭建Git服务器 转
查看>>
现在怎么访问安卓开发者网站
查看>>
python第六十六天--sqlalchemy
查看>>
软件工程--提问回顾与总结
查看>>
IDEA连接数据库自动生成实体类
查看>>