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演算法並沒有體現出有監督學習的所有特點,沒有模...