国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

K近鄰算法(二)--約會網站配對

2019-11-08 01:56:54
字體:
來源:轉載
供稿:網友

問題描述:一姑娘相親無數,并且給相親對象進行了評分123分別表示很喜歡的,一般般的和不喜歡的,這里也給出了被約過的1000位男士的個人信息包括飛行里數,玩游戲視頻所耗時間比,和每周消費的冰激凌公升數。要求建立一個分類器使得一個新的男士出現時能以最大概率進行分類。這里我們用KNN算法。

一、準備數據

所給txt文檔有1000行,大概長這樣:

40920    8.326976    0.953952    314488    7.153469    1.673904    226052    1.441871    0.805124    175136    13.147394    0.428964    138344    1.669788    0.134296    1

...

先上代碼:

def file2matrix(filename):    fr = open(filename)    numberOfLines = len(fr.readlines())         #get the number of lines in the file    returnMat = zeros((numberOfLines,3))        #PRepare matrix to return    classLabelVector = []                       #prepare labels return       fr = open(filename)    index = 0#確保指針在最前面    for line in fr.readlines():        line = line.strip()#移除首尾空格,回車字符        listFromLine = line.split('/t')#每一行以空格為劃分符分割成若干元素        returnMat[index,:] = listFromLine[0:3]#取分割出來的前三個        classLabelVector.append(int(listFromLine[-1]))#取分割出來的最后已個作為類        index += 1    return returnMat,classLabelVector我們最后將原數據的特征均放在returnMat中,對應類放在classLabelVector中。

注1:strip(‘chars’)的功能是移除收尾指定字符。如

str = "0000000this is string example....wow!!!0000000"str.strip('0')Out[11]: 'this is string example....wow!!!'如果str.strip()則表示移除首尾空格。

注2:同樣,后續使用時要時要將內參變為外參

datingDataMat,datingLabels=file2matrix('文件名.txt')

后面會加

二、分析數據

畫圖

import matplotlibimport matplotlib.pyplot as pltfig=plt.figure()ax=fig.add_subplot(111)ax.scatter(returnMat[:,1],returnMat[:,2],15.0*array(datingLabels),15.0*array(datingLabels))plt.show

即以數據中第二列第三列為坐標,datingLabels為顏色和大小標記標準

我們換第一列和第二列為坐標看看。即換成

ax.scatter(returnMat[:,0],returnMat[:,1],15.0*array(datingLabels),15.0*array(datingLabels))分類得很清楚,于是我們決定就用第一列和第二列了。

三、數值歸一化

def autoNorm(dataSet):    minVals = dataSet.min(0)    maxVals = dataSet.max(0)    ranges = maxVals - minVals    normDataSet = zeros(shape(dataSet))#建立框架    m = dataSet.shape[0]#行數    normDataSet = dataSet - tile(minVals, (m,1))#每個數減該列最小    normDataSet = normDataSet/tile(ranges, (m,1))   #差再除以max-min    return normDataSet, ranges, minVals注1:min(0)是計算每列的最小值,min(1)的話是計算每行的最小值

注2:這里的/就是除法,不是矩陣除法,矩陣除法的話要linalg.solve(matA,matB)

注3:同樣,內參變外參

normMat,range.minVals=autoNorm(datingDataMat)后面會加

四、測試算法

def datingClassTest():    hoRatio = 0.10      #hold out 10%    datingDataMat,datingLabels = file2matrix('datingTestSet2.txt')       #load data setfrom file    normMat, ranges, minVals = autoNorm(datingDataMat)    m = normMat.shape[0]#行數    numTestVecs = int(m*hoRatio)#取出10%的數據作為測試集    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))    print errorCount注1:
classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)這行使用的是上一篇定義的功能,應該為classify0(測試集,特征集,類,k值),一般來說9:1分要隨機,但這里本身給的順序就是隨機的,所以我們可以把1:100行作為測試集,101:1000行作為訓練集。我們可以調節hoRatio來影響最后的錯誤率,最后我們選一個使錯誤率最低的比例估摸大概就是我們最終測試新數據可能會犯錯的可能性。

五、使用算法

推廣:電影推薦系統如何自動推薦你可能感興趣的電影?按同樣思路,可以把每部電影中含有的喜劇元素,動作元素,恐怖元素百分比等作為特征向量,但是這些數據又該如何得到,加入我們知道一群人分別很喜歡喜劇電影,動作電影,恐怖電影,并且知道他們給不同電影的評分,這樣就可以推算出每部電影的不同元素百分比。

同樣,可以根據用戶今天或者上周在淘寶上的新增收藏數,加入購物車數,以及瀏覽時間等判斷明天是否會下單疑問

def classifyperson():resultList=['dislike','just so so','very like']percentTats=float(raw_input("percentage of time spent playing video games?"))ffMiles=float(raw_input("frenquent flier miles earned per year?"))icecream=float(raw_input("liters of ice cream consumed per year?"))
datingDataMat,datingLabels = file2matrix('datingTestSet2.txt')       #load data setfrom filenormMat, ranges, minVals = autoNorm(datingDataMat)#不重新寫一遍就是內參了inArr=array([ffMiles,percentTats,icecream])#合成classifierRusult=classify0(inArr-minVals/ranges,normMat,datingLabels,3)print "reulitList[classifierRusult-1]"

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北碚区| 永胜县| 喜德县| 云安县| 开远市| 吴忠市| 长兴县| 定日县| 邯郸市| 桦甸市| 闸北区| 西昌市| 乐山市| 兴海县| 台江县| 沭阳县| 西乡县| 溆浦县| 承德市| 乌恰县| 临邑县| 天津市| 河东区| 齐齐哈尔市| 响水县| 札达县| 高邑县| 长岭县| 兴化市| 辽中县| 沭阳县| 车致| 平定县| 垫江县| 颍上县| 龙山县| 定西市| 科技| 本溪| 富源县| 泰州市|