上节介绍了机器学习的决策树算法,它属于分类算法,本节我们介绍机器学习的另外一种分类算法:最近邻规则分类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. C基本类型

    C基本类型有: char:8位,可添加修改符signed或是unsigned short:16位,同有singed和unsigned int:32位,同有singed和unsigned long:在3 ...

  2. JAVA中java.util.Date、java.sql.Timestamp和String之间的互相转换

    java.util.Date与的String互转 java.util.Date---->String /** * 将java.util.Date对象转化为String字符串 * @param d ...

  3. 树莓派.安装系统+Node.js+MongoDB系列环境

    1.先去树莓派官网下载最新的ROM https://www.raspberrypi.org/downloads/raspbian/ 这里选的是: RASPBIAN JESSIE WITH DESKTO ...

  4. LeetCode 598. Range Addition II (范围加法之二)

    Given an m * n matrix M initialized with all 0's and several update operations. Operations are repre ...

  5. Arduino上传数据至贝壳物联并与FPGA进行交互

    本篇实现Arduino与FPGA交互,当然也没有什么新的协议,还是基于串口通讯,现在学一个串口通信基本上可以驱动大多数模块了,而且和各种单片机无缝数据交互,Arduino由于其强大的库函数支持,在实现 ...

  6. 本表触发更新modifytime,跨表更新modifytime 触发器

    一.每行有改动,则触发更新modifytime SQL> create table test(id int, name varchar(10), crdate date, udate date) ...

  7. Cloud9 on Docker镜像发送

    老外有做过几个cloud9的镜像,但是都有各种各样的问题. 小弟在此做了一个docker镜像,特此分享,希望各位大佬多提宝贵意见.谢谢. Cloud9 Online IDE Coding anywhe ...

  8. Surround the Trees(凸包)

    Surround the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  9. IdentityServer4 SigningCredential(RSA 证书加密)

    IdentityServer4 默认提供了两种证书加密配置: services.AddIdentityServer() .AddDeveloperSigningCredential() .AddTem ...

  10. ASP.NET Core的身份认证框架IdentityServer4(6)- 开始

    安装和概述 启动一个新的IdentityServer项目有两种基本方法: 从头开始 从Visual Studio中的ASP.NET身份模板开始 如果从头开始,我们提供了一些文档.项目帮助和内存存储支持 ...