資料分析之KNN數字識別手寫

2022-08-22 13:03:13 字數 2057 閱讀 7663

import

numpy as np

#bmp 字尾

import

matplotlib.pyplot as plt

%matplotlib inline

from sklearn.neighbors import kneighborsclassifier

提煉樣本資料

img_arr = plt.imread('

./data/3/3_100.bmp')

plt.imshow(img_arr)

讀出所有的資料

feature =

target =

for i in range(0,10):

for j in range(1,501):

img_path = '

./data/

'+str(i)+'

/'+str(i)+'

_'+str(j+1)+'

.bmp

'img_arr =plt.imread(img_path)

樣本資料的提取

feature =np.array(featrue)

target = np.array(target)

feature.shape

target.shape

#

feature是乙個三維陣列(執行將維操作)

feature = feature.reshape(5000,28*28)

feature.shape

將樣本資料打亂

np.random.seed(3)

np.random.shuffle(feature)

np.random.seed(3)

np.random.shuffle(target)

獲取訓練資料和測試資料

x_train = feature[:4950]

y_train = target[:4950]

x_test = feature[-50:]

y_test = target[-50:]

例項化模型物件,訓練

knn = kneighborsclassifier(n_neighbors=30)

knn.fit(x_train,y_train)

knn.score(x_train,y_train)

print('

**分類:

',knn.predict(x_test))

print('

真實資料:

',y_test)

模型的儲存

from sklearn.externals import

joblib

joblib.dump(knn,

"./knn.m

"

讀取模型

knn = joblib.load("

./knn.m

")

讓模型進行外部的識別

img_arr = plt.imread('

./數字.jpg')

plt.imshow(img_arr)

利用切片取值

five_arr = img_arr[95:150,85:1305]

plt.imshow(new_arr)

#

five陣列是三維的,需要進行降維,捨棄第三個表示顏色的維度

five_arr = five_arr.mean(axis=2)

five_arr.shape

import

scipy.ndimage as ndimage

five = ndimage.zoom(five_arr,zoom = (28/65,28/55))

knn.predict(five.reshape(1,784))

資料分析實戰 KNN手寫數字識別

1.演算法背景 2.sklearn介面api 3.手寫數字識別實戰 演算法背景 knn k nearest neighbor 演算法核心為 近朱者赤,近墨者黑 工作原理 1.計算待分類樣本與訓練樣本的距離 2.對距離公升序排序,選取距離待分類樣本最近的k個鄰居 3.分類 統計k個鄰居所屬的類別,並將...

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行 ...