#coding=utf-8
from numpy import *
import operator
from os import listdir
import matplotlib
import matplotlib.pyplot as plt #从文件当中读取内容,保存到矩阵当中
#因为文件当中有两部分内容,一部分是三个原因,另一部分是结果
def file2matrix(filename):
fr=open(filename)
numberOfLines=len(fr.readlines())#计算文件的行数
returnMat=zeros((numberOfLines,3))#生成一个零矩阵
classLabelVector=[]#生成一个序列,主要操作是切片
fr=open(filename)
index=0
for line in fr.readlines():
line=line.strip()#读取一行的内容
listFromLine=line.split('\t')#将line分割成3个列
returnMat[index,:]=listFromLine[0:3]#取前三个到切片放到第index行
classLabelVector.append(int(listFromLine[-1]))#取最后一个追加到classLabelVector
index+=1#index自加
return returnMat,classLabelVector #归一化数据
def autoNorm(dataSet):
#获取每一列的最小值,也就是说结果是一个3维的数组,数组的元素
#是每一列到最小值
#如果0改为1,那么获取到的是每一行的最小值,也就是一个数组
minVals=dataSet.min(0)
maxVals=dataSet.max(0)#获取每一列的最大值
ranges=maxVals-minVals
normDataSet=zeros(shape(dataSet))#生成一个零矩阵 #shape,显示一个矩阵的行列,如果没有[0],那么输出
#(1000,3)也就是1000行,3列,
# [0]表示第一个元素(行),[1]表示第二个元素(列)
m=dataSet.shape[0]#获取行的行的数然后复制给m
#tile是一个复制函数,将minVals复制
#行的方向上复制m次你,列的方向上复制1次
normDataSet=dataSet-tile(minVals,(m,1))
normDataSet=normDataSet/tile(ranges,(m,1))
return normDataSet,ranges,minVals #绘图
def draw():
fig=plt.figure()
ax=fig.add_subplot(111)
datingDataMat,datingLabels= file2matrix('datingTestSet.txt')
ax.scatter(datingDataMat[:,0],datingDataMat[:,1],
15.0*array(datingLabels),15.0*array(datingLabels))
plt.show() #分类
def classify0(inX, dataSet, labels, k):
#获取到dataSet的行数量
dataSetSize = dataSet.shape[0]
diffMat = tile(inX, (dataSetSize,1)) - dataSet
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
#排序,但是矩阵并不修改,只是获取到修改后的下标
sortedDistIndicies = distances.argsort()
classCount={}
for i in range(k):
#获取到分类
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0] #识别过程
def datingClassTest():
hoRatio=0.10
#从文件当中读取txt文件,转化为矩阵
datingDataMat,datingLabels=file2matrix('datingTestSet.txt')
normMat,ranges,minVals=autoNorm(datingDataMat) m=normMat.shape[0]
numTestVecs=int(m*hoRatio)
errorCount=0.0
#从1到100
for i in range(numTestVecs):
#第一个参数是待分类到矩阵
#normMat[i,:]代表一个行,也就是矩阵的第i行的一位矩阵
#normMat[numTestVecs:m,:]使用从100到1000行的矩阵去分类
#datingLabels[numTestVecs:m]使用从100到1000行的结果去分类
#3代表kNN当中的k
classfierResult=classify0(normMat[i,:],normMat[numTestVecs:m,:],
datingLabels[numTestVecs:m],3)
print "机器人认为的结果是%d,正确的答案是:%d"%(classfierResult,datingLabels[i])
if(classfierResult!=datingLabels[i]):
errorCount+=1.0
print "错误律是:%f" %(errorCount/float(numTestVecs)) datingClassTest() """
最初错误原因
dataSet=file2matrix('datingTestSet.txt')
print dataSet#有两个返回值,会把后一个返回值追加到dataSet上面,构成元祖
print "*****************************"
datingDataMat,datingLabels=file2matrix('datingTestSet.txt')
print datingDataMat
print "*****************************"
print datingLabels
"""

