KNN 演算法的例項應用

2021-09-11 10:44:22 字數 2835 閱讀 7979

為了提高給 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檔案 如...