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)
讀出全部的數據app
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.append(img_arr) target.append(i)
樣本數據的提取dom
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)
獲取訓練數據和測試數據spa
x_train = feature[:4950] y_train = target[:4950] x_test = feature[-50:] y_test = target[-50:]
實例化模型對象,訓練code
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"
讀取模型blog
knn = joblib.load("./knn.m")
讓模型進行外部圖片的識別圖片
img_arr = plt.imread('./數字.jpg') plt.imshow(img_arr)
利用切片取值ip
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))