(一)KNN算法

“近朱者赤,近墨者黑”可以说是 KNN 的工作原理。整个计算过程分为三步:
1、计算待分类物体与其他物体之间的距离;
2、统计距离最近的 K 个邻居;
3、对于 K 个最近的邻居,它们属于哪个分类最多,待分类物体就属于哪一类。

K值的选择至关重要,K值太小,容易过拟合;K值太大,容易欠拟合。所以 K 值应该是个实践出来的结果,并不是我们事先而定的。在工程上,我们一般采用交叉验证的方式选取 K 值。

计算距离
在 KNN 算法中,还有一个重要的计算就是关于距离的度量。两个样本点之间的距离代表了这两个样本之间的相似度。距离越大,差异性越大;距离越小,相似度越大。关于距离的计算方式有下面五种方式:
1、欧氏距离;
2、曼哈顿距离;
3、闵可夫斯基距离;
4、切比雪夫距离;
5、余弦距离。

KD树——为了减少计算距离次数,提升 KNN 的搜索效率,人们提出了 KD 树(K-Dimensional 的缩写)。KD 树是对数据点在 K 维空间中划分的一种数据结构。在 KD 树的构造中,每个节点都是 k 维数值点的二叉树。既然是二叉树,就可以采用二叉树的增删改查操作,这样就大大提升了搜索效率。

也可以用 KNN 进行回归,通过 K 个邻居对新的点的属性进行值的预测。

(二)KNN与SVM、朴素贝叶斯、决策树的比较

实例:通过sklearn 中自带的手写数字数据集进行手写数字识别

需要注意:我们在做多项式朴素贝叶斯分类的时候,传入的数据不能有负数。因为 Z-Score 会将数值规范化为一个标准的正态分布,即均值为 0,方差为 1,数值会包含负数。因此我们需要采用 Min-Max 规范化,将数据规范化到[0,1]范围内。

from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_digits
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import MultinomialNB
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt# 加载数据
digits = load_digits()
data = digits.data
# 分割数据,将25%的数据作为测试集,其余作为训练集(你也可以指定其他比例的数据作为训练集)
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)
# 采用Min-Max规范化
mm = preprocessing.MinMaxScaler()
train_mm_x = mm.fit_transform(train_x)
test_mm_x = mm.transform(test_x)# 创建KNN分类器
knn = KNeighborsClassifier()
knn.fit(train_ss_x, train_y)
predict_y = knn.predict(test_ss_x)
print("KNN准确率: %.4lf" % accuracy_score(test_y, predict_y))# 创建SVM分类器
svm = SVC()
svm.fit(train_ss_x, train_y)
predict_y=svm.predict(test_ss_x)
print('SVM准确率: %0.4lf' % accuracy_score(test_y, predict_y))# 创建Naive Bayes分类器
mnb = MultinomialNB()
mnb.fit(train_mm_x, train_y)
predict_y = mnb.predict(test_mm_x)
print("多项式朴素贝叶斯准确率: %.4lf" % accuracy_score(test_y, predict_y))# 创建CART决策树分类器
dtc = DecisionTreeClassifier()
dtc.fit(train_mm_x, train_y)
predict_y = dtc.predict(test_mm_x)
print("CART决策树准确率: %.4lf" % accuracy_score(test_y, predict_y))

运行结果:

KNN准确率: 0.9756
SVM准确率: 0.9867
多项式朴素贝叶斯准确率: 0.8844
CART决策树准确率: 0.8600

得出结论:

