一、参数学习曲线
怎样选择一个最佳的 呢?
在这里我们要使用机器学习中的神器:参数学习曲线。
参数学习曲线是一条以不同的参数取值为横坐标,不同参数取值下的模型结果为纵坐标的曲线,我们往往选择模型表现最佳点的参数取值作为这个参数的取值。让我们来试试乳腺癌数据集吧!
二、尝试根据学习内容执行以下代码:
# 1. 导入所需要的模块和库
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
# 2. 建立数据集
data = load_breast_cancer()
X = data.data
y = data.target
X_train,X_test,y_train,y_test = train_test_split(X,y,# 特征和标签
test_size=0.3,random_state=420) # 测试集所占的比例
# 3. 绘制学习曲线
# 设置两个列表保存生成的评估结果
train_score_list = []
test_score_list = []
# 循环不断改变k值, 重新建模, 重新训练, 然后评估
# k = 1- 20
for k in range(1, 21):
# 实例化
knn = KNeighborsClassifier(n_neighbors=k)
# 采用训练集进行训练
knn.fit(X_train, y_train)
# 评估模型
# 可以评估模型在训练集上的表现情况
train_score_list.append(knn.score(X_train, y_train))
# 评估在测试集上的表现情况
test_score_list.append(knn.score(X_test, y_test))
# 4. 绘制成折线图
plt.figure(dpi=200)
plt.plot(range(1, 21), train_score_list, label='train_score');
plt.plot(range(1, 21), test_score_list, label='test_score');
plt.xlabel('k_value')
plt.ylabel('socre')
plt.legend();
# 5. 评估模型在测试集的最优得分
max(test_score_list)
# 6. 求最大值对应的k值
print(np.argmax(test_score_list)+1) # argmax找出最大值的索引值
注意:这里输出的最大索引比最实际对应的k值小一个单位
根据运行代码,尝试回答以下问题:
(1)评估模型在训练集的最优得分
(2)最优 值