25丨KNN(下):如何对手写数字进行识别?
该思维导图由 AI 生成,仅供参考
如何在 sklearn 中使用 KNN
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何使用KNN算法对手写数字进行识别分类。KNN算法通过计算待分类物体与其他物体之间的距离,并统计最近的K个邻居的分类情况来决定物体分类。文章首先介绍了在sklearn中使用KNN算法的方法,包括KNN分类器的构造和参数设置。通过实战演示,展示了KNN分类器的训练和预测过程。此外,还介绍了手写数字数据集的特点和数据探索方法,以及对数据进行规范化处理的步骤。最后,通过对比KNN算法与其他分类器在手写数字数据集上的效果,展示了KNN算法的准确率。整体来说,本文通过实例演示了KNN算法在图像识别领域的应用,为读者提供了一种快速了解和使用KNN算法的方法。文章还提到了其他分类器的效果,并指出在数据量较大时,深度学习+GPU运算更适合。读者可以通过实例了解数据探索、数据可视化、数据规范化、模型训练和结果评估的使用过程。文章最后留下了两道思考题,鼓励读者深入思考KNN分类器的构造参数、功能函数以及K值对分类器准确率的影响。
《数据分析实战 45 讲》,新⼈⾸单¥59
全部留言(41)
- 最新
- 精选
- Ricardoaccuracy_score的参数顺序都错了,由于是计算真实标签和预测标签重合个数与总个数的比值,总能得到正确的答案,但是官方文档中写明的正确顺序应该是(y_true,y_pred)
编辑回复: 看的很认真,我刚查了下官方文档确实是先写y_true,然后是y_pred,也就是:accuracy_score(y_true, y_pred, normalize=True, sample_weight=None) 关于score的计算,是判断y_true和y_pred是否相等,也就是 score = y_true == y_pred,然后再根据样本的权重做归一化处理,调用_weighted_sum(score, sample_weight, normalize) 所以我刚用代码测试了下accuracy_score(y_true, y_pred)和accuracy_score(y_pred, y_true)的结果是一样的。Anyway,规范的话应该按照官方文档的顺序来调用参数。多谢反馈
2019-04-1031 - 不做键盘侠为什么test只需要使用transform就可以了?test_ss_x = ss.transform(test_x)
编辑回复: 一个很好的问题。我在train的时候用到了:train_ss_x = ss.fit_transform(train_x) 实际上:fit_transform是fit和transform两个函数都执行一次。所以ss是进行了fit拟合的。只有在fit拟合之后,才能进行transform 在进行test的时候,我们已经在train的时候fit过了,所以直接transform即可。 另外,如果我们没有fit,直接进行transform会报错,因为需要先fit拟合,才可以进行transform。
2019-02-08628 - 牛奶布丁老师,为什么做多项式朴素贝叶斯分类的时候,传入的数据不能有负数呢,之前老师讲文本分类的时候好像没有提到这一点?
编辑回复: 多项式朴素贝叶斯实际上是符合多项式分布,不会存在负数。而高斯朴素贝叶斯呈现的是高斯分布,也就是正态分布,比如均值为0,方差为1的标准正态分布,可以存在负数。
2019-02-1313 - Yiuway在做项目的时候,应该什么时候用Min-Max,什么时候用Z-Score呢?当我不做规范化的时候,反而准确率更高,这是为什么呢?在数据规范化该什么时候做不太理解,希望得到回复!
作者回复: 数据比较零散的话可以使用Min-Max规范化,如果数据符合高斯分布,可以使用Z-Score规范化。 有些分类方法对归一化比较敏感,比如GaussianNB,效果就不一定好。不过大部分情况下,还是需要先对数据做规范化处理
2019-09-30212 - 滢用代码计算来以下准确率: knn默认k值为5 准确率:0.9756 knn的k值为200的准确率:0.8489 SVM分类准确率:0.9867 高斯朴素贝叶斯准确率:0.8111 多项式朴素贝叶斯分类器准确率:0.8844 CART决策树准确率:0.8400 K值的选取如果过大,正确率降低。 算法效率排行 SVM > KNN(k值在合适范围内) >多项式朴素贝叶斯 > CART > 高斯朴素贝叶斯
作者回复: 对的 Good Job 滢离数据总监越来越近了
2019-04-187 - LeeKNN 中的 K 值设置为 200,KNN 准确率: 0.8489,k值过大,导致部分未知物体没有分类出来,所以准确率下降了
编辑回复: 对的,K值过大,无法将未知物体分类出来,会降低准确率。
2019-02-143 - FORWARD―MOUNTtrain_x与train_y都是训练集?
编辑回复: 对 训练集的特征矩阵和分类结果。对应test_x和test_y是测试集的特征矩阵和分类结果。
2019-02-1622 - JingZ#knn 将K值调为200,准确率变为0.8489了,相比较默认K=5的准确率 0.9756,下降13% from sklearn.datasets import load_digits import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn import preprocessing from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score #加载数据 digits = load_digits() data = digits.data #数据探索 print(data.shape) #查看第一幅图像 print(digits.images[0]) print(digits.target[0]) #数据可视化 plt.gray() plt.imshow(digits.images[0]) plt.show() #训练集 测试集 train_x, test_x, train_y, test_y = train_test_split(data, digits.target, test_size=0.25, random_state=33) #采用 Z-Score 规范化 ss = preprocessing.StandardScaler() train_ss_x = ss.fit_transform(train_x) test_ss_x = ss.transform(test_x) #创建 KNN 分类器 knn = KNeighborsClassifier(n_neighbors=200) #用训练集训练 knn.fit(train_ss_x, train_y) #用测试集预测 predict_y = knn.predict(test_ss_x) #模型评估 print('KNN 准确率:%.4lf' % accuracy_score(predict_y, test_y))
编辑回复: 对的K值大未必好
2019-02-152 - Ronnyz老师能解释下数据分割时random_state的取值有什么规范吗? 我自己测试的random_state=666与老师=33得出的准确度还是有一些差距的: KNN准确率:0.9778 SVM准确率:0.9733 多项式朴素贝叶斯准确率:0.9067 CART决策树准确率:0.8489
作者回复: random_state 就是随机数种子,没有必要调整个参数,每次运算结果不同 还是正常的
2019-11-141 - 从未在此那个标准化函数已经在训练集上拟合并产生了平均值和标准差。所以测试集用同样的标准直接拿来用就行了
作者回复: 可以
2019-02-121