KNN演算法的應用示例

2021-10-04 04:32:59 字數 2992 閱讀 6566

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=n。演算法會判斷距離選定樣本值最近的n個樣本值,分別計算他們與選定樣本之間的距離,然後判斷選定樣本應該屬於哪一類。

癌症資料是資料分析中常用的一大類資料集,因為癌症資料的結果一般只有兩類:惡性和良性。但是樣本中的屬性卻很充足,所以很適合使用資料分析的形式來給出**結果。

匯入資料集

import numpy as np

import pandas as pd

from sklearn.neighbors import kneighborsclassifier

from sklearn.model_selection import train_test_split

# 讀取檔案中的資料

data = pd.read_csv(

'./cancer.csv'

,sep =

'\t'

)# x為樣本資料,y為診斷結果

y = data[

'diagnosis'

]x = data.iloc[:,2:]

結果示例為

資料清理

對資料進行歸一化處理,以確保每個特徵值都被分類器考慮。歸一化的方法有:

1)最大值最小值歸一化

x no

rmal

izat

ion=

x−mi

nmax

−min

x_ = \frac

xnorma

liza

tion

​=ma

x−mi

nx−m

in​

2)z-score歸一化

x no

rmal

izat

ion=

x−μσ

x_ = \frac

xnorma

liza

tion

​=σx

−μ​

其中,μ是均值,σ是標準差

3)sigmoid歸一化

x no

rmal

izat

ion=

11+e

−xx_ = \frac}

xnorma

liza

tion

​=1+

e−x1

​ 我們分別使用三種歸一化方式進行處理,然後檢視knn演算法的準確率。

# 1.最大值最小值歸一化

x1 =

(x - x.

min())

/(x.

max(

)- x.

min())

# score為演算法的準確率

score =

0# 取1000次準確率的均值作為最終結果

for i in

range

(1000):

# 劃分訓練資料和測試資料

x_train,x_test,y_train,y_test = train_test_split(x1,y)

knn = kneighborsclassifier(

) knn.fit(x_train,y_train)

score += knn.score(x_test,y_test)

/1000

print

('使用最大值最小值歸一化的準確率為'

,score)

# 2.z-score歸一化

x2 =

(x - x.mean())

/x.std(

)score =

0for i in

range

(1000):

x_train,x_test,y_train,y_test = train_test_split(x2,y)

knn = kneighborsclassifier(

) knn.fit(x_train,y_train)

score += knn.score(x_test,y_test)

/1000

print

('使用z-score歸一化的準確率為'

,score)

# 3.sigmoid歸一化

sigmoid =

lambda x :1/

(1+ np.e**

(-x)

)x3 = sigmoid(x)

score =

0for i in

range

(1000):

x_train,x_test,y_train,y_test = train_test_split(x3,y)

knn = kneighborsclassifier(

) knn.fit(x_train,y_train)

score += knn.score(x_test,y_test)

/1000

print

('使用sigmoid歸一化的準確率為'

,score)

結果為:

對比三種歸一化的結果,可以看到使用sigmoid歸一化可能不太適合處理本例中的資料集。

KNN 演算法的例項應用

為了提高給 helen 女士匹配約會物件的成功率,收集了各位男士的以下三種資訊 每年的飛行里程數 玩遊戲所耗時間百分比 每週消費的冰淇淋公升數 約會資料 datingtestset.txt 先看一下資料集的內容 這裡擷取了三行,前三列分別是每年的飛行里程數 玩遊戲所耗時間百分比和每週消費的冰淇淋公升...

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檔案 如...