一、KNN算法簡介
1.KNN思想
(1)K-近鄰算法
-
根據你的“鄰居”來推斷你是什么類別
-
KNN算法思想:如果一個樣本在特征空間(訓練集)中的k個最相似的樣本中的大多數屬于某一個類別。則該樣本也屬于這個類別
(2)樣本相似性
-
樣本都是屬于一個任務數據集的,樣本距離越近則越相似
-
計算樣本距離
- 歐氏距離: ∑ i = 1 n ( x i ? y i ) 2 \sqrt{\sum_{i=1}^n(x_i-y_i)^2} ∑i=1n?(xi??yi?)2?
(3)分類問題處理流程
- 距離計算: 使用歐氏距離計算未知樣本到每個訓練樣本的距離
- 排序規則: 將所有訓練樣本按距離從小到大排序
- K值選擇: 選取距離最近的K個樣本(K值由程序員預先設定)
- 表決機制: 統計K個樣本中多數類別,將該類別作為未知樣本的預測結果
(4)回歸問題處理流程
- 距離計算: 使用歐氏距離計算未知樣本到每個訓練樣本的距離
- 排序規則: 將所有訓練樣本按距離從小到大排序
- K值選擇: 選取距離最近的K個樣本(K值由程序員預先設定)
- 表決機制: 對K個樣本的標簽值(目標值)取平均值,作為未知樣本預測的值
(5)K值設置
a. K值過小
- 異常值敏感:當K=1時,若最近鄰是異常值,預測結果會完全錯誤
- 模型復雜度:K值減小會使模型變復雜,容易發生過擬合
- 學習偏差:會學到訓練集中不該學的噪聲特征,如當K=1時可能錯誤學習異常點的特征
b. K值過大
- 樣本均衡問題:當K=N(訓練樣本總數)時,預測結果總是訓練集中最多的類別
- 模型簡化:K值增大會使模型變得過于簡單,導致欠擬合
c. K值選擇的經驗法則
- 二分類問題:避免選擇2的倍數(如2、4等)
- 三分類問題:避免選擇3的倍數(如3、6等)
- 五分類問題:避免選擇5的倍數
d. K值調優方法
交叉驗證網格搜索
- 通用方法:適用于所有算法的超參數調優
- 實現方式:通過交叉驗證評估不同K值表現,網格搜索尋找最優參數
- 注意事項:調優過程需考慮計算成本與模型性能的平衡
二、KNN算法API
1.KNN分類API
# 1.工具包
from sklearn.neighbors import KNeighborsClassifier# 2.數據(特征處理)
x = [[0],[1],[2],[3],[4]]
y = [0,0,1,1,1]# 3.實例化
model = KNeighborsClassifier(n_neighbors=3) # 二分類,避免設置成2的倍數# 4.訓練
model.fit(x,y)# 5.預測
print(model.predict([[5]])) # 輸出[1]
-
多維特征處理
- 特征可以是任意維度,如三維特征: X = [ [ 0 , 2 , 3 ] , [ 1 , 3 , 4 ] , [ 3 , 5 , 6 ] ] X=[[0,2,3],[1,3,4],[3,5,6]] X=[[0,2,3],[1,3,4],[3,5,6]]
- 預測時輸入特征維度必須與訓練數據一致
-
變量命名:
- 模型實例可命名為estimator或model
- 預測結果通常保存到變量如myret
-
注意事項
- 分類和回歸使用不同API,不能混用
- 輸入數據必須是二維數組格式,即使單個樣本也要用雙層括號
- 特征工程可以插入在數據準備和模型訓練之間
- 預測結果打印使用print函數查看
2.KNN回歸API
# 1.工具包
from sklearn.neighbors import KNeighborsRegressor# 2.數據(特征工程)
x = [[0],[1],[2],[3]]
y = [0.1,0.2,0.3,0.4] # 目標值是連續的# 3.實例化
model = KNeighborRegressor(n_neighbors=3)# 4.訓練
model.fit(x,y)# 5.預測
print(model.predict([[5]])) # 輸出[0.3]
三、距離度量
1.歐氏距離
∑ i = 1 n ( x i ? y i ) 2 \sqrt{\sum_{i=1}^n(x_i-y_i)^2} ∑i=1n?(xi??yi?)2?
2.曼哈頓距離
- 別稱:城市街區距離(City Block distance)
- 幾何意義:在橫平豎直的街區道路中,從一個點到另一個點需要行走的最短路徑長度
- 二維公式:點 a ( x 1 , y 1 ) a(x1,y1) a(x1,y1)與 b ( x 2 , y 2 ) b(x2,y2) b(x2,y2)間距離為 d 12 = ∣ x 1 ? x 2 ∣ + ∣ y 1 ? y 2 ∣ d_{12}=|x_1-x_2|+|y_1-y_2| d12?=∣x1??x2?∣+∣y1??y2?∣
- n維公式: d = ∑ n ∣ x i ? x j ∣ d=\sum^n|x_i-x_j| d=∑n∣xi??xj?∣
- 計算原理:對應坐標相減取絕對值后求和
3.切比雪夫距離
-
計算公式: 二維平面兩點 a ( x 1 , y 1 ) a(x_1,y_1) a(x1?,y1?)與 b ( x 2 , y 2 ) b(x_2,y_2) b(x2?,y2?)間的切比雪夫距離為
d 12 = max ? ( ∣ x 1 ? x 2 ∣ , ∣ y 1 ? y 2 ∣ ) d_{12} = \max(|x_1 - x_2|, |y_1 - y_2|) d12?=max(∣x1??x2?∣,∣y1??y2?∣)
-
移動特性: 相比只能沿 x y xy xy方向走的曼哈頓距離,切比雪夫距離允許沿45度對角線方向移動,這是其核心改變。
4.閔可夫斯基距離
-
-
統一形式:可將歐氏距離和曼哈頓距離統一為閔可夫斯基距離
d 12 = ∑ k = 1 n ∣ x 1 k ? x 2 k ∣ p p d_{12} = \sqrt[p]{\sum_{k=1}^n |x_{1k}-x_{2k}|^p} d12?=p∑k=1n?∣x1k??x2k?∣p?
-
參數關系:
- 當 p = 1 p=1 p=1時為曼哈頓距離
- 當 p = 2 p=2 p=2時為歐氏距離
- 當 p → ∞ p\to\infty p→∞時為切比雪夫距離
-
5.其他距離
余弦距離、馬式距離(不通用)
四、特征預處理
1.原因
當特征的單位或大小相差較大,或某特征的方差比其他特征大出幾個數量級時,會影響(支配)目標結果,使模型無法有效學習其他特征。
2.歸一化
-
定義:將原始數據通過線性變換映射到指定范圍(默認[0,1])的方法。
-
基本公式: ? X ′ = x ? min ? max ? ? min ? ?X^{\prime} = \frac{x - \min}{\max - \min} ?X′=max?minx?min?
-
擴展公式:若需映射到 [ m i , m x ] [mi,mx] [mi,mx]范圍,則
X ′ ′ = X ′ ? ( m x ? m i ) + m i X^{\prime\prime} = X^{\prime} * (mx - mi) + mi X′′=X′?(mx?mi)+mi
-
特點與適用場景
- 異常值敏感:受最大值最小值影響大,若存在異常值(如年齡特征出現200歲)會顯著影響歸一化結果。
- 適用場景:適合取值范圍固定且無異常值的數據(如圖像像素值固定為0-255)。
- 不適用場景:不適合大規模數據或存在異常值的情況。
-
API
# 1.導入工具包
from sklearn.preprocessing import MinMaxScaler# 2.數據(只有特征)
x = [[90,2,10,40],[60,4,15,45],[75,3,13,46]]# 3.實例化
process = MinMaxScaler()# 4.fit_transform處理
data = process.fit_transform(x)
3.標準化
-
通過對原始數據進行標準化,轉換為均值為0,標準差為1的標準正態分布的數據
-
公式: x ′ = x ? m e a n σ x^{\prime}=\frac{x-mean}{\sigma} x′=σx?mean?( σ 為特征的標準差 \sigma為特征的標準差 σ為特征的標準差)
-
少量的異常值對于平均值的形象并不大,魯棒性更強,優先選擇
-
API
# 1.導入工具包
from sklearn.preprocessing import StandardScaler# 2.數據(只有特征)
x = [[90,2,10,40],[60,4,15,45],[75,3,13,46]]# 3.實例化
process = StandardScaler()# 4.fit_transform處理
data = process.fit_transform(x)print(data)
print(process.mean_)
print(process.var_)
五、超參數選擇
1.交叉驗證
- 核心思想: 將訓練集劃分為n份,每次取1份作為驗證集,其余n-1份作為訓練集,循環n次
- 驗證集作用: 與測試集功能相同,用于評估模型效果
- 折數命名: 根據劃分份數稱為n折交叉驗證(如4份即四折交叉驗證)
- 評估方式: 取多次驗證結果的平均值作為最終模型評分,比單次劃分更可靠
2.網格搜索
- 產生背景: 模型存在多個需人工設置的超參數(如KNN的k值),不同參數組合效果差異大
- 工作原理:
- 預設參數候選值(如k=3,4,5,6)
- 對每個參數組合進行交叉驗證評估
- 自動選擇最優參數組合(如k=5時準確率86%最高)
- 優勢特點: 避免手動調參的低效,自動完成參數組合、訓練、評估全流程
3.聯系
- 關鍵區別:
- 交叉驗證是數據集劃分方法
- 網格搜索是參數優化工具
- 最佳實踐: 兩者結合使用可形成完整的模型調優方案
- 注意事項: 僅對需要人工設置的超參數使用該方法,模型自動學習的參數不適用