機器學習——KNN(K近鄰)
K近鄰(KNN)K Nearest Neighbors
~~~~~ |
有監督學習 | 無監督學習 |
---|---|---|
樣本 | 必須要有訓練集與測試樣本。在訓練集中找規律,而對測試樣本使用這種規律。 | 沒有訓練集,只有一組資料,在該組資料集內尋找規律。 |
目標 | 方法是識別事物,識別的結果表現在給待識別資料加上了標籤。因此訓練樣本集必須由帶標籤的樣本組成。 | 方法只有要分析的資料集的本身,預先沒有什麼標籤。 如果發現資料集呈現某種聚集性,則可按自然的聚集性分類,但不予以某種預先分類標籤對上號為目的。 |
(1)無監督學習是在尋找資料集中的規律性,這種規律性並不一定要達到劃分資料集的目的,也就是說不一定要“分類”。
這一點是比有監督學習方法的用途要廣。譬如分析一堆資料的主分量,或分析資料集有什麼特點都可以歸於
非監督學習方法的範疇。
(2)用非監督學習方法分析資料集的主分量與用K-L變換計算資料集的主分量又有區別。後者從方法上講不是學習方法。
因此用K-L變換找主分量不屬於無監督學習方法,即方法上不是。而通過學習逐漸找到規律性這體現了學習方法這一點。
在人工神經元網路中尋找主分量的方法屬於無監督學習方法。
~~~~~~~ |
監督學習 | 強化學習 |
---|---|---|
反饋對映 | 都會學習出輸入到輸出的一個對映,監 督式學習出的是之間的關係,可以告訴 演算法什麼樣的輸入對應著什麼樣的輸出。 | 強化學習出的是給機器的反饋 reward function,即用來判斷這個行為是好是壞。 |
反饋時間 | 做了比較壞的選擇會立刻反饋給演算法。 | 結果反饋有延時,有時候可能需 要走了很多步以後才知道以前的 某一步的選擇是好還是壞。 |
輸入特徵 | 輸入是獨立同分布的。 | 面對的輸入總是在變化,每當算 法做出一個行為,它影響下一次 決策的輸入。 |
行為模式 | 不考慮行為間的平衡,只是 exploitative。 | 一個 agent 可以在探索和開發(exploration and exploitation)之間做權衡,並且選擇一個最大的 回報。 exploration 會嘗試很多不同的事情,看它們是否 比以前嘗試過的更好。 exploitation 會嘗試過去經驗中最有效的行為。 |
一. 什麼是K近鄰
思想:只要知道你朋友(鄰居)是什麼人,就能知道你是什麼人
K近鄰是一種 懶惰的學習方法:(基於例項學習)
Lazy learners: instance-based learning
新資料來時,才開始學習給出分類
KNN 沒有訓練模型,訓練和預測結合一起
二 . K近鄰的距離度量公式
距離(distance)--衡量樣本之間的相相識度
歐式距離(平面幾何之間的距離)
曼哈頓距離(兩點之間X的距離+Y的距離:類似樓梯鋪紅毯,紅毯的長度)
閔氏距離(閔可夫斯基距離)
通用距離公式 ( 閔氏距離 )
D(X,Y)=\sqrt[p]{\sum _{i=1}^n|X_i-Y_i|^p}
當
p = 1
為曼哈頓距離:D(X,Y)={\sum _{i=1}^n|X_i-Y_i|}
當
p = 2
為歐式距離:D(X,Y)=\sqrt[]{\sum _{i=1}^n(X_i-Y_i)^2}
三. K值選擇
3.1 近似誤差(訓練集誤差)與 估計誤差(測試集誤差)
近似誤差:對現有訓練集的訓練誤差,關注訓練集,如果近似誤差過小可能會出現過擬合的現象, 對現有的訓練集能有很好的預測,但是對未知的測試樣本將會出現較大偏差的預測。 模型本身不是最接近最佳模型 估計誤差:可以理解為對測試集的測試誤差,關注測試集,估計誤差小說明對未知資料的預測能力好, 模型本身最接近最佳模型。
3.2 K值確定標準:
K值過小:k值小,特徵空間被劃分為更多子空間(模型的項越多),整體模型變複雜,容易過擬合, k值越小,選擇的範圍就比較小,訓練的時候命中率較高,近似誤差小, 而用test的時候就容易出錯,估計誤差大,容易過擬合。 K值=N: 無論輸入例項是什麼,都將簡單的預測他屬於訓練例項中最多的類
K近鄰演算法基本流程開始 指定K值 計算輸入樣本與訓練樣本之間的距離 按距離排序 篩選K個最近鄰居 投票判斷分類 結束
四 kd-tree (k-dimensional樹)
4.1 原理
一種分割k維資料空間的資料結構。應用於多維空間關鍵資料搜尋(如:範圍和最近鄰搜尋)。 kd樹是是一種二叉樹,表示對k維空間的一個劃分,構造kd樹相當於不斷地用垂直於座標軸的超平面 將K維空間切分,構成一系列的K維超矩形區域。kd樹的每個結點對應於一個k維超矩形區域。 利用kd樹可以省去對大部分資料點的搜尋,從而減少搜尋的計算量。
4.2 構造方法
(1)構造根結點,使根結點對應於K維空間中包含所有例項點的超矩形區域; (2)通過遞迴的方法,不斷地對k維空間進行切分,生成子結點。在超矩形區域上選擇一個座標軸和 在此座標軸上的一個切分點,確定一個超平面,這個超平面通過選定的切分點並垂直於選定的座標軸, 將當前超矩形區域切分為左右兩個子區域(子結點);這時,例項被分到兩個子區域 (3)上述過程直到子區域內沒有例項時終止(終止時的結點為葉結點)。在此過程中,將例項儲存在相應的結點上。 (4)通常,迴圈的選擇座標軸對空間切分,選擇訓練例項點在座標軸上的中位數為切分點, 這樣得到的kd樹是平衡的(平衡二叉樹:它是一棵空樹,或其左子樹和右子樹的深度之差的絕對值不超過1, 且它的左子樹和右子樹都是平衡二叉樹)。 注意:平衡的kd樹搜尋時的效率未必是最低的。特殊情況有時在稀疏點切
五. K近鄰演算法程式碼
sklearn.neighbors KNeighborsClassifier
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(
n_neighbors = 5,
weights = 'uniform',
algorithm = 'auto',
leaf_size = 30,
p = 2,
metric = 'minkowski',
metric_param = None,
n_jobs = 1
)
一些重要的引數:
n_neighbors --K值
weights --鄰居權重,uniform鄰居一樣大/distance距離小權重大
metric_param--距離計算公式 minkowski閔氏距離
p ---閔氏距離引數 p = 1(曼哈頓距離) p = 2(歐式距離)
六. K近鄰模型優化
6.1 K值
K過小(理論最小=1)也就是鄰居數為1,會受到噪聲資料影響,降低分類精度 K過大(理論=訓練樣本數)會受到不相關資料影響,降低分類精度 使用交叉驗證尋找最好的K值 經驗值 k = sqr(n)/2, n時訓練樣本數
6.2 選擇距離格式:
6.3 K 近鄰投票加權方法
平均加權 uniform 與鄰居一樣大 距離加權 distance 距離小權重大 用強大的 Gridsearch(網格搜尋)尋找最優引數 parameters = { 'n_neighbors':[5,10,15,20,30], 'weights':['uniform','distance'], 'p':[1,2] } knn = KNeighborsClassifier() grid_search = GridSearchCV(lnn,parameters,scoring = 'accuracy',cv = 5) grid_search.fit(x,y)
相關文章
- 機器學習-K近鄰演算法-KNN機器學習演算法KNN
- 機器學習——KNN近鄰演算法機器學習KNN演算法
- 機器學習演算法——kNN(k-近鄰演算法)機器學習演算法KNN
- K近鄰法(KNN)原理小結KNN
- 機器學習——最鄰近規則分類(K Nearest Neighbor)KNN演算法機器學習RESTKNN演算法
- 機器學習——K近鄰演算法機器學習演算法
- 機器學習-11-k近鄰演算法機器學習演算法
- 機器學習——最鄰近規則分類(K Nearest Neighbor)KNN演算法的應用機器學習RESTKNN演算法
- 機器學習_K近鄰Python程式碼詳解機器學習Python
- K近鄰模型模型
- 機器學習演算法之K近鄰演算法機器學習演算法
- 機器學習實戰筆記-k近鄰演算法機器學習筆記演算法
- 機器學習筆記1(K-近鄰演算法)機器學習筆記演算法
- 機器學習實戰2.1. 超詳細的k-近鄰演算法KNN(附Python程式碼)機器學習演算法KNNPython
- 機器學習演算法(三):K近鄰(k-nearest neighbors)初探機器學習演算法REST
- K-最近鄰法(KNN)簡介KNN
- K - 近鄰演算法演算法
- K近鄰演算法演算法
- K近鄰演算法:機器學習萌新必學演算法演算法機器學習
- k近鄰演算法python實現 -- 《機器學習實戰》演算法Python機器學習
- 機器學習演算法-K近鄰(KNN)演算法(三):馬絞痛資料--kNN資料預處理+kNN分類pipeline(程式碼附詳細註釋)機器學習演算法KNN
- 《機器學習實戰》中的程式清單2-1 k近鄰演算法(kNN)classify0都做了什麼機器學習演算法KNN
- 機器學習實戰----k值近鄰演算法(Python語言)機器學習演算法Python
- k-近鄰演算法演算法
- 用定租問題學透機器學習的K近鄰演算法機器學習演算法
- K-鄰近均值演算法演算法
- 【機器學習】機器學習建立演算法第2篇:K-近鄰演算法【附程式碼文件】機器學習演算法
- Python:K-近鄰演算法Python演算法
- 2.1 k鄰近演算法之二演算法
- 2.1 k鄰近演算法之一演算法
- 一看就懂的K近鄰演算法(KNN),K-D樹,並實現手寫數字識別!演算法KNN
- 分類演算法-k 鄰近演算法演算法
- k近鄰演算法的實現:kd樹演算法
- 什麼是機器學習分類演算法?【K-近鄰演算法(KNN)、交叉驗證、樸素貝葉斯演算法、決策樹、隨機森林】機器學習演算法KNN隨機森林
- 機器學習 第4篇:sklearn 最鄰近演算法概述機器學習演算法
- scikit-learn K近鄰法類庫使用小結
- 用Python實現K-近鄰演算法Python演算法
- 什麼是機器學習的分類演算法?【K-近鄰演算法(KNN)、交叉驗證、樸素貝葉斯演算法、決策樹、隨機森林】機器學習演算法KNN隨機森林