knn也稱為k近鄰或最近鄰(nearest neighbor),從字面來理解就是根據測試樣本相對最近(屬性相對最近)的k個訓練樣本的類別來決定該測試樣本的類別(少數服從多數)。knn是一種惰性學習方法(不需要訓練模型),主要處理分類問題。有惰性學習方法,那麼也有積極學習方法,前面講到的決策樹是積極學習方法。那怎麼判斷屬性相對最近呢?其實knn演算法在尋找相對最近樣本時使用的是計算樣本屬性的距離。然後根據計算出來的距離取距離最近的k個訓練樣本,再根據這k個樣本的類別的數量來決定該測試樣本的類別。這裡起到決定性作用的是樣本個數k值,具體影響看如下圖:
左圖是k=1,則測試樣本類別為負;中間圖k=2,則測試樣本類別沒法判定;右圖k=3,則測試樣本類別是正。根據這三個圖,我們可以看出,隨著k值的變化,測試樣本的類別會發生變化。因此可以看出k值的重要性。如果k值太小,則最近鄰分類器容易受到由於訓練資料中的雜訊而產生的過分擬合的影響;如果k值太大,最近鄰分類器可能會誤分類測試樣本,因為最近鄰的k個樣本中會包含距離較遠的樣本。
資料集分為訓練集和測試集,x和y分別代表特徵向量和目標變數,乙個訓練樣本為(x,y),訓練樣本空間為(x,y)∈d,測試樣本為z=(
knn最近鄰演算法偽**:
1.設定引數,k是最近鄰樣本個數,d是訓練集;
2.for每個測試樣本z=(do
3.計算z和每個訓練樣本(x,y)∈d的距離d(
4.選擇離z最近的k個訓練樣本的集合
6.end for
其中第5步式子中的v是類標號,而 i( )是指示函式,即若
最終測試樣本類標號公式如下:
關於k值取值大小是該演算法中重點問題。一般情況,k值選取3、5、7是比較常見的,但具體選擇多少才合適,模型可靠性多大,還需要具體方法來輔助決定。
1.學習曲線
學習曲線在機器學習中非常常見,一般用於非模型判別結果引數的展示和選取,例如knn模型中k值的選取,可以通過繪製一條橫軸為1-10、縱軸為選取該k值時模型的準確率,用折線圖展示。
2.交叉驗證
學習曲線的本質是基於乙個既定的訓練集和測試集進行的,但實際上,測試集和訓練集的劃分也會影響模型的準確率,而就knn而言模型的準確率在一定程度上又會影響k值的選取,最終影響模型的建立。為了消除該影響,我們可以利用交叉驗證來判別模型判別效力。交叉驗證是首先將資料集劃分為n等分,然後選取其中乙份作為測試集,剩下的n-1份作為訓練集。首先將訓練集訓練模型,訓練完成後將測試集投入測試,得到乙個模型評估指標,接著再換另外乙份測試集,繼續訓練測試並評估。最後得到n個評估指標,取平均值,將其記為最終的模型評估指標。
機器學習經典演算法筆記 KNN
這裡面涉及到一些演算法實現的包,比如得到的每個點,求距離後怎麼處理的問題。前面求歐氏距離就不贅述了,這裡主要是補充一點求出結果後怎麼處理的問題 nearest np.argsort distances 這裡對每個距離進行排列,得出index 假設k 6的話 topx y train i for i ...
機器學習經典演算法1 knn
一 演算法簡要 物以類聚人以群分 是生活的現實寫照,knn就是讓那些距離近的人或物歸為一類。問題定義 基於給定的一些示例 事物的屬性features和該事物的分類class 對於某個特定或一系列事物的features,來對未定事物進行分類classifying。一般把給出了事物features和cl...
JAVA經典演算法四題
程式4 題目 將乙個正整數分解質因數。例如 輸入90,列印出90 2 3 3 5。程式分析 對n進行分解質因數,應先找到乙個最小的質數k,然後按下述步驟完成 1 如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出即可。2 如果n k,但n能被k整除,則應列印出k的值,並用n除以k的商,作為...