现在进行第五步,对数据进行预测

那么要做的的是从数据集里面拿出一部分作为要预测的,剩下的去比较,书上使用的是10%

# 对之前做好的kNN算法进行预测
# 首先获取之前构造好的kNN分类器、数据、规则化之后的数据
import kNN
import norm
# 倒完包之后先别急,目的是从规则化的数据集里面选100个出来,用分类器进行预测,计算错误率
# 这里图简单,直接用的前100个进行预测,后面会打乱数据集进行真正的随机 labelSet = norm.labelSet
norm_data = norm.norm_data
random_ratio = 0.10
norm_num = len(norm_data) # 1000
predict_num = int(random_ratio * norm_num) # 100
errorNum = 0.0

然后进行预测,预测的思路是:

  • 100行预测,剩下900行作为比对
  • 每次取1行,然后经过分类器得出结果,再与标记的结果进行比较,看正误
  • 输出结果并计算错误率
# 开始预测
for i in range(predict_num):
predict_result = kNN.classifier(norm_data[i, :], norm_data[predict_num:norm_num, :], labelSet[predict_num:norm_num], 3)
# print(predict_result)
print("the classifier came back with:%d,the real answer is:%d " % (predict_result, labelSet[i]))
if predict_result != labelSet[i]:
errorNum += 1.0
print("the total error rate is:%f"%(errorNum/float(predict_num)))

然鹅,报错了

TypeError: unhashable type: 'numpy.ndarray'

这里的报错,网上找了很多,都没有解决,尝试自己一步一步解决

  • 首先,在kNN文件中使用classifier是没有问题的
  • 这里的错误指向的是kNN.classifier,但是检查了网上说的几种情况如变量名冲突、np.array类型都没有问题
  • 那么只有可能是kNN中classifier的数据类型出了问题
  • 通过报错提示的行数,将字典中的label类型从str修改为int,即可成功

修改代码如下

# kNN.py
label = int(label)

再次运行predict.py

# 对之前做好的kNN算法进行预测
# 首先获取之前构造好的kNN分类器、数据、规则化之后的数据
import kNN
import norm # 倒完包之后先别急,目的是从规则化的数据集里面选100个出来,用分类器进行预测,计算错误率
# 这里图简单,直接用的前100个进行预测,后面会打乱数据集进行真正的随机 labelSet = norm.labelSet
norm_data = norm.norm_data
random_ratio = 0.10
norm_num = len(norm_data) # 1000
predict_num = int(random_ratio * norm_num) # 100
errorNum = 0.0 # 开始预测
for i in range(predict_num):
predict_result = kNN.classifier(norm_data[i, :], norm_data[predict_num:norm_num, :], labelSet[predict_num:norm_num], 3)
# print(predict_result)
print("the classifier came back with:%d,the real answer is:%d " % (predict_result, labelSet[i]))
if predict_result != labelSet[i]:
errorNum += 1.0
print("the total error rate is:%f"%(errorNum/float(predict_num)))

结果如下

the classifier came back with:3,the real answer is:3
the classifier came back with:2,the real answer is:2
the classifier came back with:1,the real answer is:1
...
the classifier came back with:3,the real answer is:1
the total error rate is:0.050000

但是,这也会带来一个问题,那就是原来kNN中的预测会报错,因为原来标签是对应的str类型

