Python实现knn
#coding:utf-8
import numpy as np
import operator
import os def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0]
diffMat = np.tile(inX,(dataSetSize,1)) - dataSet
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis = 1)
distances = sqDistances**0.5
sortedDistanceIndices = distances.argsort()
classCount = {}
for i in range(k):
voteIlabel = labels[sortedDistanceIndices[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) +1
sortedClassCount = sorted(classCount.items(),key = operator.itemgetter(1), reverse = True)
return sortedClassCount[0][0] def file2matric(filename):
fr = open(filename)
arrayOLine = fr.readlines()
numberOfLines = len(arrayOLine)
returnMat = np.zeros((numberOfLines,3))
classLabelVector = []
index = 0
for line in arrayOLine:
line = line.strip()
listFromLine = line.split('\t')
returnMat[index,:] = listFromLine[0:3]
if listFromLine[-1] == 'largeDoses':
temp = 3
if listFromLine[-1] == 'smallDoses':
temp = 2
if listFromLine[-1] == 'didntLike':
temp = 1
classLabelVector.append(temp)
index += 1
return returnMat, classLabelVector def autoNormal(dataset):
minVals = dataset.min(0)
maxVals = dataset.max(0)
ranges = maxVals - minVals
normDataset = np.zeros(np.shape(dataset))
m = dataset.shape[0]
normDataset = dataset - np.tile(minVals,(m,1))
normDataset = normDataset/np.tile(ranges,(m,1))
return normDataset, ranges, minVals def classifyPersion():
resultList = ['not at all', 'in small doses', 'in large doses']
percentTats = float(raw_input("percentage of time spent play video games?"))
ffMiles = float(raw_input("frequent filer niles earned per year?"))
iceCream = float(raw_input("liters of ice cream consumed per year?"))
datingDataMat, datingLabels = file2matric(r".\datingTestSet.txt")
normalMat , ranges, minVals = autoNormal(datingDataMat)
inArr = np.array([ffMiles,percentTats,iceCream])
classifierResult = classify0((inArr - minVals)/ranges, normalMat, datingLabels,3)
print "You will probably like this persion :" , resultList[classifierResult - 1] def img2vertor(filename):
returnVect = np.zeros((1,1024))
fr = open(filename,'r+')
for i in range(32):
lineStr = fr.readline()
for j in range(32):
returnVect[0,32*i+j] = int(lineStr[j])
return returnVect def handwritingclasstest():
hwLabels = []
traingFileList = os.listdir(r".\digits\trainingDigits")
m = len(traingFileList)
trainingMat = np.zeros((m,1024))
for i in range(m):
fileNameStr = traingFileList[i]
fileStr = fileNameStr.split('.')[0]
classNumStr = int(fileStr.split('_')[0])
hwLabels.append(classNumStr)
trainingMat[i,:] = img2vertor(r".\digits\trainingDigits\%s" % fileNameStr)
testFileList = os.listdir(r".\digits\testDigits")
mtest = len(testFileList)
errorCount = 0.0
for i in range(mtest):
fileNameStr = testFileList[i]
fileStr = fileNameStr.split(".")[0]
classNumStr = fileStr.split("_")[0]
vectorUnderTest = img2vertor(r".\digits\testDigits\%s" % fileNameStr)
classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3)
print "the classifier came back with: %d ,the real answer is :%s " % (classifierResult,classNumStr)
if(classifierResult != int(classNumStr)):
errorCount += 1.0
print "\n the total number of error is %d" % errorCount
print "\n the total error rate is %f" % (errorCount/float(mtest))
以上代码包含两个小项目:
第一个是使用knn算法改进约会网站的配对效果,使用Python交互界面运行

