KNN K最近鄰演算法 例項應用

2021-10-09 20:50:02 字數 3354 閱讀 1224

knn演算法是尋找最近的k個資料,推測新資料的分類

通用步驟

計算距離(常用有歐幾里得距離、馬氏距離)

公升序排序

取前k個

加權平均

k的選取

資料分析與預處理

m:惡性

b:良性

其他資料為判斷良性 、 惡性的依據

劃分資料集

取資料的1/3作為測試集,2/3作為訓練集

import random

import csv

# 癌症**資料檔案讀取

with

open

("prostate_cancer.csv"

,"r")as

file

: reader = csv.dictreader(

file

) datas =

[row for row in reader]

# 分組 -訓練集2/3 -測試集1/3

# 將資料打亂,每次得到不同的分組

random.shuffle(datas)

n =len

(datas)//3

test_set = datas[

0:n]

train_set = datas[n:

]

歐幾里得公式測距離

# 距離

defdistance

(d1, d2)

: res =

0for key in

("radius"

,"texture"

,"perimeter"

,"area"

,"smoothness"

,"compactness"

,"symmetry"

,"fractal_dimension"):

res +=

(float

(d1[key])-

float

(d2[key]))

**2return res **

0.5

選取k值先嘗試k取5

將運算後的資料按距離公升序排列

選取距離最小的k個樣點

加權平均

分類計算加權平均距離,多數表決**

import random

import csv

# 癌症**資料檔案讀取

with

open

("prostate_cancer.csv"

,"r")as

file

: reader = csv.dictreader(

file

) datas =

[row for row in reader]

# 分組 -訓練集2/3 -測試集1/3

# 將資料打亂,每次得到不同的分組

random.shuffle(datas)

n =len

(datas)//3

test_set = datas[

0:n]

train_set = datas[n:

]# knn

# 距離

defdistance

(d1, d2)

: res =

0for key in

("radius"

,"texture"

,"perimeter"

,"area"

,"smoothness"

,"compactness"

,"symmetry"

,"fractal_dimension"):

res +=

(float

(d1[key])-

float

(d2[key]))

**2return res **

0.5k =

5def

knn(data)

:# 1.所有的距離

res =

[for train in train_set

]# 2.公升序排序

res =

sorted

(res, key=

lambda item: item[

"distance"])

# 3.取前k個

res2 = res[

0:k]

# 4.加權平均

result =

# 總距離

sum=

0for r in res2:

sum+= r[

"distance"

]for r in res2:

result[r[

"result"]]

+=1- r[

"distance"]/

sum# print(result)

# print(data["diagnosis_result"])

if result[

'b']

> result[

'm']

:return

"b"else

:return

"m"# 測試階段

correct =

0for test in test_set:

result = test[

"diagnosis_result"

] result2 = knn(test)

if result == result2:

correct +=

1print

("準確個數:"

, correct)

print

("測試總數:"

,len

(test_set)

)print

("準確率:%"

.format

(100

* correct /

len(test_set)

))

KNN K最近鄰分類模型

knn原理 訓練元組用 n個屬性描述,每個元組代表 n維空間中的乙個點,所有的訓練元組存放在 n維的模式空間。當給定乙個未知元組時,搜尋該模式空間,找出最接近未知元組的 k個訓練元組。未知元組指派到它的 k個最近鄰中的多數類。鄰近性 用距離度量,如歐幾里德距離。knn演算法中的細節處理 數值屬性規範...

KNN k近鄰演算法

現在假如我們已經擁有了一些資料 稱為訓練資料集 ts,並且擁有所有資料的類別名 即每條資料應該歸於哪個類別。當我們要判斷一條不知類別的資料時,首先讓這條資料m和已經擁有的所有的資料ts中的每一條資料進行比較,然後根據比較結果選擇出和m最相似 一般是基於距離 的k條資料 k是個整數,並且通常是小於20...

kNN(k近鄰演算法)

k近鄰分析 knn 一 概述 knn演算法是一種有監督學習的分類演算法。所謂有監督學習,就是在應用演算法之前我們必須準備一組訓練集,訓練集中的每個例項都是由一些特徵和乙個分類標籤組成 通常還會存在乙個測試集,用來測試訓練出來的分類模型的準確性。其實knn演算法並沒有體現出有監督學習的所有特點,沒有模...