一、在PyCharm 5.0.4(编写python程序的IDE) 编写kNN.py文件的代码

--------------------------

1、 kNN.py  运算符模块

--------------------------

1 from numpy import *

2 importoperator3

4 #运算符模块 创建数据集和标签

5 defcreateDataSet():6 group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])7 labels = ['A', 'A', 'B', 'B']8 return group, labels

1)、打开命令行

先进入kNN.py的所在文件夹,在对kNN.py进行程序处理,效果如下图所示

--------------------------

2、 kNN.py  k-近邻算法

--------------------------

1 from numpy import *

2 importoperator3

4 #运算符模块

5 defcreateDataSet():6 group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])7 labels = ['A', 'A', 'B', 'B']8 returngroup, labels9

10 #k-近邻算法 此模块需要使用运算符模块的group/labels

11 defclassify0(inX, dataSet, labels, k):12 dataSetSize =dataSet.shape[0]13 diffMat = tile(inX, (dataSetSize, 1)) -dataSet14 sqDiffMat = diffMat ** 2

15 sqDistances = sqDiffMat.sum(axis=1)16 distances = sqDistances ** 0.5

17 sortedDistIndicies =distances.argsort()18 classCount ={}19 for i inrange(k):20 voteIlabel =labels[sortedDistIndicies[i]]21 classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1

22

23 sortedClassCount =sorted(classCount.iteritems(),24 key=operator.itemgetter(1),25 reverse=True)26 return sortedClassCount[0][0]

2) 在1)的基础上,进行2)的内容,可以修改参数

--------------------------

3、 kNN.py  准备数据:从文本文件中解析数据

--------------------------

1 #将文本记录转换为NumPy的解析程序

2 deffile2matrix(filename):3 fr = open(filename,'r')4 numberOfLines = len(fr.readlines()) #get the number of lines in the file

5 returnMat = zeros((numberOfLines, 3)) #prepare matrix to return

6 classLabelVector = [] #prepare labels return

7 fr =open(filename)8 index =09 for line infr.readlines():10 line =line.strip()11 listFromLine = line.split('\t')12 returnMat[index, :] = listFromLine[0:3]13 classLabelVector.append(int(listFromLine[-1]))14 index += 1

15 return returnMat, classLabelVector

datingTestSet2.txt文件可以从(博客园)文件下载

--------------------------

4、 kNN.py  使用Matplotlib创建散点图

--------------------------

datingTestSet2.txt 文件的数据通过matplotlib,图形化的表现出来

--------------------------

5、 kNN.py  使用Matplotlib创建散点图  表示不同属性的点,使用不同颜色进行表示

警告:import os

from numpy import *

这两句必须加上,否则会报如下,错误提示信息:

Traceback (most recent call last):

File "", line 1, in

NameError: name 'array' is not defined

--------------------------

让点出现颜色划分的关键代码是:

ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15.0*array(datingLabels),15.0*array(datingLabels))

--------------------------

6、 kNN.py  归一化特征值

--------------------------

1 #归一化特征值

2 defautoNorm(dataSet):

3 minVals =dataSet.min(0)

4 maxVals =dataSet.max(0)

5 ranges = maxVals -minVals

6 normDataSet =zeros(shape(dataSet))

7 m =dataSet.shape[0]

8 normDataSet = dataSet - tile(minVals, (m, 1))

9 normDataSet = normDataSet / tile(ranges, (m, 1))

10 return normDataSet, ranges, minVals

--------------------------

7、 kNN.py   分类器针对约会网站的测试代码

--------------------------

1 #分类器针对约会网站的测试代码

2 defdatingClassTest():3 hoRatio = 0.10

4 datingDataMat, datingLabels = file2matrix('datingTestSet2.txt')5 normMat, ranges, minVals =autoNorm(datingDataMat)6 m =normMat.shape[0]7 numTestVecs = int(m *hoRatio)8 errorCount = 0.0

9 for i inrange(numTestVecs):10 classifierResult = classify0(normMat[i, :], normMat[numTestVecs:m, :], datingLabels[numTestVecs:m], 3)11 print "the classifier came back with: %d, the real answer is : %d" %(classifierResult, datingLabels[i])12

13 if (classifierResult !=datingLabels[i]):14 errorCount += 1.0

15

16 print "the total error rate is : %f" % (errorCount / float(numTestVecs))

--------------------------

8、 kNN.py   使用算法:构建完整可用系统

--------------------------

1 #! /usr/bin/env python

2 #-*- coding: gbk -*- 用来解决中文乱码的注解

3

4 from numpy import *

5 importoperator6

7 #运算符模块

8 defcreateDataSet():9 group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])10 labels = ['A', 'A', 'B', 'B']11 returngroup, labels12

13

14 #k-近邻算法

15 defclassify0(inX, dataSet, labels, k):16 dataSetSize =dataSet.shape[0]17 diffMat = tile(inX, (dataSetSize, 1)) -dataSet18 sqDiffMat = diffMat ** 2

