# knn:k-nearest neighboors
# 多用於解決分類問題
1)特點:
是機器學習中唯一乙個不需要訓練過程的演算法,可以別認為是沒有模型的演算法,也可以認為訓練資料集就是模型本身;
思想極度簡單;
應用數學知識少(近乎為零);
效果少;
可以解釋機械學習演算法使用過程中的很多細節問題
更完整的刻畫機械學習應用的流程;
2)思想:
求新樣本點在樣本空間內與所有訓練樣本的尤拉距離;
對尤拉距離排序,找出最近的k個點;
對k個點分類統計,看哪種型別的點數量最多,此型別即為對新樣本的**型別;
3)**實現過程:
# assert:表示宣告;此處對4個引數進行限定;
math模組下的sprt()方法:對數開平方;
from math importcollections模組下的counter()方法:對列表中的資料進行分類統計,生產乙個counter物件;sqrt
print(sprt(9))
#3
from collections importcounter物件的most_common()方法:counter.most_common(n),返回counter物件中數量最多的n種資料,返回乙個list,list的每個元素為乙個tuple;counter
my_list = [0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3]
(counter(my_list))
#乙個counter物件:counter()
from collections import1)k近鄰演算法的作用counter
my_list = [0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3]
votes =counter(my_list)
print(votes.most_common(2))
#[(3, 5), (2, 4)]
1、解決分類問題,而且天然可以解決多分類問題;
2、也可以解決回歸問題,其中scikit-learn庫中封裝的kneighborsregressor,就是解決回歸問題;
2)缺點
原因:如果訓練集有m個樣本,n個特徵,**每乙個新樣本,需要計算與m個樣本的距離,每計算乙個距離,要使用n個時間複雜度,則計算m個樣本的距離,使用m * n個時間複雜度;
演算法的時間複雜度:反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很好反映出演算法的優劣與否。
演算法的時間複雜度與空間複雜度,參考:演算法的時間複雜度和空間複雜度
可以通過樹結構對k近鄰演算法優化:kd-tree、ball-tree,但即便進行優化,效率依然不高;
機器學習演算法,就是通過餵給資料進行**,理論上所有機器學習演算法都是高度資料相關;
k近鄰演算法對outlier更加敏感:比如三近鄰演算法,在特徵空間中,如果在需要**的樣本周邊,一旦有兩個樣本出現錯誤值,就足以使**結果錯誤,哪怕在更高的範圍裡,在特徵空間中有大量正確的樣本;
按k近鄰演算法的邏輯:找到和**樣本比較近的樣本,就得出**樣本和其最近的這個樣本型別相同;
問題:為什麼**的樣本型別就是離它最近的樣本的型別?
很多情況下,只是拿到**結果是不夠的,還需要對此結果有解釋性,進而通過解釋推廣使用,或者製作更多工具,或者以此為基礎發現新的理論/規則,來改進生產活動中的其它方面——這些是knn演算法做不到的;
維數災難:隨著維度的增加,「看似相近」的兩個點之間的距離越來越大;
例:[0, 0, 0, ...0]和[1, 1, 1,...1],按尤拉定理計算,元素個數越多,兩點距離越大;
方案:降維(pca);
獲取原始資料:一般可從scikit-learn庫中呼叫——# 呼叫資料集的操作流程機器學習:scikit-learn中演算法的呼叫、封裝並使用自己所寫的演算法
資料分割:一般按2 :8進行分割——# 分割資料的**實現過程、通過scikit-learn庫分割資料的操作流程機器學習:訓練資料集、測試資料集
資料歸一化:參見機器學習:資料歸一化(scaler)
訓練模型、模型**:機器學習:scikit-learn中演算法的呼叫、封裝並使用自己所寫的演算法
機器學習 k 近鄰 kNN 演算法
一 基本原理 存在乙個樣本資料集合 也稱訓練樣本集 並且樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最近鄰 的分類標籤。我們一般只選擇樣本集中前k k通常是不大於20的整數 個最相似的資料,最後選擇k個...
機器學習 k近鄰演算法 kNN
knn演算法通過計算當前測試樣本與離它最近的k個點的距離,進行投票,得到它最有可能的分類結果。首先來看看機器學習演算法的基本流程 由此可見knn演算法的特點 1.k近鄰演算法是非常特殊的,可以認為是沒有模型的演算法。2.為了和其他演算法統一,可以認為訓練資料集就是模型本身。這也是scikit lea...
機器學習 k 近鄰演算法(KNN)
簡單地說,k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定。缺點 計算複雜度高 空間複雜度高。適用範圍 數值型和標稱型。對於該演算法更通俗的說法,拿到乙個資料a,計算其與資料集c中的資料的距離,通過使用特徵值進行求歐式距離。然後排序取出其前k相鄰的...