《機器學習實戰》程式清單2-5 約會網站預測函式

王明輝發表於2018-01-29

以下程式碼,在Sublime中跑不起來,似乎Sublime無法互動輸入文字,在IDLE或控制檯中可以輸入。

測試結果其實也挺搞笑的,這姑娘的喜好唯一取決於每週吃多少冰淇淋,前兩項輸入0,第三項輸入236,就是small does,輸入237,就是large doses。

所以,一個不玩遊戲,不是飛行常客,一週吃237升冰淇淋的人,是她最可能喜歡的人。

這是因為離[0 0 237]這個點最近的k(此處假設k=3)個點分別是:

14402 10.482619 1.694972 smallDoses

35283 6.091587 1.694641 largeDoses

56557 11.746200 1.695517 largeDoses

最終的統計結果是:{'smallDoses': 1, ' largeDoses': 2}

 largeDoses的有倆,所以結果是 largeDoses,非常喜歡

如果把K放大到1000,統計結果是:{'smallDoses': 331, 'largeDoses': 327, 'didntLike': 342}

結論是:不喜歡。

結果大相徑庭

從這個統計結果來看,這個姑娘約見的人分佈得還挺平均的。

 

 

其它值請各位自行測試。

def classifyPerson():
    resultList = ['not at all', 'in small doses', 'in large doses']
    percentTats = float(input("percentage of time spent playing video games?"))
    ffMiles = float(input("frequent flier miles earned per year?"))
    iceCream = float(input("liters of ice cream consumed per year?"))

    datingDataMat, datingLabels = file2matrix('datingTestSet3.txt')
    normMat, ranges, minVals = autoNorm(datingDataMat)
    inArr = array([ffMiles, percentTats, iceCream])
    classifierResult = classify0((inArr - minVals)/ranges, normMat, datingLabels, 3)
    print(classifierResult)

    print("You will probably like this person: ", resultList[int(classifierResult) - 1])

 

相關文章