首页 > 编程知识 正文

曲线匹配算法,画曲线算法

时间:2023-05-04 23:02:29 阅读:258879 作者:751

在Python中重要的机器学习库scikit-learn的算法模型应用中涉及各类关键参数,那么,如果选择及调整这些参数才能优化模型运行结果呢?下面介绍一下机器学习算法中常用的调参神器之一的:学习曲线。

学习曲线

参数学习曲线是一条以不同的参数取值为横坐标,不同参数取值下的模型结果为纵坐标的曲线,我们可以选择模型表现最佳点的参数取值为参数赋值。

代码实现 #导包import numpy as npimport pandas as pd#sklearn.datasets中的breast_cancer数据集为例from sklearn.datasets import load_breast_cancer # 探索数据集data = load_breast_cancer() #提取特征数据集X = data.dataX.shape

运行结果

(569, 30) #提取标签数据集y = data.targety.shape

运行结果

(569,) #查看特征变量名data.feature_names

运行结果

array(['mean radius', 'mean texture', 'mean perimeter', 'mean area', 'mean smoothness', 'mean compactness', 'mean concavity', 'mean concave points', 'mean symmetry', 'mean fractal dimension', 'radius error', 'texture error', 'perimeter error', 'area error', 'smoothness error', 'compactness error', 'concavity error', 'concave points error', 'symmetry error', 'fractal dimension error', 'worst radius', 'worst texture', 'worst perimeter', 'worst area', 'worst smoothness', 'worst compactness', 'worst concavity', 'worst concave points', 'worst symmetry', 'worst fractal dimension'], dtype='<U23') #中文化特征变量名列表name = ['平均半径','平均纹理','平均周长','平均面积', '平均光滑度','平均紧凑度','平均凹度', '平均凹点','平均对称','平均分形维数', '半径误差','纹理误差','周长误差','面积误差', '平滑度误差','紧凑度误差','凹度误差', '凹点误差','对称误差', '分形维数误差','最差半径','最差纹理', '最差的边界','最差的区域','最差的平滑度', '最差的紧凑性','最差的凹陷','最差的凹点', '最差的对称性','最差的分形维数'] # 划分数据集,须导入train_test_split方法from sklearn.model_selection import train_test_splitXtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,test_size=0.2) Xtrain.shape

运行结果

(455, 30) #用KNN建模,先任选一个K=7,运行得出一个scorefrom sklearn.neighbors import KNeighborsClassifierclf = KNeighborsClassifier(n_neighbors=7)clf = clf.fit(Xtrain,Ytrain)score = clf.score(Xtrain,Ytrain)'''score()方法用于度量给定测试集的预测效果的好坏。其结果为:连续y使用R^2,分类y使用准确率accuracy,其中:accuracy=分类算法正确的分类数/总分类数。'''score

运行结果

0.9406593406593406 clf = clf.fit(Xtest,Ytest)score = clf.score(Xtest,Ytest)score

运行结果

0.9298245614035088 #学习曲线#导入画图包import matplotlib.pyplot as plt#画图展示样本位置分布情况plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示字体:黑体# plt.rcParams['font.family']='Arial Unicode MS' # mac中文显示plt.rcParams['axes.unicode_minus'] = False #设置正常显示负号plt.style.use('ggplot')# 使用自带的样式进行美化 plt.figure(figsize=(10,6),dpi=720) #设置画布尺寸及像素#设定k值范围krange = range(1,21)#设置score初始值score=[]for i in krange: #K近邻分类器 clf = KNeighborsClassifier(n_neighbors=i) #拟合训练集 clf = clf.fit(Xtrain,Ytrain) #做score折线 score.append(clf.score(Xtest,Ytest))#画图 plt.plot(krange,score)plt.show()

运行结果

#确定最优K值点score.index(max(score))+1

运行结果

5 #将K值重设为最优值9,再次运行KNN模型并得出scorefrom sklearn.neighbors import KNeighborsClassifierclf = KNeighborsClassifier(n_neighbors=9)clf = clf.fit(Xtrain,Ytrain)score = clf.score(Xtrain,Ytrain)score

运行结果

0.9494505494505494 clf = clf.fit(Xtest,Ytest)score = clf.score(Xtest,Ytest)score

运行结果

0.9385964912280702

这次的score结果优于上次,可见,由学习曲线选择的K值预测效果优于之前的K值,说明学习曲线作为一种机器学习参数调优的手段,是有效的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。