//2019.08.01下午
机器学习算法1——k近邻算法
1、k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用。
2、kNN机器学习算法具有以下的特点:
(1)思想极度简单
(2)应用的数学知识非常少
(3)解决相关问题的效果非常好
(4)可以解释机器学习算法使用过程中的很多细节问题
(5)更加完整地刻画机器学习应用的流程

其原理图如下:在所有的原有数据集基础上判断新的点的属性分类时,指定k的值,然后找到所有原始数据点中与其新输入需要判断的点的最近的k的点,然后根据这k个点的属性分类来确定新的点的属性。

图1 原始数据点

图2 新输入点的分布位置,指定k为3,即找到最近的三个点

4、KNN算法原理介绍及其训练学习代码实现:
import numpy as np
import matplotlib.pyplot as plt #导入相应的数据可视化模块
raw_data_X=[[3.393533211,2.331273381],
[3.110073483,1.781539638],
[1.343808831,3.368360954],
[3.582294042,4.679179110],
[2.280362439,2.866990263],
[7.423436942,4.696522875],
[5.745051997,3.533989803],
[9.172168622,2.511101045],
[7.792783481,3.424088941],
[7.939820817,0.791637231]
]
raw_data_Y=[0,0,0,0,0,1,1,1,1,1]
print(raw_data_X)
print(raw_data_Y)
x_train=np.array(raw_data_X)
y_train=np.array(raw_data_Y)     #数据的预处理,需要将其先转换为矩阵,并且作为训练数据集
print(x_train)
print(y_train)
plt.figure(1)
plt.scatter(x_train[y_train==0,1],x_train[y_train==0,0],color="g")
plt.scatter(x_train[y_train==1,0],x_train[y_train==1,1],color="r") #将其散点图输出
x=np.array([8.093607318,3.365731514]) #定义一个新的点,需要判断它到底属于哪一类数据类型
plt.scatter(x[0],x[1],color="b") #在算点图上输出这个散点,看它在整体散点图的分布情况
#kNN机器算法的使用
from math import sqrt
distance=[]
for x_train in x_train:
d=sqrt(np.sum((x_train-x)**2))
distance.append(d)
print(distance)
d1=np.argsort(distance) #输出distance排序的索引值
print(d1)
k=6
n_k=[y_train[(d1[i])] for i in range(0,k)]
print(n_k)
from collections import Counter #导入Counter模块
c=Counter(n_k).most_common(1)[0][0] #Counter模块用来输出一个列表中元素的个数,输出的形式为列表,其里面的元素为不同的元组
#另外的话对于Counter模块它有.most_common(x)可以输出统计数字出现最多的前x个元组,其中元组的key是其元素值,后面的值是出现次数
y_predict=c
print(y_predict)
plt.show() #输出点的个数

实现代码及其结果如下:

最新文章

  1. oracle exp imp 导入 正在跳过表 plsql 导入表 成功终止 数据 被导入
  2. PHP面向对象06_异常处理
  3. BZOJ3393:[USACO LPHONE] 激光通讯
  4. 响应式Web设计(Responsive Web design)
  5. db2权限控制(转)
  6. C++虚函数及虚函数表解析
  7. mysql 从5.1升级到5.5.33 后 innodb 表出错 及 innodb表修复
  8. 基于Centos6.6的R720服务器四网口端口聚合的实践
  9. .net到Java那些事儿--整合SSH
  10. 【Beta】阶段 第二次Daily Scrum Meeting
  11. git命令提交项目
  12. zookeeper初探
  13. UEditor1.2.6.0在.net环境下使用
  14. 莫烦scikit-learn学习自修第四天【内置训练数据集】
  15. selenium-java,selenium版本和火狐浏览器版本对应关系
  16. Python数据清洗基本流程
  17. Asp.net中web.config配置文件详解(一)
  18. React的组件间通信
  19. Head First Servlets & JSP 学习笔记 第二章 —— Web应用体系结构
  20. 7-OKHttp使用详解,步骤挺详细的,适合初学者使用!

热门文章

  1. leetcode网解题心得——61. 旋转链表
  2. PXE无人值守实现批量化自动安装Linux系统
  3. LinkQueue(链队)
  4. js数组去重解决方案
  5. Unity的3种消息传递方法(SendMessage等)
  6. P1017进制转化
  7. Just a Hook-HDU1698 区间染色+区间查询
  8. Java基础 -1.2
  9. java中如何修改事务的隔离级别
  10. 通过命令行提交更新代码到gitlab上