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

那么要做的的是从数据集里面拿出一部分作为要预测的,剩下的去比较,书上使用的是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类型

最新文章

  1. 51job前程无忧网站打不开,51job网站进不了,51job打不开
  2. [转][ASP.NET MVC 小牛之路]12 - Section、Partial View 和 Child Action
  3. USB Packet Types
  4. CodeSmith listview属性
  5. 用 Xamarin for VS 创建 aar 文件的绑定
  6. RocketMQ入门(3)拉取消息
  7. API获得ip,JS获得IP地理信息
  8. OC加强-day06
  9. spring mvc velocity多视图
  10. java字符串输出
  11. 对C# 构造函数的理解
  12. 转:loadrunner经典面试题
  13. Xamarin自定义布局系列——支持无限滚动的自动轮播视图CarouselView
  14. react - 解刨组件的多种写法
  15. vue重温之mint-ui------------点击事件绑定
  16. string转数组, 数组转ist, list转数组, 数组转string
  17. [转帖]Nginx 的 TCP 负载均衡介绍
  18. Subarray Sum & Maximum Size Subarray Sum Equals K && Subarray Sum Equals K
  19. 【java并发核心二】Exchanger的使用
  20. navicate连接Linux下mysql慢,卡,以及mysql相关查询,授权

热门文章

  1. 学习tomcat(三)
  2. 集合流之“将List<Integer>转为String并用逗号分割”
  3. C语言之关键字(知识点2)
  4. s函数中第一个程序修改(介绍function sys = mlupdate(t, x, u)用法)
  5. s函数中积分程序更改
  6. 2_状态空间_State Space
  7. 学习webpack前的准备工作
  8. 可想实现一个自己的简单jQuery库?(九)
  9. 多态polymorphism,向上转型和动态方法调度有什么用?
  10. 如何在jsp界面进行判断再输出不同的值