鄰近演算法,或者說k最近鄰(knn,k-nearestneighbor)分類演算法是資料探勘分類技術中最簡單的方法之一。 所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。
下面是我學習knn演算法的思維導圖
其中距離的定義,各個距離的公式為:
歐氏距離
n維空間的距離:
曼哈頓距離(用在幾何空間較多)
閔科夫斯基距離(它不是乙個距離,而是一組距離的定義),對於n維空間中的兩個點x(x1,x2,...,xn)和y(y1,y2,...,yn),x和y兩點之間的閔科夫斯基距離為:
其中p代表空間的維數,當p=1時,就是曼哈頓距離,當p=2時,就是歐式距離,當
那麼兩點之間切比雪夫距離就是這兩個點座標數值差的絕對值的最大值:
max(|x1-y1|,|x2-y2|)
余弦距離實際上計算的是兩個向量的夾角,是在方向上計算兩者之間的差異,對絕對值不敏感。
knn既可以用來做分類,也可以用來做回歸。在sklearn的引用如下:
分類:from sklearn.neighbors import kneighborsclassifier
回歸:from sklearn.neighbors import kneighborsregressor
我們利用sklearn自帶的手寫數字包用knn演算法來進行識別
演算法分析流程
引入各種包
引入資料
理解資料
sklearn自帶的手寫數字資料集一共包括了1797個樣本,每幅影象都是8*8畫素的矩陣。沒有專門的測試集,因此我們需要人為地劃分訓練集和測試集。另外,因為knn演算法和距離定義相關,我們需要對資料進行規範化處理,採用z-score規範化
清洗資料
此資料不需要清洗
特徵選擇
此資料不需要特徵選擇
模型訓練和評估
得到準確率為0.9756
下面我們訓練svm,樸素貝葉斯和決策樹分類,看哪個分類器效果更好
svm
樸素貝葉斯
cart決策樹
結果得出:svm準確率最高
KNN演算法識別手寫數字
前言 從現在開始博主要開始學習機器學習了,歡迎有共同興趣的人一起學習。廢話不多說了,開始上 一 將資料集csv檔案匯入到python中,並將csv格式轉為list格式 def dataset 讀取訓練集檔案路徑 path trains1.csv os.path.abspath machinelear...
KNN演算法識別手寫數字識別集
呼叫sklearn中knn演算法庫,資料級為matlab檔案,使用matplot讀取,並進行一維化處理 from scipy.io import loadmat as load import matplotlib.pyplot as plt from sklearn.neighbors import...
KNN手寫數字識別
以歐幾里得距離度量樣本間的相似程度。對於乙個測試樣本首先計算該樣本與每個訓練樣本間的距離,然後按距離值對訓練樣本進行公升序排序,排序後前k個樣本進行投票,即哪個標籤出現的次數多,就將測試樣例劃為該類。程式使用資料 預先將資料處理為,標籤資訊轉化為txt文件。from numpy import imp...