三、完整**
或者尋找最近的k個資料,推測新資料的分類。
import csv
with
open
('e:\資資\python練習\knn\prostate_cancer.csv'
,'r')as
file
:#dictreader把資料讀成字典
reader = csv.dictreader(
file
) datas=
[row for row in reader]
print
(datas)
k=
5def
knn(data)
:#1距離
res =
[for train in train_set
]print
(res)
knn(test_set[0]
)
#2排序
res =
sorted
(res,key=
lambda item:item[
'distance'])
print
(res)
def
knn(data)
:#1距離
res =
[for train in train_set
]#2排序
res =
sorted
(res,key=
lambda item:item[
'distance'])
#取前k個
res2=res[
0:k]
#加權平均
result=
#總距離
sum=
0for r in res2:
sum+=r[
'distance'
]#距離進的權重反而高
for r in res2:
result[r[
'result']]
+=1-r['distance']/
sum#輸出**的結果
print
(result)
#輸出本身結果
#測試階段
correct=
0for test in test_set:
result=test[
'diagnosis_result'
] result2=knn(test)
if result==result2:
correct+=
1print
("準確率:%"
.format
(100
*correct/
len(test_set)
))
import random
import csv
#資料讀取
with
open
('e:\資資\python練習\knn\prostate_cancer.csv'
,'r')as
file
:#dictreader把資料讀成字典
reader = csv.dictreader(
file
) datas=
[row for row in reader]
#分組#分成訓練集和測試集
#打亂順序,防止偶然性
random.shuffle(datas)
n =len
(datas)//3
test_set = datas[
0:n]
train_set = datas[n:
]#knn
#距離def
distance
(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'])
#取前k個
res2=res[
0:k]
#加權平均
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
("準確率:%"
.format
(100
*correct/
len(test_set)
))
KNN演算法實戰
time 2021 1 4 20 37 file knn.py from sklearn.datasets import load iris from sklearn.model selection import train test split from sklearn.preprocessing...
機器學習實戰 kNN演算法
今天看了第乙個機器學習演算法 k 鄰近演算法。大概意思就是,先根據已有分劃分好類別的資料集,然後輸入新的資料向量,就計算與資料集裡各個向量的距離,排序找到前k個資料,統計前k資料中各個類別 標籤 出現的次數,最多的那個類別 標籤 就是輸入向量所屬的類別,然後返回。哈哈get乙個機器學習的演算法開心。...
機器學習實戰 KNN演算法
k 近鄰演算法的工作機制非常簡單 對給定的測試樣本,基於某種距離度量找出訓練集中與其最靠近的 k 個訓練樣本,然後基於這 k 個 鄰居 的資訊來進行 通常,在分類任務中可使用 投票法 即選擇這 k 個樣本中出現最多的類別標記作為 結果 在回歸任務中時使用 平均法 即將這k 個樣本的實值輸出標記的平均...