上节介绍了机器学习的决策树算法,它属于分类算法,本节我们介绍机器学习的另外一种分类算法:最近邻规则分类KNN,书名为【k-近邻算法】。

KNN算法的工作原理是:将预测的目标数据分别跟样本进行比较,得到一组距离的数据,取最近的K个数据,遵循少数服从多数的原则,从而获得目标数据的分类。

简单的说,就是【近朱者赤,近墨者者黑】,下面我们一起通过KNN算法来演示这句名言的内涵。

【案例背景】

我的一个表弟,自幼聪明过人,读书的时候称得上名列前茅,父母以此为骄傲。但是好景不长,自从参加工作后,结识了几个狐朋狗友,从此进入了堕落的生活,名声也臭名远扬。

家里人经分析,主要是环境影响人,让他尽快远离他那些所谓的哥们朋友,多结识些正能量有思想有理想的人,也在此祝他成功吧~

【代码演示】

from sklearn import neighbors
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap #加上这句 #构造800个随机分布的点
X1 = np.random.randint(0, 500, (250, 2))
X2 = np.random.randint(500, 1000, (250, 2))
X3 = np.random.randint(0, 1000, (300, 2)) #这里添加一些杂点
X = np.concatenate((X1, X2, X3), axis=0) #初始化数据,用0和1表示结果
y = np.ones(800, dtype=np.int)
y[0:250] = 0
y[500:650] = 0 #KNN算法核心语句,其中k=15
clf = neighbors.KNeighborsClassifier(15, weights='uniform')
clf.fit(X, y) #显示预测结果
test_x1 = 400
test_y1 = 400
test_x2 = 600
test_y2 = 600
x = np.array([[test_x1, test_y1]])
Z = clf.predict(x)
print('蓝色方块归类:', Z)
x = np.array([[test_x2, test_y2]])
Z = clf.predict(x)
print('蓝色三角归类:', Z) #将数据图形化显示, 结果0用红色显示,1用黑色显示
cmap_bold = ListedColormap(['#ff6666', '#919191'])
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold, edgecolor='k', s=30)
plt.scatter([test_x1], [test_y1],marker='s', color='#224EFF', s= 300)
plt.scatter([test_x2], [test_y2], marker='^', color='#224EFF', s= 300)
plt.show()

【运行结果】

蓝色方块归类: [0]
蓝色三角归类: [1]
 

-------------------------------------------------------
 
【案例总结】
从上图中可以看到:
红色小圆:【正能量】的社会环境,计算机用0表示。
黑色小圆:【负能量】的社会环境,计算机用1表示。
蓝色方块:如果我表弟处在【正能量】的社会环境中,我们预测他会成为一个【正能量】的人。我们观察程序运行结果为0,表示归为红色这一类。
蓝色三角:如果我表弟处在【负能量】的社会环境中,我们预测他会成为一个【负能量】的人。我们观察程序运行结果为1,表示归为黑色这一类。
 
值得说明一点的是:程序中k=15,可以通过调整k的值(最好是奇数)来分别计算,看结果是否一样?
 
 
-------------------------------------------------------

OK, 本讲到此结束,后续更多精彩内容,请持续关注我的博客。

本文为原创文章,请珍惜作者的劳动成果,转载请注明出处。

原文地址:http://www.cnblogs.com/robin201711/p/7992784.html

 

