knn簡介
為了判斷未知例項的類別,以所有已知類別的例項作為
參照選擇引數k
計算未知例項與所有已知例項的距離(歐式距離)
選擇最近k個已知例項
根據少數服從多數的投票法則(majority-voting) ,讓
未知例項歸類為k個最鄰近樣本中最多數的類別
演算法缺點:
演算法複雜度較高(需要比較所有已知例項與要分類的例項)
當其樣本分佈不平衡時,比如其中一類樣本過大(例項數量
過多)佔主導的時候,新的未知例項容易被歸類為這個主導
樣本,因為這類樣本例項的數量過大,但這個新的未知例項
實際並沒有接近目標樣本
演算法實踐
首先進行資料視覺化,資料集分為a,b兩類,然後通過計算歐氏距離**未知x的類別
資料視覺化:
import matplotlib.pyplot as plt
import numpy as np
import operator
#已知類a,b的資料
x1 = np.array([3,2,1])
y1 = np.array([104,100,81])
x2 = np.array([101,99,98])
y2 = np.array([10,5,2])
scatter1 = plt.scatter(x1,y1,c='r')
scatter2 = plt.scatter(x2,y2,c='b')
#未知x
x = np.array([18])
y = np.array([90])
scatter3 = plt.scatter(x,y,c='k')
#畫圖例
plt.legend(handles=[scatter1,scatter2,scatter3],labels=['a類','b類','未知x'],loc='best')
plt.show()
knn**:
import matplotlib.pyplot as plt
import numpy as np
import operator
# 已知分類的資料
x_data = np.array([[3,104],
[2,100],
[1,81],
[101,10],
[99,5],
[81,2]])
y_data = np.array(['a','a','a','b','b','b'])
x_test = np.array([18,90])
# 計算樣本數量
x_data_size = x_data.shape[0]
# 複製x_test
np.tile(x_test, (x_data_size,1))
# 計算x_test與每乙個樣本的差值
diffmat = np.tile(x_test, (x_data_size,1)) - x_data
# 計算差值的平方
sqdiffmat = diffmat**2
# 求和
sqdistances = sqdiffmat.sum(axis=1)
# 開方
distances = sqdistances**0.5
# 從小到大排序
sorteddistances = distances.argsort()
classcount = {}
# 設定k
k = 5
for i in range(k):
# 獲取標籤
votelabel = y_data[sorteddistances[i]]
# 統計標籤數量
classcount[votelabel] = classcount.get(votelabel,0) + 1
# 得到的classcount為,也有可能多的不在前面,所以需要排序
# 根據operator.itemgetter(1)-第1個值對classcount排序,然後再取倒序
sortedclasscount = sorted(classcount.items(),key=operator.itemgetter(1), reverse=true)
# 獲取數量最多的標籤
knnclass = sortedclasscount[0][0]
**: 機器學習之KNN演算法
在幾位志同道合的小夥伴的帶領下,開始了機器學習的路程,然而一切並不是想象的那麼簡單,因此本文記錄了自己的學習路程,希望還能堅持做好這件事。knn演算法是機器學習中屬於比較簡單的演算法,容易理解和閱讀。1.knn的應用 客戶流失 欺詐偵測等 更適合於稀有事件的分類問題 2.優缺點 優點 這是乙個簡單有...
機器學習演算法之KNN
物以類聚 人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類。這裡,選用了歐氏距離,k的預設值為3,使用了sklearn提供的digits資料集來進行測試。inpu...
機器學習之kNN演算法
knn原理及實踐 1 演算法介紹 總的來說,機器學習入門的第乙個演算法是k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進...