python的knn算法list_【风马一族_Python】 实施kNN算法
一、在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算法相关推荐
- python pip安装numpy_【风马一族_Python】 安装pip与Numpy
------------------------------------------------------------------------------------------------- 原因 ...
- 【风马一族_Python】 决策树
<机器学习实战>第三章 决策树 ------------------------------------- #1 trees.py 计算给定数据集的香农熵 ---------------- ...
- 【风马一族_php】NO5_php基础知识_数组
原文来自:http://www.cnblogs.com/sows/p/6032570.html (博客园的)风马一族 侵犯版本,后果自负 回顾 匿名函数 定义: 变量 = function [参数列表 ...
- 【风马一族_php】数组函数
原文来自:http://www.cnblogs.com/sows/p/6045699.html (博客园的)风马一族 侵犯版本,后果自负 2016-11-09 15:56:26 数组 函数 php- ...
- 【风马一族_php】NO4_php基础知识
原文来自:http://www.cnblogs.com/sows/p/6017018.html(博客园的)风马一族 侵犯版本,后果自负 回顾 运算符:算术运算符.逻辑运算符.比较运算符.位运算符.赋值 ...
- 【风马一族_xml】xmlp之dtd1
什么是XML约束? 在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束 2. 为什么要使用xml约束? 参看提示栏 3. xml约束的作用? 约束xml的写法 对xml进行 ...
- 【风马一族_C】进制转化
1 #include "stdio.h" 2 #include "Math.h" 3 #define number 50 //设置数组的长度 4 5 int n ...
- android+通过菜单跳转页面,【风马一族_Android】通过菜单的点击,跳转到不同界面...
---恢复内容开始--- 布局的代码:activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?& ...
- 【风马一族_php】
原文来自:http://www.cnblogs.com/sows/p/6054383.html (博客园的)风马一族 侵犯版本,后果自负 2016-11-11 15:13:51 回顾 数组:分配 ...
最新文章
- 全排列之递归与非递归算法实现总结
- POJ 1184 聪明的打字员
- [Java多线程]-J.U.C.atomic包下的AtomicInteger,AtomicLong等类的源码解析
- vscode给java项目传递args[]参数
- CentOS7.2.1511 安装Mysql-5.7.13
- 何为TransmittableThreadLocal
- 2能不用cuda_洗洁精不用花钱买,自己在家就能做,成本2毛钱,比买的更好用
- 《2022产业互联网安全十大趋势》正式发布
- openwrt搭建环境
- 平滑阴影blender_【Blender笔记】简单的创建一个平平无奇的石头
- bat打包成exe_拜托!看完这篇文章别再问我怎么Python打包成exe了!
- 如何实时捕捉社会热点?微博热搜数据监测系统-API接口
- Bumped!详解—(Dijkstra堆优化,优先队列实现,结构体重载运算符)
- 深度学习入门(五) softmax回归
- AOSP添加Google Apps(Open Gapps)构建并刷入Pixel
- 封神台----尤里的复仇I-第一章:为了女神小芳
- win10计算器_30年的老树又开新花!新一代Win10记事本详细体验
- python自动化客户端_如何使用Python自动化登录客户端,pywinauto确实很强大
- 什么镜头最适合拍风景_风景用什么镜头好
- HTML案例(二)---登录页
热门文章
- 【linux】linux 查找 或者 搜索 文件 find
- 1.1.0-简介-P4-一致性、2PC和3PC
- 【jmx】JMX最佳实践与详解
- 【Elasticsearch】elasticsearch 线程池以及相关配置
- Flink:Container is running beyond virtual memory limits
- 崩溃!如何面对令人脱发的老代码?
- 太牛了!分享一个Github上都没有的“网约车”项目!!!
- SpringMVC+MyBatis+MySQL实现分页
- Solr 新增、更新、删除索引
- redis学习-redis入门概述及简介