為了提高給 helen 女士匹配約會物件的成功率,收集了各位男士的以下三種資訊:
每年的飛行里程數
玩遊戲所耗時間百分比
每週消費的冰淇淋公升數
約會資料:datingtestset.txt
先看一下資料集的內容:這裡擷取了三行,前三列分別是每年的飛行里程數、玩遊戲所耗時間百分比和每週消費的冰淇淋公升數,最後一列是 helen 女士對他們的 feel,largedoses 表示 helen 女士認為他非常有魅力,smalldoses 表示 helen 女士對他感覺一般般,而 didntlike 則表示 helen 女士不喜歡他。
40920
8.326976
0.953952 largedoses
14488
7.153469
1.673904 smalldoses
26052
1.441871
0.805124 didntlike
將收集來的資料輸入到 knn 分類器以前,應該將其處理成分類器能夠接收的格式,即應該先分成特徵和標籤兩部分,同時還要記得將標籤轉化為 int 型數字,用 1 代表不喜歡,2 代表魅力一般,3 代表極具魅力。
在 knn_exp01.py 檔案中建立乙個處理資料的函式:
def
file2matrix
(filename)
:# 開啟檔案
fr =
open
(filename)
# 按行讀取檔案
arrayolines = fr.readlines(
)# 得到檔案行數
numberoflines =
len(arrayolines)
# 建立用 0 填充的矩陣
returnmat = zeros(
(numberoflines,3)
)# 建立用於存放標籤的列表
classlabelvector =
# 行的索引
index =
0# 解析檔案資料得到列表
for line in arrayolines:
# 去掉所有回車字元
line = line.strip(
)# 將整行資料分割成元素列表
listfromline = line.split(
'\t'
)# 選取前 3 個元素儲存到特徵矩陣中
returnmat[index,:]
= listfromline[0:
3]# 將最後一列儲存到標籤向量中
if listfromline[-1
]=='didntlike':1
)elif listfromline[-1
]=='smalldoses':2
)else:3
) index +=
1return returnmat, classlabelvector
在 python 命令提示符中輸入命令,檢查一下資料內容:
>>
>
import knn_exp01
>>
> datingdatamat, datingdatalabels = knn_exp01.file2matrix(
'datingtestset.txt'
)>>
> datingdatamat
array([[
4.0920000e+04
,8.3269760e+00
,9.5395200e-01],
[1.4488000e+04
,7.1534690e+00
,1.6739040e+00],
[2.6052000e+04
,1.4418710e+00
,8.0512400e-01],
...,
[2.6575000e+04
,1.0650102e+01
,8.6662700e-01],
[4.8111000e+04
,9.1345280e+00
,7.2804500e-01],
[4.3757000e+04
,7.8826010e+00
,1.3324460e+00]]
)>>
> datingdatalabels[0:
20][3
,2,1
,1,1
,1,3
,3,1
,3,1
,1,2
,1,1
,1,1
,1,2,3]
>>
>
import matplotlib
>>
>
import matplotlib.pyplot as plt
>>
> fig = plt.figure(
)>>
> ax = fig.add_subplot(
111)
>>
> ax.scatter(datingdatamat[:,
1], datingdatamat[:,2])
>
>>
> plt.show(
)
散點圖使用 datingdatamat 矩陣的第
二、第三列資料分別作為 x、y軸,即 x 軸為玩遊戲所耗時間百分比,y 軸為每週消費的冰淇淋公升數。
KNN演算法的應用示例
knn演算法是資料分析中的一種常用方法。本文對knn演算法的原理進行簡要說明,並給出具體的應用示例。knn演算法根據樣本之間的距離,進行類別的劃分。樣本間的距離可以使用歐氏距離 d i 1n xi yi 2 d sqrt n x i y i 2 d i 1 n x i y i 2 進行計算時,需要首...
k 近鄰 KNN 演算法的應用
from numpy import from os import listdir import operator defclassify0 inx,dataset,labels,k datasetsize dataset.shape 0 diffmat tile inx,datasetsize,1 ...
手寫數字識別 KNN演算法的應用
訓練之後,即可識別手寫數字如下 我用windows自帶的畫板畫的,可能有點醜,見諒 等等執行在自己安裝好jupyter的伺服器上,安裝可以參考 在centos上安裝jupyter notebook 支援外網訪問 一定要保證路徑正確,如果不希望做任何修改的話,請保證相對路徑如下 此python檔案 如...