#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

本代码是依据《机器学习实战》这本书编写。

最新文章

  1. Mysql 中有关日期的函数(sql)
  2. DOM浏览器文档模型
  3. 、JAVA-异常
  4. ICMP and InetAddress.isReachable()
  5. ArcGIS Runtime SDK for WPF已不更新,后续将被ArcGIS Runtime SDK for .NET取代
  6. 使用 phpMyAdmin无法登录mysql的问题
  7. Hacker(22)----解除系统中的密码
  8. Grid++Report 报表开发工具
  9. jquery的click事件对象试解
  10. make clean指令出现问题
  11. 蓝桥杯-猜年龄-java
  12. Angular02 通过angular-cli来搭建web前端项目
  13. instrument(2)
  14. MQTT研究之EMQ:【SSL证书链验证】
  15. # 2019-2020-4 《Java 程序设计》第六周总结
  16. python - 字符编码/格式化/替换符
  17. python第四十七课——类属性和函数属性
  18. js模拟浏览器加载效果 pace.js 中文官方文档
  19. 第一篇CodeIgniter框架的下载及安装
  20. HBase(六)HBase整合Hive,数据的备份与MR操作HBase

热门文章

  1. 纯js实现淘宝商城轮播图
  2. java 字符串中是否有数字
  3. java算法面试题:有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数 按值的降序排序,如果值相同则按键值的字母顺序
  4. es6中的promise解读
  5. C盘扩容 更改C盘大小
  6. (转)为什么在 2013 十月番中出现了很多以 3D 渲染代替传统 2D 绘画来表现人物的镜头?
  7. 跨域问题和django中实现跨域
  8. HDOJ 2120 Ice_cream's world I
  9. 4、python中的布尔值和None
  10. UVA_10653 公主与王子 #刘汝佳DP题刷完计划