一、KNN 簡介
KNN:K-近鄰算法 (K Nearest Neighbor)
算法思想:一個樣本最相似的 k 個樣本中的大多數屬于某一個類別,則該樣本也屬于這個類別
距離計算:歐氏距離
二、KNN 解決兩類問題
分類問題與回歸問題
分類流程:
- 計算未知樣本到每一個訓練樣本的距離
- 將訓練樣本根據距離大小升序排列
- 取出距離最近的 K 個訓練樣本
- 進行多數表決,統計 K 個樣本中哪個類別的樣本個數最多
- 將未知的樣本歸屬到出現次數最多的類別
回歸流程:
- 計算未知樣本到每一個訓練樣本的距離(歐式距離:對應維度差值的平方和 開平方根)
- 將訓練樣本根據距離大小升序排列
- 取出距離最近的 K 個訓練樣本
- 把這個 K 個樣本的目標值計算其平均值
- 作為將未知的樣本預測的值
其中K值的選擇:需要一些方法來尋找這個最合適的K值 交叉驗證、網格搜索
- K值過小?,過擬合,容易受到異常點的影響,整體模型變得復雜
- K值過大 ,欠擬合,整體的模型變得簡單
三 、KNN算法API的使用
首先機器學習的開發環境,安裝:基于Python的 scikit-learn 庫
分類問題與回歸問題
分類問題
'''
分類問題
KNN算法 代碼實現步驟1:導包2:創建模型對象3:準備訓練集4:準備測試集5:模型訓練6:模型預測,并打印結果
'''
# 1:導包
from sklearn.neighbors import KNeighborsClassifier
#2:創建模型對象
estimator = KNeighborsClassifier(3)
#3、準備訓練集 列表嵌套 二維 [樣本數量,特征數量]
#外層列表 樣本數 4個
#內層列表 特征數量 1列
x_train = [[0], [1], [2], [3]]
#一維的 [樣本數量] 4個
y_train = [0, 0, 0, 1]
#4、準備測試集 易錯點2:注意這里x_test是二維的
x_test = [[4]]
#5、模型訓練
#參1:訓練集特征 參2:訓練集標簽
estimator.fit(x_train, y_train)
#6、模型預測
y_test = estimator.predict(x_test)
#打印結果
print(y_test)
回歸問題
'''回歸問題'''
#1、導包
from sklearn.neighbors import KNeighborsRegressor
#2、創建模型(算法)對象 注意!!這里是回歸問題
estimator = KNeighborsRegressor(2)
#3、準備訓練集
x_train = [[0, 0, 1],[1, 1, 0],[3, 10, 10],[4, 11, 12]]
y_train = [0.1, 0.2, 0.3, 0.4]
#4、測試集(x_test)
x_test = [[3, 11, 10]]
#5、模型訓練
estimator.fit(x_train, y_train)
#6、模型預測(y_test)
y_test = estimator.predict(x_test)
#打印結果
print(y_test)