KNN手寫數字識別

2022-09-06 05:54:09 字數 2159 閱讀 4390

import numpy as np

import matplotlib .pyplot as plt

from sklearn.neighbors import kneighborsclassifier

讀取樣本資料,

目標:0,1,2,3,4,5,6,7,8,9

feature = 

target =

for i in range(10):#i:0-9表示的是資料夾的名稱

for j in range(1,501):#j:1-500表示的是的名稱的一部分

imgpath = './data/'+str(i)+'/'+str(i)+'_'+str(j)+'.bmp'

img_arr = plt.imread(imgpath)

feature = np.array(feature) #feature是乙個三維的陣列

target = np.array(target)

feature.shape

#(5000, 28, 28)

feature目前是三維的numpy陣列。必須變形成二維的才可以作為特徵資料

feature = feature.reshape(5000,784)
進行樣本資料的打亂,並保證資料對應

np.random.seed(10)

np.random.shuffle(feature)

np.random.seed(10)

np.random.shuffle(target)

對樣本資料進行拆分

測試資料

訓練資料

knn = kneighborsclassifier(n_neighbors=9)

knn.fit(x_train,y_train)

knn.score(x_test,y_test)

#對模型進行測試

print('真實的結果:',y_test)

print('模型分類的結果:',knn.predict(x_test))

儲存訓練好的模型

from sklearn.externals import joblib

#儲存joblib.dump(knn,'./knn.m')

#讀取

knn = joblib.load('./knn.m')

knn

將外部帶入模型進行分類的測試

img_arr = plt.imread('./數字.jpg')

plt.imshow(img_arr)

剪下

eight_arr = img_arr[175:240,85:135]

plt.imshow(eight_arr)

eight_arr.shape

#(65, 50, 3)

#模型只可以測試類似於測試資料中的特徵資料

#將8對應的進行降維(65, 50, 3)降低成(784,)

eight_arr = eight_arr.mean(axis=2)

eight_arr.shape

#(65, 50)

#進行畫素的等比例壓縮

import scipy.ndimage as ndimage

eight_arr = ndimage.zoom(eight_arr,zoom=(28/65,28/50))

eight_arr = eight_arr.reshape(1,784)

eight_arr.shape

#(1, 784)

knn.predict(eight_arr)
**以及樣本資料檢視連線:

KNN手寫數字識別

以歐幾里得距離度量樣本間的相似程度。對於乙個測試樣本首先計算該樣本與每個訓練樣本間的距離,然後按距離值對訓練樣本進行公升序排序,排序後前k個樣本進行投票,即哪個標籤出現的次數多,就將測試樣例劃為該類。程式使用資料 預先將資料處理為,標籤資訊轉化為txt文件。from numpy import imp...

kNN 手寫數字識別

識別手寫的數字0 9,影象為32畫素 32畫素的黑白影象 1.將影象轉換為向量 將32 32的二進位制影象矩陣轉換為1 1024的向量。將影象轉化為向量 defimgvector filename returnvect zeros 1,1024 fr open filename 讀取檔案的前32行 ...

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

鄰近演算法,或者說k最近鄰 knn,k nearestneighbor 分類演算法是資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。下面是我學習knn演算法的思維導圖 其中距離的定義,各個距離的公式為 歐氏距離 n維空間的距...