今天是生信星球陪你的第994天
公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课,点进去咨询微信↓
生信分析直播课程(9月30日下一期)
生信新手保护学习小组(10月初下一期)
单细胞陪伴学习小组(10月初下一期
1.衡量模型的准确程度
2.训练集与测试集的拆分
3.模型的复杂程度
4.可视化k值和预测准确率的关系
1.衡量模型的准确程度
2.训练集与测试集的拆分
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=21, stratify=y)
knn = KNeighborsClassifier(n_neighbors=6)
knn.fit(X_train, y_train)
print(knn.score(X_test, y_test))
## 0.8733333333333333
test_size=0.3
是测试集占所有样本总数的30%random_state
是设置了随机种子,让结果可重复stratify=y
是控制数据拆分的均匀程度,希望训练集和测试集的0/1比例相同,再详细解释一下就是:假如有30%是1,这样拆分后,训练集和测试集都有30%的1。3.模型的复杂程度
在KNN算法中,k值的选择对模型的性能有显著影响。k值代表在进行分类决策时考虑的最近邻居的数量。如果k值选择较小,模型可能会更复杂,因为它对训练数据中的噪声更敏感,这可能导致过拟合。相反,如果k值选择较大,模型可能会变得更简单,因为它会平滑决策边界,可能会忽略一些重要的模式,从而导致欠拟合。
4.可视化k值和预测准确率的关系
train_accuracies = {}
test_accuracies = {}
neighbors = np.arange(1, 26) # 整数1-25
for neighbor in neighbors:
knn = KNeighborsClassifier(n_neighbors=neighbor)
knn.fit(X_train, y_train)
train_accuracies[neighbor] = knn.score(X_train, y_train)
test_accuracies[neighbor] = knn.score(X_test, y_test)
import pandas as pd
ac = pd.DataFrame([train_accuracies,test_accuracies]).transpose()
ac.columns = ['train_accuracies','test_accuracies']
ac.reset_index(inplace=True)
ac.head()
plt.figure(figsize=(8, 6))
plt.title("KNN: Varying Number of Neighbors")
plt.plot(neighbors, train_accuracies.values(), label="Training Accuracy")
plt.plot(neighbors, test_accuracies.values(), label="Testing Accuracy")
plt.legend()
plt.xlabel("Number of Neighbors")
plt.ylabel("Accuracy")
plt.show()
虽然训练集和测试集的准确率都计算并画出来了,但主要还是看测试集的指标表现。
由图上可见,随着K值的增加,测试集的准确率先螺旋上升,然后趋于稳定。