最近在折腾机器学习算法,发现KNN这玩意儿挺有意思的,特别是用它来分类鸢尾花数据集的时候。咱们直接撸起袖子开干,先看看怎么用Python三行代码加载数据

发布时间:2026/6/23 10:03:28

最近在折腾机器学习算法,发现KNN这玩意儿挺有意思的,特别是用它来分类鸢尾花数据集的时候。咱们直接撸起袖子开干,先看看怎么用Python三行代码加载数据 25KNN算法实现鸢尾花分类分类结果和准确率随着k值变化过程如下图所示。from sklearn import datasets iris datasets.load_iris() X, y iris.data, iris.target这数据集长得就像个乖巧的表格4列特征分别是花萼长宽、花瓣长宽目标值对应三种鸢尾花。顺手把数据拆成训练集和测试集from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42)这里有个小细节random_state设成42纯粹是程序员的恶趣味保证每次切分结果一致。接下来搞个骚操作——数据标准化。KNN这算法对尺度敏感得像踩了尾巴的猫不处理的话距离计算要出幺蛾子from sklearn.preprocessing import StandardScaler scaler StandardScaler().fit(X_train) X_train scaler.transform(X_train) X_test scaler.transform(X_test)标准化前后数据分布变化肉眼可见原本花瓣长度动不动就五六厘米现在都缩放到-1到1之间。上主菜KNN模型先整个k5试试水from sklearn.neighbors import KNeighborsClassifier knn KNeighborsClassifier(n_neighbors5) knn.fit(X_train, y_train) print(f准确率{knn.score(X_test, y_test):.2%}) # 输出准确率97.78%嚯这准确率看着挺唬人但别急着开香槟。咱们把k值从1到30撸一遍看看效果import matplotlib.pyplot as plt accuracy [] for k in range(1, 31): knn KNeighborsClassifier(n_neighborsk).fit(X_train, y_train) accuracy.append(knn.score(X_test, y_test)) plt.plot(range(1,31), accuracy, markero) plt.xlabel(k值), plt.ylabel(准确率) plt.show()跑出来的曲线跟过山车似的——k1时准确率直接掉到92%k7冲到100%接着又慢慢下滑。这说明选k值跟找对象似的太小容易过拟合跟邻居太亲密太大又容易欠拟合跟远房亲戚搞暧昧。实际项目中建议用交叉验证来找最佳k值不过咱们这个简单案例直接看图说话更直观。最后提醒下KNN在特征工程到位的小数据集上能打但数据量上百万级别的话...建议换个算法保命。25KNN算法实现鸢尾花分类分类结果和准确率随着k值变化过程如下图所示。

相关新闻