機器學習筆記(KNN演算法)
程式碼中用到了 heapq 模組, Counter , lambda 表示式等稍微複雜的運用,請大家自行理解
# 要新增一個新單元,輸入 '# %%'
# 要新增一個新的標記單元,輸入 '# %% [markdown]'
# %%
import heapq
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from collections import Counter
# %%
# 載入資料
iris = load_iris()
# 切分 X 和 y
X = iris.data[:, :2]
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=12)
# %%
def knn(X_train, X_test, y_train, y_test, k=3):
count = 0
# 遍歷測試資料裡面的每一行,外匯跟單gendan5.com計算最小的 k 個距離以及它們的 y
for i in range(X_test.shape[0]):
# 計算每個點的歐式距離
diff = X_train - X_test[i]
distance_list = [np.linalg.norm(_) for _ in diff]
# 將距離和 y_train 組合
combine_list = zip(distance_list, y_train.tolist())
# 用 heapq 找出最小的 k 個值
top_k_list = heapq.nsmallest(k, combine_list, key=lambda x : x[0])
# 找出最小個 k 個值對應的 y 中出現最多的
y = Counter([c[1] for c in top_k_list]).most_common(1)[0][0]
if y == y_test[i]:
count = count + 1
print("{0} 預測屬於: {1} ,實際屬於: {2}".format(X_test[i], y, y_test[i]))
# 所有行遍歷完以後,輸出準確率
print(" 總共 {0} 個測試資料, {1} 個準確,正確率 {2:.2f}%".format(X_test.shape[0], count, count/X_test.shape[0]*100))
knn(X_train, X_test, y_train, y_test)
# %%
[5. 3.5] 預測屬於: 0 ,實際屬於: 0
[6.3 2.5] 預測屬於: 2 ,實際屬於: 2
[4.4 3. ] 預測屬於: 0 ,實際屬於: 0
[5.7 2.8] 預測屬於: 1 ,實際屬於: 1
[6.8 3.2] 預測屬於: 2 ,實際屬於: 2
[6.5 3. ] 預測屬於: 2 ,實際屬於: 2
[6.2 3.4] 預測屬於: 2 ,實際屬於: 2
[5.1 3.4] 預測屬於: 0 ,實際屬於: 0
[7.7 3. ] 預測屬於: 2 ,實際屬於: 2
[5.1 3.3] 預測屬於: 0 ,實際屬於: 0
[5.6 3. ] 預測屬於: 1 ,實際屬於: 1
[5.4 3.9] 預測屬於: 0 ,實際屬於: 0
[5.4 3.4] 預測屬於: 0 ,實際屬於: 0
[5.1 3.7] 預測屬於: 0 ,實際屬於: 0
[7. 3.2] 預測屬於: 2 ,實際屬於: 1
[7.2 3.2] 預測屬於: 2 ,實際屬於: 2
[6.7 2.5] 預測屬於: 1 ,實際屬於: 2
[5.9 3. ] 預測屬於: 2 ,實際屬於: 1
[4.6 3.4] 預測屬於: 0 ,實際屬於: 0
[6.3 2.5] 預測屬於: 2 ,實際屬於: 1
[4.9 3. ] 預測屬於: 0 ,實際屬於: 0
[6.1 2.8] 預測屬於: 1 ,實際屬於: 1
[6.2 2.8] 預測屬於: 1 ,實際屬於: 2
[6. 2.9] 預測屬於: 1 ,實際屬於: 1
[4.8 3.4] 預測屬於: 0 ,實際屬於: 0
[6.7 3. ] 預測屬於: 2 ,實際屬於: 2
[6.7 3. ] 預測屬於: 2 ,實際屬於: 1
[5.5 2.6] 預測屬於: 1 ,實際屬於: 1
[4.8 3.4] 預測屬於: 0 ,實際屬於: 0
[4.5 2.3] 預測屬於: 1 ,實際屬於: 0
[5.1 3.5] 預測屬於: 0 ,實際屬於: 0
[5.5 2.4] 預測屬於: 1 ,實際屬於: 1
[6.3 2.9] 預測屬於: 1 ,實際屬於: 2
[5.5 4.2] 預測屬於: 0 ,實際屬於: 0
[5.8 2.7] 預測屬於: 1 ,實際屬於: 2
[5.7 4.4] 預測屬於: 0 ,實際屬於: 0
[5.6 2.9] 預測屬於: 1 ,實際屬於: 1
[5.5 2.4] 預測屬於: 1 ,實際屬於: 1
[5.8 4. ] 預測屬於: 0 ,實際屬於: 0
[6. 2.2] 預測屬於: 1 ,實際屬於: 1
[5.1 2.5] 預測屬於: 1 ,實際屬於: 1
[5. 3.4] 預測屬於: 0 ,實際屬於: 0
[4.4 2.9] 預測屬於: 0 ,實際屬於: 0
[5.1 3.8] 預測屬於: 0 ,實際屬於: 0
[4.8 3. ] 預測屬於: 0 ,實際屬於: 0
總共 45 個測試資料, 36 個準確,正確率 80.00%
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2779491/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- educoder 機器學習 --- kNN演算法機器學習KNN演算法
- 機器學習——KNN近鄰演算法機器學習KNN演算法
- python機器學習演算法——KNN演算法Python機器學習演算法KNN
- 機器學習演算法學習筆記機器學習演算法筆記
- 機器學習-K近鄰演算法-KNN機器學習演算法KNN
- 機器學習經典演算法之KNN機器學習演算法KNN
- 機器學習演算法——kNN(k-近鄰演算法)機器學習演算法KNN
- 機器學習分享——KNN演算法及numpy實現機器學習KNN演算法
- python機器學習筆記:EM演算法Python機器學習筆記演算法
- 機器學習演算法:Logistic迴歸學習筆記機器學習演算法筆記
- 機器學習——KNN(K近鄰)機器學習KNN
- 機器學習實踐篇第二篇-KNN演算法學習機器學習KNN演算法
- 機器學習學習筆記機器學習筆記
- 機器學習筆記機器學習筆記
- 機器學習學習筆記之——演算法鏈與管道機器學習筆記演算法
- 機器學習筆記(1): 梯度下降演算法機器學習筆記梯度演算法
- 《機器學習初步》筆記機器學習筆記
- 機器學習演算法筆記之5:支援向量機SVM機器學習演算法筆記
- 機器學習 第5篇:knn迴歸機器學習KNN
- 機器學習演算法筆記之8:聚類演算法機器學習演算法筆記聚類
- 機器學習實戰筆記-k近鄰演算法機器學習筆記演算法
- 機器學習演算法筆記之3:線性模型機器學習演算法筆記模型
- 機器學習課程筆記機器學習筆記
- 學習筆記-虛擬機器筆記虛擬機
- Machine Learning 機器學習筆記Mac機器學習筆記
- 機器學習中的聚類演算法演變及學習筆記機器學習聚類演算法筆記
- 李巨集毅機器學習-學習筆記機器學習筆記
- 機器學習學習筆記——基本知識機器學習筆記
- 機器學習整合學習—Apple的學習筆記機器學習APP筆記
- 機器學習 | 吳恩達機器學習第九周學習筆記機器學習吳恩達筆記
- Python機器學習筆記:樸素貝葉斯演算法Python機器學習筆記演算法
- Python機器學習筆記:奇異值分解(SVD)演算法Python機器學習筆記演算法
- 機器學習演算法筆記之4:貝葉斯分類器機器學習演算法筆記
- Python機器學習筆記:sklearn庫的學習Python機器學習筆記
- 【筆記】《Python大戰機器學習》筆記Python機器學習
- JAVA虛擬機器學習筆記Java虛擬機機器學習筆記
- 吳恩達機器學習筆記 —— 18 大規模機器學習吳恩達機器學習筆記
- 機器學習入門筆記系列(10) | K-means 演算法機器學習筆記演算法