KNN算法是机器学习中入门级算法,属于监督性学习算法。SupervisedLearning.

通过Plinko游戏来介绍该算法。

就是随机在上面投球,然后球进下面的哪个地方就得多少分。

然后在规定得投次数得到最高得分数,应该怎么投?

然后预测每次投能得到多少分?

首先应该通过训练数据集,看看在每个位置投得点,能得到多少分,然后预测点距离每次点得距离,然后排序,那么预测点周围出现次数最多得就是大概率得到得分数。

1,通过训练得数据集,提取特征值和标签,特征值就是距离左侧得距离。标签就是投下去得到得分数。

2,选择预测点,和K个距离近得数。计算每个点得距离。

3.排序,前K个点得出现最多次标签得就是得分得大概率值。

#KNN算法是寻找K个距离最近的邻居,然后根据已知的邻居label,出现次数最多的,推断出测试点的类别。
# polinko 模拟
import numpy as np
import collections as c def KNN(k,predictPoint,feature,label):
# 先求出预测点与周围点的距离,然后排序,找出距离最近的k个点,出现最多的次数,就是预测结果。
# map内置函数(func,iterable)
distance = list(map(lambda x: abs(200 - x), feature))
# np.sort()是直接排序,而我们需要feature和labell联系一起
# print(np.sort(distance))
# 所以应该使用np.argsort()可以得到排序的后的index,可以与label关联
sort_index = np.argsort(distance)
# 通过切片找出K个最邻近的点
return c.Counter(label[sort_index][:k]).most_common(1)[0][0] # 返回的是(4,2),表示在k的最邻近元素,4出现最多次数为2 if __name__ == '__main__':
data = np.array([
[120, 3],
[140, 3],
[160, 3],
[40, 2],
[70, 2],
[200, 4],
[250, 4],
[100, 3]
])
feature = data[:,0]
label = data[:,-1]
k = 5
predictPoint = 170
print(KNN(k,predictPoint,feature,label))

 预测结果:

3 

代码中给出的数据集是随机写的,不一定准。

现在选择真实的数据集,通过numpy中loadtext()读取csv文本数据集。

np.loadtxt("data01.csv",delimiter=",")这个第一个参数文件名称,第二个delimiter是数据分割符.
然后就和后面一样,提取特征值和标签值,计算k个局里近的距离。
但是和真实的还有有差距,这个是怎么回事。
所以造成结果不正确的原因有这些:
还需要
1.调整参数,简称调参。
2.可能还有其他维度特征会影响结果,但是现在只给了一种特征值。

缺点:对于数据量很大得训练集合,耗费内存。对硬件要求较高。

最新文章

  1. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM
  2. MySQL sharding的几个参考地址
  3. 【转】oracle回闪操作
  4. CentOS 6 安装 python 2.7 和 mod_wsgi 运行pyocr[tesseract]
  5. 探索 OpenStack 之(13):研究 Keystone
  6. redhat6.0 安装ORACLE11GR2过程记录
  7. CXF_Spring_Rest
  8. 6.移植uboot-支持yaffs烧写,打补丁
  9. html中的div span和frameset框架标签
  10. python全栈开发中级班全程笔记(第二模块)第一部分:文件处理
  11. android 第三次作业
  12. 【python练习题】程序7
  13. 1011 A+B 和 C (15 分)
  14. java中多线程详解-synchronized
  15. Android后台服务拍照
  16. Unity打包IOS和Android以及之间的交互
  17. Python requests介绍之接口介绍
  18. flask源码解析之上下文为什么用栈
  19. 20145202马超 2016-2017-2 《Java程序设计》第9周学习总结
  20. 教您如何在Word的mathtype加载项中修改章节号

热门文章

  1. [CSP-S模拟测试]:公园(BFS+剪枝)
  2. Git-学习开源代码的技巧
  3. Loadrunner实现多台测试机负载时可能遇到的难题
  4. JVM系列(二) — Java垃圾收集介绍
  5. spring cloud 使用Eureka作为服务注册中心
  6. TP框架的模板路径问题以及常用的模板常量的定义
  7. 【翻译自mos文章】oraclepassword管理策略
  8. HTML页面仿iphone数字角标
  9. H5 移动调试全攻略
  10. 【串线篇】SQL映射文件delete/ insert/ update标签