19 sqDistances = sqDiffMat.sum(axis=1)20 distances = sqDistances ** 0.5

21 sortedDistIndicies =distances.argsort()22 classCount ={}23 for i inrange(k):24 voteIlabel =labels[sortedDistIndicies[i]]25 classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1

26

27 sortedClassCount =sorted(classCount.iteritems(),28 key=operator.itemgetter(1),29 reverse=True)30 returnsortedClassCount[0][0]31

32

33 #将文本记录转换为NumPy的解析程序

34 deffile2matrix(filename):35 fr = open(filename, 'r')36 numberOfLines = len(fr.readlines()) #get the number of lines in the file

37 returnMat = zeros((numberOfLines, 3)) #prepare matrix to return

38 classLabelVector = [] #prepare labels return

39 fr =open(filename)40 index =041 for line infr.readlines():42 line =line.strip()43 listFromLine = line.split('\t')44 returnMat[index, :] = listFromLine[0:3]45 classLabelVector.append(int(listFromLine[-1]))46 index += 1

47 returnreturnMat, classLabelVector48

49

50 #归一化特征值

51 defautoNorm(dataSet):52 minVals =dataSet.min(0)53 maxVals =dataSet.max(0)54 ranges = maxVals -minVals55 normDataSet =zeros(shape(dataSet))56 m =dataSet.shape[0]57 normDataSet = dataSet - tile(minVals, (m, 1))58 normDataSet = normDataSet / tile(ranges, (m, 1))59 returnnormDataSet, ranges, minVals60

61

62 #分类器针对约会网站的测试代码

63 defdatingClassTest():64 hoRatio = 0.10

65 datingDataMat, datingLabels = file2matrix('datingTestSet2.txt')66 normMat, ranges, minVals =autoNorm(datingDataMat)67 m =normMat.shape[0]68 numTestVecs = int(m *hoRatio)69 errorCount = 0.0

70 for i inrange(numTestVecs):71 classifierResult = classify0(normMat[i, :], normMat[numTestVecs:m, :], datingLabels[numTestVecs:m], 3)72 print "分类器的回复是:%d,真正的答案是:%d" %(classifierResult, datingLabels[i])73

74 if (classifierResult !=datingLabels[i]):75 errorCount += 1.0

76

77 print "总误差率 : %f" % (errorCount /float(numTestVecs))78

79

80 #约会网预测函数

81 defclassifyPerson():82 resultList = ['完全没有兴趣', '有一点吧', '特别感兴趣']83 percentTats = float(raw_input("玩电子游戏的时间百分比?"))84 ffMiles = float(raw_input("每年的飞行里程数是多少?"))85 iceCream = float(raw_input("每年的冰淇淋消费量是多少?"))86 datingDataMat, datingLabels = file2matrix('datingTestSet2.txt')87 norMat, ranges, minVals =autoNorm(datingDataMat)88 inArr =array([ffMiles, percentTats, iceCream])89 classifierResult = classify0((inArr - minVals) / ranges, norMat, datingLabels, 3)90 print "你可能会喜欢这个人 :", resultList[classifierResult - 1]

--------------------------

9、 kNN.py   准备数据:将图像转换为测试向量

--------------------------

1 #准备数据:将图像转换为测试向量

2 defimg2vector(filename):3 returnVect = zeros((1, 1024))4 fr =open(filename)5 for i in range(32):6 lineStr =fr.readline()7 for j in range(32):8 returnVect[0, 32 * i + j] =int(lineStr[j])9 return returnVect

--------------------------

10、 kNN.py   测试算法:使用k-近邻算法识别手写数字

注意:本文需要使用  from os import listdir

数据digits.zip 存放在博客园的文件夹中,或者下载《机器学习实战》的源代码,里面有

--------------------------

1 #! /usr/bin/env python

2 #-*- coding: gbk -*-

3

4 from numpy import *

5 importoperator6 from os importlistdir7

8 #测试算法:使用K-近邻算法识别手写数字

9 defhandwritingClassTest():10 hwLabels =[]11 trainingFileList = listdir('trainingDigits')12 m =len(trainingFileList)13 trainingMat = zeros((m, 1024))14 for i inrange(m):15 fileNameStr =trainingFileList[i]16 fileStr = fileNameStr.split('.')[0]17 classNumStr = int(fileStr.split('_')[0])18 hwLabels.append(classNumStr)19 trainingMat[i, :] = img2vector('trainingDigits/%s' %fileNameStr)20

21 testFileList = listdir('testDigits')22 errorCount = 0.0

23 mTest =len(testFileList)24 for i inrange(mTest):25 fileNameStr =testFileList[i]26 fileStr = fileNameStr.split('.')[0]27 classNameStr = int(fileStr.split('_')[0])28 vectorUnderTest = img2vector('testDigits/%s' %fileNameStr)29 classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3)30 print "\n分类器的回复是:%d,真正的答案是:%d" %(classifierResult, classNumStr)31