先后输入参数10 10000 0.5 结果为in small doses
数据点此出下载 提取码:ue4a
第二个小项目是手写数字识别系统
同样是使用交互界面运行
import knn
knn.handwritingclasstest()
数据点此处下载 提取码:9qd1
本代码是依据《机器学习实战》这本书编写。
Python实现knn的更多相关文章
- Python实现kNN(k邻近算法)
Python实现kNN(k邻近算法) 运行环境 Pyhton3 numpy科学计算模块 计算过程 st=>start: 开始 op1=>operation: 读入数据 op2=>op ...
- Python实现KNN算法及手写程序识别
1.Python实现KNN算法 输入:inX:与现有数据集(1xN)进行比较的向量 dataSet:已知向量的大小m数据集(NxM) 个标签:数据集标签(1xM矢量) k:用于比较的邻居数 ...
- Python实现KNN算法
Python实现Knn算法 关键词:KNN.K-近邻(KNN)算法.欧氏距离.曼哈顿距离 KNN是通过测量不同特征值之间的距离进行分类.它的的思路是:如果一个样本在特征空间中的k个最相似(即特征空间 ...
- [Python] 应用kNN算法预测豆瓣电影用户的性别
应用kNN算法预测豆瓣电影用户的性别 摘要 本文认为不同性别的人偏好的电影类型会有所不同,因此进行了此实验.利用较为活跃的274位豆瓣用户最近观看的100部电影,对其类型进行统计,以得到的37种电影类 ...
- Python 实现 KNN(K-近邻)算法
一.概述 KNN(K-最近邻)算法是相对比较简单的机器学习算法之一,它主要用于对事物进行分类.用比较官方的话来说就是:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例, ...
- ML一:python的KNN算法
(1):list的排序算法: 参考链接:http://blog.csdn.net/horin153/article/details/7076321 示例: DisListSorted = sorted ...
- 基于python 实现KNN 算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/11/7 14:50 # @Author : gylhaut # @Site ...
- 机器学习之python: kNN
################################################## # kNN : k Nearest Neighbour # Author : Monne # Da ...
- 利用Python实现kNN算法
邻近算法(k-NearestNeighbor) 是机器学习中的一种分类(classification)算法,也是机器学习中最简单的算法之一了.虽然很简单,但在解决特定问题时却能发挥很好的效果.因此,学 ...
随机推荐
- CUDA入门需要知道的东西
CUDA刚学习不久,做毕业要用,也没时间研究太多的东西,我的博客里有一些我自己看过的东西,不敢保证都特别有用,但是至少对刚入门的朋友或多或少希望对大家有一点帮助吧,若果你是大牛请指针不对的地方,如果你 ...
- 用@vue/cli发布npm包
1.环境准备 安装node,npm,@vue/cli 2.初始化项目 用@vue/cli创建新项目 vue create mtest-ui 删除public,main.js,App.vue等无关文件, ...
- MySql-8.0.12 安装教程随笔
下载地址: https://www.mysql.com/downloads/ 现在最下边的社区版本,也就是免费版本 之后我们会看到有两个选择的下载,一个为zip压缩包格式,一个是Install版本,个 ...
- 详解JVM工作原理和特点
在我们运行和调试Java程序的时候,经常会提到一个JVM的概念.本文将为大家讲解JVM工作原理和特点,希望对大家有所帮助. AD:网+线下沙龙 | 移动APP模式创新:给你一个做APP的理由>& ...
- vue切换路由时动画
安装个包 npm i nprogress 直接导入使用 最终的效果就是
- ZRDay6A. 萌新拆塔(三进制状压dp)
题意 Sol 这好像是我第一次接触三进制状压 首先,每次打完怪之后吃宝石不一定是最优的,因为有模仿怪的存在,可能你吃完宝石和他打就GG了.. 因此我们需要维护的状态有三个 0:没打 1:打了怪物 没吃 ...
- Linux 系统中 sudo 命令的 10 个技巧
概览 sudo 表示 "superuser do". 它允许已验证的用户以其他用户的身份来运行命令.其他用户可以是普通用户或者超级用户.然而,大部分时候我们用它来以提升的权限来运行 ...
- 【Ecshop】v2.7.3模板变量标签改进
改进代码后虽可解决大多数函数参数的问题,但也同样产生了参数问题:ecshop模板函数参数有部分没有被引号包裹,所以正则并不能匹配到,要修改为引号包裹,那是个大工程. 为了使ecshop模板支持date ...
- Codeforces Round #459 (Div. 2):D. MADMAX(记忆化搜索+博弈论)
D. MADMAX time limit per test1 second memory limit per test256 megabytes Problem Description As we a ...
- opencv使用日记之一:平台搭建Mat类以及图像的读取修改
平台搭建就摸了一整天时间,真的是...不说了,最后我选择的是 opencv3.0(2015/06/04) + win7 + vs2012 注意opencv的版本不同导入的库文件是不一样的,所以请 ...