k邻*算法具体应用:2-2约会网站配对

  心得体会:

1.对所有特征值进行归一化处理:将特征值单位带来的距离影响消除,使所有特征同权重——然后对不同的特征进行加权
2.对于相互独立的特征,可以通过建立(特征值—类型 )图表进行计算,但是多个特征值是相互关联的则需要建立多维图表

#2-2约会网站配对

#将文本记录转换为NumPy
def file2matrix(filename):
love_dictionary = {'largeDoses':3, 'smallDoses':2, 'didntLike':1}
fr = open(filename) #打开文件
arrayOLines = fr.readlines() #行组成的数组
numberOfLines = len(arrayOLines) #返回数组元素个数
returnMat = zeros((numberOfLines, 3)) #生成numberOfLines*3的0数组
classLabelVector = [] #数组
index = 0
for line in arrayOLines:
line = line.strip() #除去头尾空格
listFromLine = line.split('\t') #按'\t'分割成数组
returnMat[index, :] = listFromLine[0:3] #从0开始截取3个
if(listFromLine[-1].isdigit()):
classLabelVector.append(int(listFromLine[-1])) #是数字就放数字,存入类型
else:
classLabelVector.append(love_dictionary.get(listFromLine[-1])) #是字符串就转成数字,存入类型
index += 1
return returnMat, classLabelVector import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure() #返回一个图像窗口
ax = fig.add_subplot(111) #在1行1列1号位画子图
datingDataMat,datingLabels=file2matrix("E:/Python/《机器学*实战》代码/Ch02/datingTestSet2.txt")
# print(datingLabels)
# ax.scatter(datingDataMat[:,1], datingDataMat[:,2])
#scatter(x, y, 点的大小, 颜色,标记)
ax.scatter(datingDataMat[:,1], datingDataMat[:,2], 15.0*array(datingLabels),15.0*array(datingLabels),"*")
ax.axis([-2,25,-0.2,2.0]) #[x轴min,x轴max,y轴min,y轴max]
plt.xlabel('game')
plt.ylabel('ice')
# plt.show() # 归一化特征值
# newVal=(oldVal-minVal)/(maxVal-minVal)
def autoNorm(dataSet):
minVals=dataSet.min(0) #得到每一列的最小值(列1min,列2min,列3min)
maxVals=dataSet.max(0) #得到每一列的最大值
ranges=maxVals-minVals
normDataSet=zeros(shape(dataSet))# 建立一个和dataSet一样大小的0矩阵
m=dataSet.shape[0]
normDataSet=dataSet-tile(minVals,(m,1))# tile建立矩阵tile(重复的内容,(在高度上重复,在长度上重复))
normDataSet=normDataSet/tile(ranges,(m,1))
return normDataSet,ranges,minVals normMat,ranges,minVals=autoNorm(datingDataMat) #分类器
def datingClassTest():
hoRatio=0.10 #0.1的数据作为测试
datingDataMat,datingLabels=file2matrix("E:/Python/《机器学*实战》代码/Ch02/datingTestSet2.txt")
normMat,ranges,minVals=autoNorm(datingDataMat)#归一化的特征值,特征值原本范围,特征值最小值
m=normMat.shape[0]
numTestVecs=int(m*hoRatio)#测试数据的数量
errorCount=0.0
for i in range(numTestVecs):
classifierResult=classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)
print("the classifier came back with:%d,the real answer is :%d"%(classifierResult,datingLabels[i]))
if(classifierResult!=datingLabels[i]):
errorCount+=1.0
print("The total error rate is :%f"%(errorCount/float(numTestVecs))) #约会网站预测函数
def classifyPerson():
resultList=['not at all','in small doses','in large doses']
percentTats=float(input("游戏时间百分比"))
ffMiles=float(input("每年飞行常客里程数"))
iceCream=float(input("每年吃冰淇淋多少升"))
datingDataMat,datingLabels=file2matrix("E:/Python/《机器学*实战》代码/Ch02/datingTestSet2.txt")
normMat,ranges,minVals=autoNorm(datingDataMat)
inArr=array([ffMiles,percentTats,iceCream])
classifierResult=classify0((inArr-minVals)/ranges,normMat,datingLabels,3)
print(resultList[classifierResult-1]) # classifyPerson()
												

最新文章

  1. VIM编辑器常用命令
  2. 【整理】Word OpenXML常用标签
  3. git项目开发版本控制实践
  4. CSS值得关注的那些事?
  5. SQL Server 2008 R2中,“选择前1000行”为“选择所有行”
  6. Struts2的标签库(一)——使用Struts2的标签库
  7. boa安装
  8. 查看Oracle执行计划的几种方法
  9. Kivy A to Z -- 怎样从python代码中直接訪问Android的Service
  10. www.centos.org
  11. 去掉谷歌input记住账号或密码时默认出现的黄色背景
  12. Java经典编程题50道之四十四
  13. bzoj 5251: [2018多省省队联测]劈配
  14. TensorFlow object detection API
  15. BBS论坛(十九)
  16. Linux 线程实现模型
  17. html取消回车刷新提交
  18. Windows 2016 无域故障转移群集部署方法 超详细图文教程 (一)
  19. Linux内核分析--内核中的数据结构双向链表续【转】
  20. JAVA正则表达式-捕获组与非捕获组

热门文章

  1. Netty之ByteBuf
  2. References in C++
  3. 实现将rsyslog将日志记录与MySQL中
  4. Linux 网卡配置文件,命令详细设置
  5. Oracle SQL中join方式总结
  6. spring的核心容器ApplicationContext
  7. 关于tensorflow无法使用gpu
  8. 莫烦python教程学习笔记——learn_curve曲线用于过拟合问题
  9. 图形学之Unity渲染管线流程
  10. 转:Java多线程基础问题