kNN-预测的更多相关文章

  1. tensorflow knn 预测房价 注意有 Min-Max Scaling

    示例数据: 0.00632 18.00 2.310 0 0.5380 6.5750 65.20 4.0900 1 296.0 15.30 396.90 4.98 24.00 0.02731 0.00 ...

  2. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  3. 海伦去约会——kNN算法

    下午于屋中闲居,于是翻开<机器学习实战>一书看了看“k-邻近算法”的内容,并学习了一位很厉害的博主Jack Cui的代码,自己照着码了一遍.在此感谢博主Jack Cui的知识分享. 一.k ...

  4. KNN算法 - 数据挖掘算法(3)

    (2017-04-10 银河统计) KNN算法即K Nearest Neighbor算法.这个算法是机器学习里面一个比较经典的.相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法 ...

  5. python机器学习---线性回归案例和KNN机器学习案例

    散点图和KNN预测 一丶案例引入 # 城市气候与海洋的关系研究 # 导包 import numpy as np import pandas as pd from pandas import Serie ...

  6. ES:AI 注释

    为AI做注解: AI已经出第三版,大的框架没有改变,DNN也没有引入AI这本书.第四版网络版应流出,不知道最终定版如何! 强化学习的方法有大幅度更新,但从策略系统更新范畴看来,没有什么实质的改变,只是 ...

  7. Python机器学习笔记 Grid SearchCV(网格搜索)

    在机器学习模型中,需要人工选择的参数称为超参数.比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定.超参数选择不恰当,就会出现欠拟合或者 ...

  8. 小数据玩转Pyspark(2)

    一.客户画像 客户画像应用:精准营销(精准预测.个性化推荐.联合营销):风险管控(高风险用户识别.异常用户识别.高可疑交易识别):运营优化(快速决策.产品组合优化.舆情分析.服务升级):业务创新(批量 ...

  9. 股票价格涨跌预测—基于KNN分类器

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

  10. [Python] 应用kNN算法预测豆瓣电影用户的性别

    应用kNN算法预测豆瓣电影用户的性别 摘要 本文认为不同性别的人偏好的电影类型会有所不同,因此进行了此实验.利用较为活跃的274位豆瓣用户最近观看的100部电影,对其类型进行统计,以得到的37种电影类 ...

随机推荐

  1. 数仓建模—OneID

    今天是我在上海租房的小区被封的第三天,由于我的大意,没有屯吃的,外卖今天完全点不到了,中午的时候我找到了一包快过期的肉松饼,才补充了1000焦耳的能量.但是中午去做核酸的时候,我感觉走路有点不稳,我看 ...

  2. 二十三、原理图和PCB交互式布局

    上图 在原理图里面直接选择在PCB里面就可以移动了,大功告成

  3. 小程序开发之一(使用fly进行http封装)

    原文地址:http://callmesoul.cn 下载fly js文件 fly小程序文档 /api/config.js 配置,主要配置全局的host url和request拦截和request拦截 ...

  4. link和@import的区别浅析

    我们都知道,外部引入 CSS 有2种方式,link标签和@import.它们有何本质区别,有何使用建议,在考察外部引入 CSS 这部分内容时,经常被提起. 如今,很多学者本着知其然不欲知其所以然的学习 ...

  5. 什么是实例内部类 Instance inner class有什么语法?

    1.Instance inner class定义,用途和用法 重要语法:马克-to-win:1)实例内部类一定得有个外层类的实例和它绑定在一起,所以可以用This指针.所以必须先实例化外层类之后才能再 ...

  6. ubantu系统之安装notepadqq

    Ubuntu下的安装方法:     sudo add-apt-repository ppa:notepadqq-team/notepadqq     sudo apt-get update     s ...

  7. Vue脚手架结构及vue-router路由配置

    首先官网介绍,用 Vue.js + vue-router 创建单页应用,是非常简单的.使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,当你要把 vue-router 添加进来,我们需要做 ...

  8. python——如何import包目录

    文件位置 文件所在位置包括 , 源根目录的位置 该文件位置(也可以叫相对位置). 导入包的时候会从文件位置进行查找,并导入. 导入包 1. 什么是包? pycharm中包的图片 其中文件夹上有个圆点的 ...

  9. sourceCRT设置全局字符集为utf-8

    以前刚打开服务器crt字符集都会默认是default模式,搞得每次都要手动设置成UTF-8. 烦躁. 将CRT全局字符集设置成UTF-8格式方法: 设置窗口不会断掉: 即每100s发送一次ls \n ...

  10. 学习打卡day16&&echarts入门

    echarts有两种部署方式,一种是使用CDN命令,将所需文件安装到目标文件中,"npm install echarts --save",适合于已经学习入门了Vue.第二种是在gi ...