機器學習之利用KNN近鄰算法預測數據
阿新 • • 發佈:2018-07-07
plt 部分 制圖 標簽 預測 最近鄰 特征值 learn xlsx
前半部分是簡介, 後半部分是案例
KNN近鄰算法:
簡單說就是采用測量不同特征值之間的距離方法進行分類(k-Nearest Neighbor,KNN)
優點: 精度高、對異常值不敏感、無數據輸入假定
缺點:時間復雜度高、空間復雜度高
- 1、當樣本不平衡時,比如一個類的樣本容量很大,其他類的樣本容量很小,輸入一個樣本的時候,K個臨近值中大多數都是大樣本容量的那個類,這時可能就會導致分類錯誤。改進方法是對K臨近點進行加權,也就是距離近的點的權值大,距離遠的點權值小。
- 2、計算量較大,每個待分類的樣本都要計算它到全部點的距離,根據距離排序才能求得K個臨近點,改進方法是:先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本。
適用數據範圍:
- 標稱型(離散型):標稱型目標變量的結果只在有限目標集中取值,如真與假(標稱型目標變量主要用於分類)
- 數值型:數值型目標變量則可以從無限的數值集合中取值,如0.100,42.001等 (數值型目標變量主要用於回歸分析)
工作原理:
- 訓練樣本集—>存在一個樣本數據集合,也稱作訓練樣本集,並且樣本集中每個數據都存在標簽,即我們知道樣本集中每一數據與所屬分類的對應關系。輸人沒有標簽的新數據後,將新數據的每個特征與樣本集中數據對應的特征進行比較,然後算法提取樣本集中特征最相似數據(最近鄰)的分類標簽。一般來說,我們只選擇樣本數據集中前K個最相似的數據,這就是K-近鄰算法中K的出處,通常K是不大於20的整數。 最後 ,選擇K個最相似數據中出現次數最多的分類,作為新數據的分類。
- 電影類別KNN分析(圖片來源於網絡)
- 歐氏距離(Euclidean Distance,歐幾裏得度量)
- 計算過程圖
- 案例
代碼都是在 jupyter notebook 中寫的
1 import numpy as np 2 import pandas as pd 3 from pandas import Series,DataFrame 4 import matplotlib.pyplot as plt 5 %matplotlib inline 6 # 以上導入的包都是自己習慣性導入, 因為隨時都可能會用到, 就每次先把這些都導入了 7 8#這兒是我自己寫了一個excel表格,方便快速的讀取數據, 演示使用, 就不用series或者dataframe寫了 9 film = pd.read_excel(‘films.xlsx‘,sheet_name=1) 10 #輸入film後出現表格 11 fil
1 # 電影的樣本特征 2 train=film[[‘動作鏡頭‘,‘接吻鏡頭‘]] 3 # 樣本標簽,即要預測的標簽,這兒要預測新數據是屬於什麽類別的電影 4 target=film[‘電影類別‘] 5 # 創建機器學習模型,需要導入 6 from sklearn.neighbors import KNeighborsClassifier 7 # 創建對象, 這兒的數據因為是離散型, 所以使用KNeighborsClassifier, 8 knn=KNeighborsClassifier() 9 # 對knn模型進行訓練, 傳入樣本特征 和 樣本標簽 10 # 構建函數原型、構建損失函數、求損失函數最優解 11 knn.fit(train,target) 12 knn
當輸入knn後出現如下代碼, 表示訓練完成
1 KNeighborsClassifier(algorithm=‘auto‘, leaf_size=30, metric=‘minkowski‘, 2 metric_params=None, n_jobs=1, n_neighbors=5, p=2, 3 weights=‘uniform‘)
1 # 這兒隨意寫3個樣本數據,需要按照樣本數據的維度來寫 2 cat=np.array([[5,19],[21,6],[23,24]]) 3 # cat=np.array([[21,4]]) 也可以寫1個 4 # 使用predict函數對數據進行預測 5 knn.predict(cat)
運行會出現下圖:
預測完成 ! 成功判斷出3個新樣本的歸屬類別
接下來也可以繪制圖, 直觀的查看近鄰情況
1 # scatter畫出來的是散點圖, 取數據使用 .values,二維數組中, 一維全部取出, 二維取0,表示出來就是[:,0] 2 plt.scatter(train.values[:,0],train.values[:,1]) 3 # scatter可以有一些屬性, 下邊的color可以自定義顯示的顏色 4 plt.scatter(cat[:,0],cat[:,1],color=‘red‘)
效果圖為:
在使用KNN近鄰算法時, 註意要分清楚樣本集, 樣本特征,樣本標簽
技術交流可以留言評論哦 ! 虛心學習, 不忘初心, 共同奮進 !
機器學習之利用KNN近鄰算法預測數據