手寫數字識別的k 近鄰演算法實現

2022-08-03 11:39:16 字數 680 閱讀 3784

前言手寫字元識別是機器學習的入門問題,k-近鄰演算法(knn演算法)是機器學習的入門演算法。本文將介紹k-近鄰演算法的原理、手寫字元識別問題分析、手寫字元識別的knn實現、測試。

knn演算法原理

knn演算法是一種分類演算法,即如何判定一組輸入資料屬於哪一類別的演算法。knn屬於監督學習演算法,必須給定訓練樣本,樣本包括輸入樣本和輸出樣本。而無監督學習則不需要訓練樣本。

那麼最簡單的分類方法就是將輸入資料與樣本一一比對,並將相似性最強的前k個樣本選出,這k個樣本中的大多數屬於哪一類別,則判定輸入資料屬於該類別。

從圖形上看,就是找出了樣本空間中與輸入資料最近的k個資料,這些資料中的大多數屬於哪個類別,則輸入資料也屬於該類別。(當然,這是演算法的原理,從邏輯上看問題不大,但是這個輸入資料是否應該和它的k個近鄰屬於同一類卻是不得而知的,但作為乙個入門演算法不考慮這種情況。)

手寫數字識別分析

演算法實現

測試

上圖展示了程式執行結果,在測試時共產生了12個錯誤輸出,錯誤率為1.27%。

結語knn演算法是種簡單、有效的演算法,但是該演算法必須儲存訓練資料集,如果訓練資料集很大,則會占用很多儲存空間。演算法的時間複雜度和空間複雜度都並不令人滿意,因此簡單有效的演算法往往會犧牲效率,程式設計師的自我犧牲換來高效的演算法。

手寫識別系統(k 近鄰演算法)

k 近鄰演算法 knn 是機器學習中乙個相對比較簡單的演算法。該演算法在訓練集中資料和標籤已知的情況下,輸入測試資料,將測試資料的特徵與訓練集中對應的特徵進行相互比較 比如通過歐氏距離 找到訓練集中與之最為相似的前k個資料,則該測試資料對應的類別就是k個資料中出現次數最多的那個分類,其演算法的描述為...

k 近鄰演算法 手寫識別系統

手寫數字是32x32的黑白影象。為了能使用knn分類器,我們需要把32x32的二進位制影象轉換為1x1024 from numpy import 匯入科學計算包numpy和運算子模組operator import operator from os import listdir def img2vec...

機器學習實戰 使用K 近鄰演算法識別手寫數字

每張都是32畫素x32畫素 def img2vector filename 將32x32的影象轉化為1x1024的向量 param filename return return vect zeros 1,1024 fr open filename for i in range 32 用for lin...