機器學習筆記(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 機器學習之KNN演算法機器學習KNN演算法
- 機器學習——KNN近鄰演算法機器學習KNN演算法
- python機器學習演算法——KNN演算法Python機器學習演算法KNN
- 機器學習經典演算法之KNN機器學習演算法KNN
- 機器學習-K近鄰演算法-KNN機器學習演算法KNN
- 機器學習演算法——kNN(k-近鄰演算法)機器學習演算法KNN
- 機器學習分享——KNN演算法及numpy實現機器學習KNN演算法
- 機器學習實戰ByMatlab(1):KNN演算法機器學習MatlabKNN演算法
- 機器學習之kNN演算法(純python實現)機器學習KNN演算法Python
- 01-kNN演算法實戰-(機器學習實戰)KNN演算法機器學習
- 機器學習演算法學習筆記機器學習演算法筆記
- 機器學習從入門到放棄之KNN演算法機器學習KNN演算法
- python機器學習筆記:EM演算法Python機器學習筆記演算法
- 機器學習筆記之Kmeans演算法機器學習筆記演算法
- 機器學習——KNN(K近鄰)機器學習KNN
- KNN演算法KNN演算法
- 機器學習演算法筆記之8:聚類演算法機器學習演算法筆記聚類
- 機器學習實踐篇第二篇-KNN演算法學習機器學習KNN演算法
- 機器學習筆記機器學習筆記
- 【機器學習演算法】KNN鳶尾花種類預測案例和特徵預處理。全md文件筆記(已分享,附程式碼)機器學習演算法KNN特徵筆記
- 機器學習演算法筆記之3:線性模型機器學習演算法筆記模型
- 機器學習實戰筆記-k近鄰演算法機器學習筆記演算法
- 機器學習筆記之Logistic迴歸演算法機器學習筆記演算法
- 機器學習筆記1(K-近鄰演算法)機器學習筆記演算法
- 機器學習 第5篇:knn迴歸機器學習KNN
- 機器學習演算法-K近鄰(KNN)演算法(三):馬絞痛資料--kNN資料預處理+kNN分類pipeline(程式碼附詳細註釋)機器學習演算法KNN
- 機器學習演算法筆記之5:支援向量機SVM機器學習演算法筆記
- 機器學習學習筆記之——演算法鏈與管道機器學習筆記演算法
- 機器學習演算法:Logistic迴歸學習筆記機器學習演算法筆記
- 機器學習筆記(一)機器學習筆記
- 機器學習——最鄰近規則分類(K Nearest Neighbor)KNN演算法機器學習RESTKNN演算法
- KNN演算法理解KNN演算法
- KNN演算法實驗KNN演算法
- 機器學習演算法筆記之6:資料預處理機器學習演算法筆記
- Python機器學習筆記:樸素貝葉斯演算法Python機器學習筆記演算法
- Python機器學習筆記:奇異值分解(SVD)演算法Python機器學習筆記演算法
- 機器學習總結 (機器學習實踐筆記)機器學習筆記
- 機器學習學習筆記機器學習筆記