演算法實踐:KNN分類(day08)
2.4 演算法實戰
2.4.1 Demo資料集–kNN分類
Step1: 庫函式匯入
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.neighbors import KNeighborsClassifier
from sklearn import datasets
Step2: 資料匯入
# 使用鶯尾花資料集的前兩維資料,便於資料視覺化
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target
Step3: 模型訓練&視覺化
k_list = [1, 3, 5, 8, 10, 15]
h = .02
# 建立不同顏色的畫布
cmap_light = ListedColormap(['orange', 'cyan', 'cornflowerblue'])
cmap_bold = ListedColormap(['darkorange', 'c', 'darkblue'])
plt.figure(figsize=(15,14))
# 根據不同的k值進行視覺化
for ind,k in enumerate(k_list):
clf = KNeighborsClassifier(k)
clf.fit(X, y)
# 畫出決策邊界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
# 根據邊界填充顏色
Z = Z.reshape(xx.shape)
plt.subplot(321+ind)
plt.pcolormesh(xx, yy, Z, cmap=cmap_light)
# 資料點視覺化到畫布
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap_bold,
edgecolor='k', s=20)
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title("3-Class classification (k = %i)"% k)
plt.show()
Step4: 原理簡析
如果選擇較小的K值,就相當於用較小的領域中的訓練例項進行預測,例如當k=1的時候,在分界點位置的資料很容易受到區域性的影響,圖中藍色的部分中還有部分綠色塊,主要是資料太區域性敏感。當k=15的時候,不同的資料基本根據顏色分開,當時進行預測的時候,會直接落到對應的區域,模型相對更加魯棒。
2.4.2 鶯尾花資料集–kNN分類
Step1: 庫函式匯入
import numpy as np
# 載入鶯尾花資料集
from sklearn import datasets
# 匯入KNN分類器
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
Step2: 資料匯入&分析
# 匯入鶯尾花資料集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 得到訓練集合和驗證集合, 8: 2
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
Step3: 模型訓練
這裡我們設定引數k(n_neighbors)=5, 使用歐式距離(metric=minkowski & p=2)
# 訓練模型
clf = KNeighborsClassifier(n_neighbors=5, p=2, metric="minkowski")
clf.fit(X_train, y_train)
KNeighborsClassifier()
Step4:模型預測&視覺化
# 預測
X_pred = clf.predict(X_test)
acc = sum(X_pred == y_test) / X_pred.shape[0]
print("預測的準確率ACC: %.3f" % acc)
預測的準確率ACC: 0.967
我們用表格來看一下KNN的訓練和預測過程。這裡用表格進行視覺化:
- 訓練資料[表格對應list]
feat_1 | feat_2 | feat_3 | feat_4 | label |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | 0 |
4.9 | 3. | 1.4 | 0.2 | 0 |
4.7 | 3.2 | 1.3 | 0.2 | 0 |
4.6 | 3.1 | 1.5 | 0.2 | 0 |
6.4 | 3.2 | 4.5 | 1.5 | 1 |
6.9 | 3.1 | 4.9 | 1.5 | 1 |
5.5 | 2.3 | 4. | 1.3 | 1 |
6.5 | 2.8 | 4.6 | 1.5 | 1 |
5.8 | 2.7 | 5.1 | 1.9 | 2 |
7.1 | 3. | 5.9 | 2.1 | 2 |
6.3 | 2.9 | 5.6 | 1.8 | 2 |
6.5 | 3. | 5.8 | 2.2 | 2 |
- knn.fit(X, y)的過程可以簡單認為是表格儲存
feat_1 | feat_2 | feat_3 | feat_4 | label |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | 0 |
4.9 | 3. | 1.4 | 0.2 | 0 |
4.7 | 3.2 | 1.3 | 0.2 | 0 |
4.6 | 3.1 | 1.5 | 0.2 | 0 |
6.4 | 3.2 | 4.5 | 1.5 | 1 |
6.9 | 3.1 | 4.9 | 1.5 | 1 |
5.5 | 2.3 | 4. | 1.3 | 1 |
6.5 | 2.8 | 4.6 | 1.5 | 1 |
5.8 | 2.7 | 5.1 | 1.9 | 2 |
7.1 | 3. | 5.9 | 2.1 | 2 |
6.3 | 2.9 | 5.6 | 1.8 | 2 |
6.5 | 3. | 5.8 | 2.2 | 2 |
- knn.predict(x)預測過程會計算x和所有訓練資料的距離
這裡我們使用歐式距離進行計算, 預測過程如下
x = [ 5. , 3.6 , 1.4 , 0.2 ] y = 0 x = [5. , 3.6, 1.4, 0.2] \\ y=0 x=[5.,3.6,1.4,0.2]y=0
step1: 計算x和所有訓練資料的距離
feat_1 | feat_2 | feat_3 | feat_4 | 距離 | label |
---|---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | 0.14142136 | 0 |
4.9 | 3. | 1.4 | 0.2 | 0.60827625 | 0 |
4.7 | 3.2 | 1.3 | 0.2 | 0.50990195 | 0 |
4.6 | 3.1 | 1.5 | 0.2 | 0.64807407 | 0 |
6.4 | 3.2 | 4.5 | 1.5 | 3.66333182 | 1 |
6.9 | 3.1 | 4.9 | 1.5 | 4.21900462 | 1 |
5.5 | 2.3 | 4. | 1.3 | 3.14801525 | 1 |
6.5 | 2.8 | 4.6 | 1.5 | 3.84967531 | 1 |
5.8 | 2.7 | 5.1 | 1.9 | 4.24617475 | 2 |
7.1 | 3. | 5.9 | 2.1 | 5.35070089 | 2 |
6.3 | 2.9 | 5.6 | 1.8 | 4.73075047 | 2 |
6.5 | 3. | 5.8 | 2.2 | 5.09607692 | 2 |
step2: 根據距離進行編號排序
距離升序編號 | feat_1 | feat_2 | feat_3 | feat_4 | 距離 | label |
---|---|---|---|---|---|---|
1 | 5.1 | 3.5 | 1.4 | 0.2 | 0.14142136 | 0 |
3 | 4.9 | 3. | 1.4 | 0.2 | 0.60827625 | 0 |
2 | 4.7 | 3.2 | 1.3 | 0.2 | 0.50990195 | 0 |
4 | 4.6 | 3.1 | 1.5 | 0.2 | 0.64807407 | 0 |
6 | 6.4 | 3.2 | 4.5 | 1.5 | 3.66333182 | 1 |
8 | 6.9 | 3.1 | 4.9 | 1.5 | 4.21900462 | 1 |
5 | 5.5 | 2.3 | 4. | 1.3 | 3.14801525 | 1 |
7 | 6.5 | 2.8 | 4.6 | 1.5 | 3.84967531 | 1 |
9 | 5.8 | 2.7 | 5.1 | 1.9 | 4.24617475 | 2 |
12 | 7.1 | 3. | 5.9 | 2.1 | 5.35070089 | 2 |
10 | 6.3 | 2.9 | 5.6 | 1.8 | 4.73075047 | 2 |
11 | 6.5 | 3. | 5.8 | 2.2 | 5.09607692 | 2 |
step3: 我們設定k=5,選擇距離最近的k個樣本進行投票
距離升序編號 | feat_1 | feat_2 | feat_3 | feat_4 | 距離 | label |
---|---|---|---|---|---|---|
1 | 5.1 | 3.5 | 1.4 | 0.2 | 0.14142136 | 0 |
3 | 4.9 | 3. | 1.4 | 0.2 | 0.60827625 | 0 |
2 | 4.7 | 3.2 | 1.3 | 0.2 | 0.50990195 | 0 |
4 | 4.6 | 3.1 | 1.5 | 0.2 | 0.64807407 | 0 |
6 | 6.4 | 3.2 | 4.5 | 1.5 | 3.66333182 | 1 |
8 | 6.9 | 3.1 | 4.9 | 1.5 | 4.21900462 | 1 |
5 | 5.5 | 2.3 | 4. | 1.3 | 3.14801525 | 1 |
7 | 6.5 | 2.8 | 4.6 | 1.5 | 3.84967531 | 1 |
9 | 5.8 | 2.7 | 5.1 | 1.9 | 4.24617475 | 2 |
12 | 7.1 | 3. | 5.9 | 2.1 | 5.35070089 | 2 |
10 | 6.3 | 2.9 | 5.6 | 1.8 | 4.73075047 | 2 |
11 | 6.5 | 3. | 5.8 | 2.2 | 5.09607692 | 2 |
step4: k近鄰的label進行投票
nn_labels = [0, 0, 0, 0, 1] --> 得到最後的結果0。
相關文章
- KNN演算法——分類部分KNN演算法
- 最基礎的分類演算法(KNN)演算法KNN
- 資料探勘——KNN演算法(手寫數字分類)KNN演算法
- KNN演算法實驗KNN演算法
- KNN 演算法-理論篇-如何給電影進行分類KNN演算法
- KNN演算法推理與實現KNN演算法
- 機器學習演算法-K近鄰(KNN)演算法(三):馬絞痛資料--kNN資料預處理+kNN分類pipeline(程式碼附詳細註釋)機器學習演算法KNN
- sklearn學習 第一篇:knn分類KNN
- 機器學習實踐篇第二篇-KNN演算法學習機器學習KNN演算法
- Bert文字分類實踐(一):實現一個簡單的分類模型文字分類模型
- PHP 無限級分類最佳實踐PHP
- 好大夫資料安全分類分級實踐探索
- 手勢識別演算法: 資料濾波演算法、資料分演算法——KNN演算法KNN
- 限流器演算法實現(JUC原子類使用實踐)演算法
- 演算法金 | 再見!!!KNN演算法KNN
- 演算法(八):圖解KNN演算法演算法圖解KNN
- 《機器學習:演算法原理和程式設計實踐》2:中文文字分類機器學習演算法程式設計文字分類
- 機器學習分享——KNN演算法及numpy實現機器學習KNN演算法
- scikit-learn中KNN演算法資料歸一化的分裝KNN演算法
- codetop演算法分類演算法
- 分類演算法-AdaBoot 演算法演算法boot
- day08
- KNN 演算法-實戰篇-如何識別手寫數字KNN演算法
- python機器學習演算法——KNN演算法Python機器學習演算法KNN
- educoder 機器學習 --- kNN演算法機器學習KNN演算法
- sklearn調包俠之KNN演算法KNN演算法
- 分類演算法-邏輯迴歸與二分類演算法邏輯迴歸
- Python底層實現KNNPythonKNN
- 分類演算法-k 鄰近演算法演算法
- 什麼是機器學習分類演算法?【K-近鄰演算法(KNN)、交叉驗證、樸素貝葉斯演算法、決策樹、隨機森林】機器學習演算法KNN隨機森林
- 湖南大學人工智慧實驗三:分類演算法實驗人工智慧演算法
- 機器學習——KNN近鄰演算法機器學習KNN演算法
- 機器學習筆記(KNN演算法)機器學習筆記KNN演算法
- OpenCV探索之路(二十八):Bag of Features(BoF)影像分類實踐OpenCV
- 技術洞察ㅣ美創科技人社資料分類分級最佳實踐
- 什麼是機器學習的分類演算法?【K-近鄰演算法(KNN)、交叉驗證、樸素貝葉斯演算法、決策樹、隨機森林】機器學習演算法KNN隨機森林
- 3.1 MYSQL分庫分表實踐MySql
- 機器學習-K近鄰演算法-KNN機器學習演算法KNN