Python机器学习可视化(二)sklearn.validation_curve选择超参数实例(完整代码)

介绍

Scikit-learn提供了learning_curve类,方便获得和训练的可视化相关的数据。
例如,如果想要观察训练集使用不同样本数量和训练得分/测试得分的关系,可以使用learning_curve函数,在
Python机器学习可视化(一)sklearn.learning_curve
中介绍了训练样本数量——训练/测试得分曲线。

机器学习的方法中往往涉及到超参数的调整,本文利用validation_curve函数,以load_digit数据集和SGD分类为例,通过可视化的方式来考察不同超参数和性能之间的关系。实现结果如下图所示。

Python机器学习可视化(二)sklearn.validation_curve选择超参数实例(完整代码)_第1张图片
from sklearn.learning_curve import learning_curve, validation_curve

1.数据集选用load_digit数据集 简单介绍

from sklearn.datasets import load_digits
X = digits['data'] #(1797,64)
Y = digits['target'] #(1797,)

2.采用SGD分类器

from sklearn.linear_model import SGDClassifier
sgd = SGDClassifier(loss='log', shuffle=True, n_iter=5, penalty='l2', alpha=0.0001, random_state=3)

3.选择超参数区间:10的-2次方到10的5次方,共8个值

testing_range = np.logspace(-5,2,8)  #自变量

调用validation_curve函数

train_scores, test_scores = validation_curve(sgd, X, Y, param_name='alpha',param_range=testing_range,
                                             cv=10, scoring='accuracy', n_jobs=1)

解释:
1.输入
sgd:分类器
X: data
Y: 标签
cv: K折交叉验证,本文选择10
scoring: sklearn一般评估方法
机器学习中的precision, recall, accuracy, F值
param_name: 需要调整的超参数名称
param_range:超参数区间
2.输出:
train_scores:对于8个超参数的训练集,对10折交叉验证的10个训练得分,本文为(8,10)
test_scores:对于8个超参数的测试集,对10折交叉验证的10个测试得分,本文为(8,10)

处理

1.对于8种不同参数的训练集,对10折交叉验证的10个训练/测试得分取平均值(即压缩列)。
2.得到得分范围的上下界
3.如果上下界区域太大,可以在np.std前乘以一个小于一的数

mean_train = np.mean(train_scores,1)  #(8,)
# 得到得分范围的上下界
upper_train = np.clip(mean_train + np.std(train_scores,1),0,1) 
lower_train = np.clip(mean_train - np.std(train_scores,1),0,1)
    
mean_test = np.mean(test_scores,1)
# 得到得分范围的上下界
upper_test = np.clip(mean_test + np.std(test_scores,1),0,1) 
lower_test = np.clip(mean_test - np.std(test_scores,1),0,1)

画图

然后就可以得到超参数——训练/测试得分曲线了。

plt.figure('Fig2')
plt.semilogx(testing_range,mean_train,'ro-',label='train')
plt.plot(testing_range,mean_test,'go-',label='test')
##填充上下界的范围
plt.fill_between(testing_range,upper_train,lower_train,alpha=0.2,#alpha:覆盖区域的透明度[0,1],其值越大,表示越不透明 
         color='r')                   
plt.fill_between(testing_range,upper_test,lower_test,alpha=0.2,#alpha:覆盖区域的透明度[0,1],其值越大,表示越不透明 
         color='g')  
plt.grid()
plt.xlabel('alpha parameter')
plt.ylabel('accuracy')
plt.legend(loc='lower right')
plt.title('SGD')
plt.savefig('alpha_parameter.png')
plt.show()

完整代码:https://github.com/AsajuHuishi/examples_sklearn.learning_curve
参考文献:
《数据科学导论——Python语言实现》

你可能感兴趣的:(机器学习)