import numpy as np
import operator
"""
函数说明:打开并解析文件,对数据进行分类:1 代表不喜欢 2 魅力一般 3 魅力十足
Parameters:
filename - 文件名
Returns:
"""
def file2matrix(filename):
fr=open(filename)
arrayOLines=fr.readlines();
numberOfLines=len(arrayOLines);
returnMat=np.zeros((numberOfLines,3))
classLabeVector=[]
index = 0
for line in arrayOLines:
line =line.strip()
listFromLine=line.split('\t')
returnMat[index,:]=listFromLine[0:3]
if listFromLine[-1] == 'didntLike':
classLabeVector.append(1)
elif listFromLine[-1] == 'smallDoses':
classLabeVector.append(2)
elif listFromLine[-1] == 'largeDoses':
classLabeVector.append(3)
index+=1
return returnMat, classLabeVector
"""
函数说明:对数据进行归一化
Parameters:
dataSet - 特征矩阵
Returns:
normDataSet - 归一化后的特征矩阵
ranges - 数据范围
minVals - 数据最小值
"""
def autoNorm(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
from sklearn.neighbors import KNeighborsClassifier
def classify1(inx,dataSet,labels,k):
knn=KNeighborsClassifier()
knn.fit(dataSet,np.array(labels))
res=knn.predict([inx])
display(res[0])
return res[0]
"""
函数说明:
通过输入一个人的三围特征,进行分类输出
"""
def classifyPer():
resultList=['讨厌','有点喜欢','非常喜欢']
precentTats=float(input("玩视频游戏所耗时间百分比:"))
ffMiles=float(input("每年出行里程数:"))
iceCream=float(input("每周消耗的冰淇淋升数:"))
filename="datingTestSet.txt"
datingDataMat,datingLabels=file2matrix(filename)
normMat,ranges,minVals=autoNorm(datingDataMat)
inArr=np.array([ffMiles,precentTats,iceCream])
norminArr=(inArr-minVals)/ranges
classifierResult=classify1(norminArr,normMat,datingLabels,3)
display(classifierResult)
print("你可能%s这个人"%(resultList[classifierResult-1]))
if __name__ == '__main__':
classifyPer()
玩视频游戏所耗时间百分比:10
每年出行里程数:40000
每周消耗的冰淇淋升数:0.1
3
3
你可能非常喜欢这个人