1. K-近鄰算法####
k-近鄰算法(k Nearest Neighbor),是最基本的分類算法便瑟,其基本思想是采用測量不同特征值之間的距離方法進行分類。
2. 算法原理####
存在一個樣本數(shù)據(jù)集合(訓(xùn)練集)贰健,并且樣本集中每個數(shù)據(jù)都存在標簽(即每一數(shù)據(jù)與所屬分類的關(guān)系已知)贱勃。輸入沒有標簽的新數(shù)據(jù)后,將新數(shù)據(jù)的每個特征與樣本集中數(shù)據(jù)對應(yīng)的特征進行比較(計算距離)蜀细,然后提取樣本集中特征最相似數(shù)據(jù)(最近鄰)的分類標簽舟铜。一般會取前k個最相似的數(shù)據(jù),然后取k個最相似數(shù)據(jù)中出現(xiàn)次數(shù)最多的標簽(分類)最后新數(shù)據(jù)的分類奠衔。
因此谆刨,這是一個很“懶惰”的算法,所謂的訓(xùn)練數(shù)據(jù)并沒有形成一個“模型”归斤,而是一個新的數(shù)據(jù)需要分類了痊夭,去和所有訓(xùn)練數(shù)據(jù)逐一比較,最終給出分類脏里。這個特征導(dǎo)致在數(shù)據(jù)量較大時她我,性能很差勁。
3. 算法過程####
對未知類別屬性的數(shù)據(jù)集中的每個點依次執(zhí)行以下操作:
1)計算已知類別數(shù)據(jù)集中的點與當前點之間的距離(歐式距離膝宁、曼哈頓距離或者余弦夾角等各種距離算法鸦难,具體情況具體分析用哪種);
2)按照距離遞增次序排序员淫;
3)選取與當前點距離最小的k個點合蔽;
4)確定前k個點所在類別的出現(xiàn)頻率;
5)返回前k個點出現(xiàn)頻率最高的類別作為當前點的預(yù)測分類介返。
歐氏距離計算:
- 二維平面上兩點A(x1,y1)與B(x2,y2)間的歐氏距離:
- 三維空間兩點A(x1,y1,z1)與B(x2,y2,z2)間的歐氏距離:
- n維空間兩點的歐式距離以此類推
4. 計算案例####
我還是瞎編一個案例拴事,下表有11個同學(xué)的小學(xué)成績和12年后讀的大學(xué)的情況,現(xiàn)在已知“衛(wèi)”同學(xué)的小學(xué)成績了圣蝎,可以根據(jù)kNN來預(yù)測未來讀啥大學(xué)刃宵。
逐一計算各位同學(xué)與衛(wèi)同學(xué)的距離,然后我們選定3位(即這里的k=3)最為接近的同學(xué)徘公,推測衛(wèi)同學(xué)最終的大學(xué)
3位同學(xué)中2個清華牲证,1個北郵,所以衛(wèi)同學(xué)很有可能在12年后上清華关面。
5. 算法要點####
1) K的選擇坦袍,一般不超過訓(xùn)練集數(shù)量的平方根
2)距離更近的近鄰也許更應(yīng)該決定最終的分類十厢,所以可以對于K個近鄰根據(jù)距離的大小設(shè)置權(quán)重,結(jié)果會更有說服力
3)如果采用歐氏距離計算捂齐,不同變量間的值域差距較大時蛮放,需要進行標準化,否則值域較大的變量將成為最終分類的唯一決定因素