本文實例講述了機器學習之KNN算法原理及Python實現方法。分享給大家供大家參考,具體如下:
文中代碼出自《機器學習實戰》CH02,可參考本站:
機器學習實戰 (Peter Harrington著) 中文版
機器學習實戰 (Peter Harrington著) 英文原版 [附源代碼]
KNN算法介紹
KNN是一種監督學習算法,通過計算新數據與訓練數據特征值之間的距離,然后選取K(K>=1)個距離最近的鄰居進行分類判(投票法)或者回歸。若K=1,新數據被簡單分配給其近鄰的類。
KNN算法實現過程
(1)選擇一種距離計算方式, 通過數據所有的特征計算新數據與已知類別數據集中的數據點的距離;
(2)按照距離遞增次序進行排序,選取與當前距離最小的k個點;
(3)對于離散分類,返回k個點出現頻率最多的類別作預測分類;對于回歸則返回k個點的加權值作為預測值;
算法關鍵
(1)數據的所有特征都要做可比較的量化
若是數據特征中存在非數值的類型,必須采取手段將其量化為數值。例如樣本特征中包含顏色,可通過將顏色轉換為灰度值來實現距離計算。
(2)樣本特征要做歸一化處理
樣本有多個參數,每一個參數都有自己的定義域和取值范圍,他們對距離計算的影響不一樣,如取值較大的影響力會蓋過取值較小的參數。所以樣本參數必須做一些scale處理,最簡單的方式就是所有特征的數值都采取歸一化處置。
(3)需要一個距離函數以計算兩個樣本之間的距離
距離的定義:歐氏距離、余弦距離、漢明距離、曼哈頓距離等,一般選歐氏距離作為距離度量,但是這是只適用于連續變量。在文本分類這種非連續變量情況下,漢明距離可以用來作為度量。通常情況下,如果運用一些特殊的算法來計算度量的話,K近鄰分類精度可顯著提高,如運用大邊緣最近鄰法或者近鄰成分分析法。
(4)確定K的值
K值選的太大易引起欠擬合,太小容易過擬合。交叉驗證確定K值。
KNN分類
分類算法常采用多數表決決定。一個缺點是出現頻率較多的樣本將會主導測試點的預測結果。解決這個缺點的方法之一是在進行分類時將K個鄰居到測試點的距離考慮進去。若樣本到測試點距離d,則選1/d為該鄰居的權重,統計k個鄰居所有類標簽的權重和,值大的就是新數據點的預測類標簽。
KNN回歸
KNN回歸是取K個鄰居類標簽值得加權作為新數據點的預測值。
優缺點
(1)KNN算法的優點
(2)KNN算法缺點
KNN實現
import numpy as np import operator import matplotlib import matplotlib.pyplot as plt from os import listdir def Create_DataSet(): group = np.array([[1.0, 1.1],[1.0,1.0],[0,0],[0,0.1]]) labels = ['A','A','B','B'] return group,labels