KNN与SVM、朴素贝叶斯、决策树的比较相关推荐

  1. 机器学习之KNN算法,朴素贝叶斯,决策树,SVM算法比较

    KNN算法 knn = KNeighborsClassifier ( ) 朴素贝叶斯 gnb = GaussianNB ( ) 决策树 dtc = DecisionTreeClassifier ( ) ...

  2. 基于6种监督学习(逻辑回归+决策树+随机森林+SVM+朴素贝叶斯+神经网络)的毒蘑菇分类

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 本文是kaggle案例分享的第3篇,赛题的名称是:Mushroom Classification,Safe to eat ...

  3. 机器学习实战之分类算法(K-近邻/朴素贝叶斯/决策树/随机森林)

    机器学习分类算法 1. 机器学习算法简介 1.1 按照学习方式分类 1.2 区别 1.3 关于监督学习中的分类与回归区别 1.4 机器学习开发流程 2. 数据集介绍与划分 2.1 sklearn数据集 ...

  4. 朴素贝叶斯情感分析评分python_Stanford NLP学习笔记:7. 情感分析(Sentiment)

    1. 什么是情感分析(别名:观点提取,主题分析,情感挖掘...) 应用: 1)正面VS负面的影评(影片分类问题) 2)产品/品牌评价: Google产品搜索 3)twitter情感预测股票市场行情/消 ...

  5. 浅谈对机器学习方法(决策树,SVM,knn最近邻,随机森林,朴素贝叶斯、逻辑回归)的理解以及用sklearn工具实现文本分类和回归方法...

    一.决策树 定下一个最初的质点,从该点出发.分叉.(由于最初质点有可能落在边界值上,此时有可能会出现过拟合的问题. 二.SVM  svm是除深度学习在深度学习出现之前最好的分类算法了.它的特征如下: ...

  6. 机器学习(八)KNN,SVM,朴素贝叶斯,决策树与随机森林

    机器学习(八)KNN,SVM,朴素贝叶斯,决策树与随机森林 参考: https://zhuanlan.zhihu.com/p/61341071 1.KNN-K最近邻(K-Nearest Neighbo ...

  7. 机器学习实现图像分类(简单易上手) SVM KNN 决策树 朴素贝叶斯 机器学习作业

    机器学习实现图像分类 SVM KNN 决策树 朴素贝叶斯 重要提示:本文仅仅靠调用python的sklearn中的模型包实现机器学习方法,不喜勿喷 代码主要参考并改进 https://blog.csd ...

  8. 《数据分析实战》总结二之分类算法:决策树,朴素贝叶斯,SVM,KNN,Adaboost

    1 决策树 1.1 工作原理 把以前的经验总结出来,最后得到结果 比如打篮球,一般会根据"天气"."温度"."湿度"."刮风&qu ...

  9. 构造matlab决策树分类器,Matlab建立逻辑回归,决策树,SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线...

    ​ 尽管对于较高的阈值,SVM可以产生更好的ROC值,但逻辑回归通常更擅长区分不良雷达收益与良好雷达.朴素贝叶斯的ROC曲线通常低于其他两个ROC曲线,这表明样本内性能比其他两个分类器方法差. 比较所 ...

最新文章

  1. 央行发布论文:区块链能做什么,不能做什么?
  2. Java动态代理代码快速上手
  3. Linux文件属性和权限
  4. L0、L1、L2范数在机器学习中的应用
  5. CentOS7.2安装Python3.6.3
  6. java字符串是不是整数的函数_java判断字符串是否为整数的方法
  7. ARM 汇编学习——编写简单的ARM汇编程序
  8. html的数据类型有哪些,数据库数据类型有哪些
  9. 视频+笔记+能够跑通的代码,《李宏毅机器学习完整笔记》发布!
  10. 根据元素相对位置来控制滚动条
  11. python软件包版本查询的方法
  12. [Java]HashMap的两种排序方式
  13. 系统分析和设计方法之可行性分析和系统方案建议
  14. cocostudio常见问题
  15. Delphi7常用插件
  16. CLM 陆面过程模式
  17. NVIDIA Riva中文手册 (五) —— Riva TTS语音合成API的使用
  18. 实战:第十五章:摸爬滚打这些年的心路历程
  19. js每日一题(12)
  20. “趣工厂”获得数百万元天使轮融资,梅鹤资本领投...

热门文章

  1. 对流体力学做出巨大贡献的杰出历史人物
  2. Android:MVP模式+XRecycleView+OKHttp+自定義梯形佈局
  3. Win11如何开启远程桌面连接?
  4. 北美留学生社交方式图鉴
  5. adb 报错error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:65533
  6. MultiDex工作原理
  7. 手机尾号搜索表设计php,用正则表达式筛选特殊尾数的手机号码
  8. matlab曲线拟合工具箱出故障,MATLAB曲线拟合工具箱的输出与生成的函数不匹配
  9. oracle 创建加注释的表,oracle创建表+注释
  10. 快捷导航shortcut部分做法二(85)