分类 kNN的更多相关文章

  1. 机器学习算法 - 最近邻规则分类KNN

    上节介绍了机器学习的决策树算法,它属于分类算法,本节我们介绍机器学习的另外一种分类算法:最近邻规则分类KNN,书名为k-近邻算法. 它的工作原理是:将预测的目标数据分别跟样本进行比较,得到一组距离的数 ...

  2. 最邻近规则分类KNN算法

    例子: 求未知电影属于什么类型: 算法介绍: 步骤:  为了判断未知实例的类别,以所有已知类别的实例作为参照      选择参数K      计算未知实例与所有已知实例的距离      选择最近K个已 ...

  3. 机器学习--最邻近规则分类KNN算法

    理论学习: 3. 算法详述        3.1 步骤:      为了判断未知实例的类别,以所有已知类别的实例作为参照      选择参数K      计算未知实例与所有已知实例的距离      选 ...

  4. 2019-08-01【机器学习】有监督学习之分类 KNN,决策树,Nbayes算法实例 (人体运动状态信息评级)

    样本: 使用的算法: 代码: import numpy as np import pandas as pd import datetime from sklearn.impute import Sim ...

  5. python实现简单分类knn算法

    原理:计算当前点(无label,一般为测试集)和其他每个点(有label,一般为训练集)的距离并升序排序,选取k个最小距离的点,根据这k个点对应的类别进行投票,票数最多的类别的即为该点所对应的类别.代 ...

  6. JAVA实现KNN分类

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/51064307 http://www.llwjy.com/blogdetail/f ...

  7. 室内定位系列(三)——位置指纹法的实现(KNN)

    位置指纹法中最常用的算法是k最近邻(kNN):选取与当前RSS最邻近的k个指纹的位置估计当前位置,简单直观有效.本文介绍kNN用于定位的基本原理与具体实现(matlab.python). 基本原理 位 ...

  8. 人体姿态的相似性评价基于OpenCV实现最近邻分类KNN K-Nearest Neighbors

    最近学习了人体姿态的相似性评价.需要用到KNN来统计与当前姿态相似的k个姿态信息. 假设我们已经有了矩阵W和给定的测试样本姿态Xi,需要寻找与Xi相似的几个姿态,来估计当前Xi的姿态标签. //knn ...

  9. 视觉机器学习------KNN学习

    KNN(K-Nearest Neighbor algorithm, K最近邻方法)是一种统计分类器,属于惰性学习. 基本思想:输入没有标签即未经分类的新数据,首先提取新数据的特征并与测试集中的每一个数 ...

随机推荐

  1. 在Mysql中如何显示所有用户?

    这是一个mysql初学者经常问到的一个问题,今天我们就带大家看看是如何在Mysql中显示所有用户的.通常我们在mysql中使用SHOW DATABASES可以显示所有的数据库,SHOW TABLES将 ...

  2. 当前标识(IIS APPPOOL\DefaultWebSite)没有对“C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files“的写访问权限

    将C#写的webservice发布到IIS后,通过浏览器访问测试,出现如下错误: 根据提示:对Tempory ASP.NET Files没有写访问权限,在资源管理其中定位到这个地址,发现没有这个文件夹 ...

  3. chm文件打开空白无内容的解决办法

    今天下载了个chm文件,但是打开空白,也没显示什么内容,经过一番研究之后终于可以正常显示了,下面把解决办法分享出来供大家参考下,谢谢.   工具/原料 windows7系统 chm文件 方法/步骤   ...

  4. Nmap备忘单:从探索到漏洞利用(Part 2)

    这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫 ...

  5. 2015-2-10 Linux 知识

    1.Linux系统中某个可执行文件属于root并且有setid,当一个普通用户mike运行这个程序时,产生的进程的有效用户和实际用户分别是____? A root mike B root rooy C ...

  6. 算法训练 Torry的困惑

    问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7……这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000……个质数的乘积是多少呢?他把这个问题告诉老师 ...

  7. HDOJ 1312 DFS&BFS

    Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  8. 什么是mixin

    转自:http://guangboo.org/2013/01/28/python-mixin-programming http://en.wikipedia.org/wiki/Mixin http:/ ...

  9. 用几条shell命令快速去重10G数据

    试想一下,如果有10G数据,或者更多:怎么才能够快速地去重呢?你会说将数据导入到数据库(mysql等)进行去重,或者用java写个程序进行去重,或者用Hadoop进行处理.如果是大量的数据要写入数据库 ...

  10. Windbg程序调试--转载

    WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件. WinDbg是微软很重要的诊断调试工具: 可以查 ...