32 if (classifierResult !=classNumStr):33 errorCount += 1.0

34

35 print "\t 错误的总数是 : %d" %errorCount36 print "\t 总误差率是 : %f" % (errorCount / float(mTest))

|

|

图片太长,其中截断了,读者可以自行测试看看效果

|

|

-------------------------------------------------------------------------------------------------

总结:以上就是机器学习实战的第二章的代码内容,没想到,三月份开始学习的内容,等到六月份才开始能够成功实现,主要是Numpy的安装,太狗了!

其间,学习安装Numpy与.whl类型的文件,会使用基本的matplotlib。k-近邻算法的模样还没有认清楚。接下来,进行决策树,过一段时间就可以

认识k-近邻算法了吧

python的knn算法list_【风马一族_Python】 实施kNN算法相关推荐

  1. python pip安装numpy_【风马一族_Python】 安装pip与Numpy

    ------------------------------------------------------------------------------------------------- 原因 ...

  2. 【风马一族_Python】 决策树

    <机器学习实战>第三章 决策树 ------------------------------------- #1 trees.py 计算给定数据集的香农熵 ---------------- ...

  3. 【风马一族_php】NO5_php基础知识_数组

    原文来自:http://www.cnblogs.com/sows/p/6032570.html (博客园的)风马一族 侵犯版本,后果自负 回顾 匿名函数 定义: 变量 = function [参数列表 ...

  4. 【风马一族_php】数组函数

    原文来自:http://www.cnblogs.com/sows/p/6045699.html (博客园的)风马一族 侵犯版本,后果自负  2016-11-09 15:56:26 数组 函数 php- ...

  5. 【风马一族_php】NO4_php基础知识

    原文来自:http://www.cnblogs.com/sows/p/6017018.html(博客园的)风马一族 侵犯版本,后果自负 回顾 运算符:算术运算符.逻辑运算符.比较运算符.位运算符.赋值 ...

  6. 【风马一族_xml】xmlp之dtd1

    什么是XML约束? 在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束 2. 为什么要使用xml约束? 参看提示栏 3. xml约束的作用? 约束xml的写法 对xml进行 ...

  7. 【风马一族_C】进制转化

    1 #include "stdio.h" 2 #include "Math.h" 3 #define number 50 //设置数组的长度 4 5 int n ...

  8. android+通过菜单跳转页面,【风马一族_Android】通过菜单的点击,跳转到不同界面...

    ---恢复内容开始--- 布局的代码:activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?& ...

  9. 【风马一族_php】

    原文来自:http://www.cnblogs.com/sows/p/6054383.html  (博客园的)风马一族 侵犯版本,后果自负 2016-11-11   15:13:51 回顾 数组:分配 ...

最新文章

  1. 全排列之递归与非递归算法实现总结
  2. POJ 1184 聪明的打字员
  3. [Java多线程]-J.U.C.atomic包下的AtomicInteger,AtomicLong等类的源码解析
  4. vscode给java项目传递args[]参数
  5. CentOS7.2.1511 安装Mysql-5.7.13
  6. 何为TransmittableThreadLocal
  7. 2能不用cuda_洗洁精不用花钱买,自己在家就能做,成本2毛钱,比买的更好用
  8. 《2022产业互联网安全十大趋势》正式发布
  9. openwrt搭建环境
  10. 平滑阴影blender_【Blender笔记】简单的创建一个平平无奇的石头
  11. bat打包成exe_拜托!看完这篇文章别再问我怎么Python打包成exe了!
  12. 如何实时捕捉社会热点?微博热搜数据监测系统-API接口
  13. Bumped!详解—(Dijkstra堆优化,优先队列实现,结构体重载运算符)
  14. 深度学习入门(五) softmax回归
  15. AOSP添加Google Apps(Open Gapps)构建并刷入Pixel
  16. 封神台----尤里的复仇I-第一章:为了女神小芳
  17. win10计算器_30年的老树又开新花!新一代Win10记事本详细体验
  18. python自动化客户端_如何使用Python自动化登录客户端,pywinauto确实很强大
  19. 什么镜头最适合拍风景_风景用什么镜头好
  20. HTML案例(二)---登录页

热门文章

  1. 【linux】linux 查找 或者 搜索 文件 find
  2. 1.1.0-简介-P4-一致性、2PC和3PC
  3. 【jmx】JMX最佳实践与详解
  4. 【Elasticsearch】elasticsearch 线程池以及相关配置
  5. Flink:Container is running beyond virtual memory limits
  6. 崩溃!如何面对令人脱发的老代码?
  7. 太牛了!分享一个Github上都没有的“网约车”项目!!!
  8. SpringMVC+MyBatis+MySQL实现分页
  9. Solr 新增、更新、删除索引
  10. redis学习-redis入门概述及简介