机器学习算法 - 最近邻规则分类KNN的更多相关文章

  1. 机器学习--最邻近规则分类KNN算法

    理论学习: 3. 算法详述        3.1 步骤:      为了判断未知实例的类别,以所有已知类别的实例作为参照      选择参数K      计算未知实例与所有已知实例的距离      选 ...

  2. 最近邻规则分类(k-Nearest Neighbor )机器学习算法python实现

    综述 Cover和Hart在1968年提出了最初的近邻算法 是分类(classification)算法 输入基于实例的学习(instance-based learning),惰性学习(lazy lea ...

  3. 机器学习:最近邻规则KNN算法

    这个算法就比较简单易懂了 就是把每个向量的特征值抽象成坐标,寻找最近的k个点,来进行划分 代码如下 #include <iostream> #include <cstdio> ...

  4. 最邻近规则分类KNN算法

    例子: 求未知电影属于什么类型: 算法介绍: 步骤:  为了判断未知实例的类别,以所有已知类别的实例作为参照      选择参数K      计算未知实例与所有已知实例的距离      选择最近K个已 ...

  5. 每日一个机器学习算法——k近邻分类

    K近邻很简单. 简而言之,对于未知类的样本,按照某种计算距离找出它在训练集中的k个最近邻,如果k个近邻中多数样本属于哪个类别,就将它判决为那一个类别. 由于采用k投票机制,所以能够减小噪声的影响. 由 ...

  6. # 机器学习算法总结-第一天(KNN、决策树)

    KNN算法总结 KNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别.(监督) k近邻算法(knn)是一种基本的分类与回归的算法,k-mea ...

  7. 如何解读「量子计算应对大数据挑战:中国科大首次实现量子机器学习算法」?——是KNN算法吗?

    作者:知乎用户链接:https://www.zhihu.com/question/29187952/answer/48519630 我居然今天才看到这个问题,天……本专业,有幸听过他们这个实验的组会来 ...

  8. 机器学习算法笔记1_2:分类和逻辑回归(Classification and Logistic regression)

    形式: 採用sigmoid函数: g(z)=11+e−z 其导数为g′(z)=(1−g(z))g(z) 如果: 即: 若有m个样本,则似然函数形式是: 对数形式: 採用梯度上升法求其最大值 求导: 更 ...

  9. scikit-learn中的机器学习算法封装——kNN

    接前面 https://www.cnblogs.com/Liuyt-61/p/11738399.html 回过头来看这张图,什么是机器学习?就是将训练数据集喂给机器学习算法,在上面kNN算法中就是将特 ...

随机推荐

  1. Chrome等浏览器下出现net::ERR_BLOCKED_BY_CLIENT的解决办法

    当我们在做开发时,调试页面图片会出现部分图片无法正常显示,并且确认图片的地址正确: 按F12 Debug查看报错原因,提示net::ERR_BLOCKED_BY_CLIENT错误,但当我们点击图片地址 ...

  2. 基于JavaBean编辑器读取peroperties文件

    引言 最近在重读<精通Spring+4.x++企业应用开发实战>这本书,看到了有关JavaBean编辑器的部分,了解到PropertyEditor和BeanInfo的使用.不得不说,Bea ...

  3. escape、encodeURI和encodeURIComponent的区别及使用

    编码 javascript中的编码函数有三种 escape(string) encodeURI(string) encodeURIComponent(string) 解码 相应的解码函数也有以下三种 ...

  4. (转) Redis学习教程--基本命令

    原文出自:http://www.cnblogs.com/woshimrf/p/5198361.html 目录 全局操作:1.redis是key-value存储的,放在内存中,并在磁盘持久化的数据结构存 ...

  5. 关于QQ空间相册功能的构想与简单实现

    QQ空间上传照片对其可以分类,形成不同的相册,这对于用户体验来说是很不错的,如果用户只能上传不加以分类,那么用户体验会很差. 下面是自己关于相册功能实现的一些简单看法: 首先,是创建相册,可以用pan ...

  6. LeetCode 163. Missing Ranges (缺失的区间)$

    Given a sorted integer array where the range of elements are in the inclusive range [lower, upper], ...

  7. EF框架搭建小总结--CodeFirst模型优先

    前言:之前在下总结编写了一篇 EF框架搭建小总结--ModelFirst模型优先 博文,看到一段时间内该博文的访问量蹭.蹭蹭.蹭蹭蹭...往上涨(实际也不是很多,嘿嘿),但是还是按捺不住内心的喜悦(蛮 ...

  8. JavaScript 中的对象引用

    ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型.也有其他的叫法,比如原始类型和对象类型,拥有方法的类型和不能拥有方法的类型,还可以分为可变类型和不可变类型,其实这些叫法都是依据这两 ...

  9. 用ajax的同步请求解决登陆注册需要根据服务器返回数据判断是否能提交的问题

    最近在写www.doubilaile.com的登陆注册.需要用ajax请求服务器判断用户名是否存在,用户名和密码是否匹配,进而提交数据.碰到的问题是异步请求都能成功返回数据,但是该数据不能作为紧接着的 ...

  10. Xilinx ISE14.1用Verilog语言实现一个半加器并测试

    <一>建立一个工程 注:Xilinx ISE的安装在此不再过多说明,网上有参考资料 1.打开软件进入如下界面 2.创建工程 File-->New Project 3.创建文件(我取名 ...