Python学习之k-近邻实例
海伦收集约会数据巳经有了一段时间,她把这些数据存放在文本文件datingTestSet.txt中,每个样本数据占据一行,总共有 1000 行。海伦的样本主要包含以下 3 种特征:
1. 每年获得的飞行常客里程数
2. 玩视频游戏所耗时间百分比
3. 每周消费的冰淇淋公升数
在将上述特征数据输人到分类器之前,必须将待处理数据的格式改变为分类器可以接受的格式。在 kNN.py 中创建名为 file2matrix的函数,以此来处理输人格式问题。该函数的输人为文件名字符串输出为训练样本矩阵和类标签向量,整体程序如下:
1. 读取测试数据文件
# 读取测试数据文件
def read_file(filename):
datafile = open(filename)
lines = datafile.readlines();
length = len(lines)
marix = zeros((length,))
classLabelVector = []
index =
for line in lines:
line = line.rstrip()
words = line.split("\t")
marix[index,:]=words[:]
classLabelVector.append(float(words[-]))
index = index +
return marix,classLabelVector
2. 测试数据归一化
在处理不同取值范围的特征值时,我们通常采用的方法是将数值归一化,如将取值范围处理为0到1或者-1到1之间,下面的公式可以将任意取值范围的特征值转化为0到1区间内的值 :newValue = (oldValue-min)/(max-min),具体程序如下:
def autoNorm(dataSet):
minVals = dataSet.min()
maxVals = dataSet.max()
range = maxVals - minVals
normDataSet = zeros(shape(dataSet))
m = dataSet.shape[]
normDataSet = dataSet - tile(minVals,(m,))
normDataSet = normDataSet/tile(range,(m,))
return normDataSet,range,minVals
3. 分类器
主要是利用测试数据对前面创建的分类器进行验证,测试分类器的效果
def classify(inX,dataSet,labels,k):
dataSetSize = dataSet.shape[]
diffMat = tile(inX,(dataSetSize,))-dataSet
sqDiffMat = diffMat**
sqDistances = sqDiffMat.sum(axis=)
distances = sqDistances**0.5
sortedDistIndices = distances.argsort()
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndices[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,)+
sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(),reverse=True)
return sortedClassCount[][]
4. 测试
def datingClassTest():
resultList = ['一点也不喜欢','有一点好感','特别喜欢']
hoRatio = 0.1
filename = 'E:\\datingTestSet2.txt';
(marix,classLabel)=read_file(filename)
normdataSet,ranges,minVals=autoNorm(marix)
m = normdataSet.shape[]
numTestVecs = int(m*hoRatio)
errorCount = 0.0
for i in range(numTestVecs):
classResult = classify(normdataSet[i,:],normdataSet[numTestVecs:m,:],classLabel[numTestVecs:m],)
print "你对这个人的感觉是:%s ,现实情况是:%s" %(resultList[int(classResult-)],resultList[int(classLabel[i]-)])
if classResult != classLabel[i]:
errorCount += 1.0
print "错误率是: %f " %(errorCount/float(numTestVecs))
5. 测试结果
你对这个人的感觉是:一点也不喜欢 ,现实情况是:一点也不喜欢
你对这个人的感觉是:一点也不喜欢 ,现实情况是:一点也不喜欢
你对这个人的感觉是:一点也不喜欢 ,现实情况是:一点也不喜欢
你对这个人的感觉是:特别喜欢 ,现实情况是:特别喜欢
你对这个人的感觉是:特别喜欢 ,现实情况是:特别喜欢
你对这个人的感觉是:一点也不喜欢 ,现实情况是:一点也不喜欢
你对这个人的感觉是:特别喜欢 ,现实情况是:特别喜欢
你对这个人的感觉是:一点也不喜欢 ,现实情况是:一点也不喜欢
你对这个人的感觉是:一点也不喜欢 ,现实情况是:一点也不喜欢
...
所有程序均来自《机器学习实战》,非常好的书籍,推荐大家学习一下......
Python学习之k-近邻实例的更多相关文章
- python学习_数据处理编程实例(二)
在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...
- Python学习:类和实例
Python学习:类和实例 本文作者: 玄魂工作室--热热的蚂蚁 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规 ...
- 用Python从零开始实现K近邻算法
KNN算法的定义: KNN通过测量不同样本的特征值之间的距离进行分类.它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.K通 ...
- 学习笔记——k近邻法
对新的输入实例,在训练数据集中找到与该实例最邻近的\(k\)个实例,这\(k\)个实例的多数属于某个类,就把该输入实例分给这个类. \(k\) 近邻法(\(k\)-nearest neighbor, ...
- spark-机器学习实践-K近邻应用实践一
K近邻应用-异常检测应用 原理: 根据数据样本进行KMeans机器学习模型的建立,获取簇心点,以簇为单位,离簇心最远的第五个点的距离为阈值,大于这个值的为异常点,即获得数据异常. 如图:
- python学习笔记-练手实例
1.题目:输出 9*9 乘法口诀表. 程序分析:分行与列考虑,共9行9列,i控制行,j控制列 代码: for i in range(1,10): print ('\r') for j ...
- R语言学习笔记—K近邻算法
K近邻算法(KNN)是指一个样本如果在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.即每个样本都可以用它最接近的k个邻居来代表.KNN算法适 ...
- python学习_数据处理编程实例(一)
目的:用一个实例总结学习到的with语句,函数,列表推导,集合,排序,字符分割等内容 要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式 ...
- Python学习_11_类和实例
类和实例 类是对象创建实例的模板,而实例则是对象的实体.类使用class关键字定义: class MyClass: pass python中创建实例直接使用工厂函数(类名加上一对括号),和其他的 ...
- 廖雪峰Python学习笔记——类和实例
Class MyList(list): __metaclass__ = ListMetaclass #它表示在创建MyList这个类时,必须通过 ListMetaclass这个元类的LIstMetac ...
随机推荐
- skynet1.0阅读笔记2_skynet的消息投递skynet.call
为了了解 skynet.call 的调用过程,需要先看看 skynet的队列是如何把包分到不同工作线程的.看下图 查看 global_queue 的skynet_globalmq_push和skyne ...
- UC浏览器调试移动端网站
准备工作: UC浏览器开发版网址 UC浏览器开发者版下载地址 下载adb_tool 步骤: 1.将adb_tool解压,把里面的文件复制到 C:\Windows\SysWOW64 文件夹下面. 2.运 ...
- tp-02 四种url访问的方式
:http://localhost/index.php?m=模块&c=控制器&a=操作方法 [get模式] :http://localhost/index.php/模块[模块文件夹]/ ...
- 关于Struts2的jsp页面的注释
语句就算用<!-- -->注释后,还是会在编译的时候显示在网页上,而且网页还会报错,因为注释的那些语句也会去编译,也会去检查有没有错误,所以一些注释掉的过时的变量和方法也会导致报错.500
- [转载]如何解决failed to push some refs to git
Administrator@PC-20150110FGWU /K/cocos2d/yc (master) $ git push -u origin master To git@github.com:y ...
- window,centos双系统坏了
在centos中格式化SD卡的时候,操作错误,误将windows系统C盘的给格式化了.C盘是ntf格式的,现在却变为了fat32的格式. 重启系统,发现还是可以进入到centos,但是window进入 ...
- perl File::Spec 模块
File::Spec 模块提供了很多的功能,这里只列举几个常用的函数 rel2abs : 返回一个文件的绝对路径, 常见用法,返回当前运行的perl脚本的绝对路径 代码示例: my $prog = F ...
- 使用PHP生成和获取XML格式数据
1.php生成xml
- sqlldr导入数据(以PostgreSql>>>Oracle为例)
1.在目标数据库中创建表 1.1点击源表,复制创建语句 1.2 修改数据类型以匹配目标数据库,如: 字符串类型:character varying(20)>>>varchar2(20 ...
- 怎么输入MathType不等号
MathType是一款比较常用的数学公式编辑器,我们在使用这款软件的时候常常需要输入各种符号.有些新用户对这款软件不是很熟悉,对于一些符号不知道怎么输入,下面我们来给大家介绍介绍MathType不等号 ...