手寫數字識別 實戰 KNN演算法識別手寫數字

2021-10-12 09:39:17 字數 1847 閱讀 2311

鄰近演算法,或者說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...