訓練算法並對算法的准確值准確率進行估計
#導入相應模塊
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
#將所有准備的樣本加載到列表中
x = []
for i in range(10):
for j in range(1,501):
x.append(plt.imread("./data/%d/%d_%d.bmp"%(i,i,j))) #讀取數據
#對樣本數據進行操作處理
#先將列表轉化成為數組
x = np.array(x)
x.shape
#准備模型數據,並讓模型數據與樣本數據一一對應
y = [0,1,2,3,4,5,6,7,8,9]*500
y = np.array(y)
y.sort()
index = np.arange(5000)
# 將索引打亂
np.random.shuffle(index)
# 打亂數字順序,通過索引來隨機提取數據
x = x[index]
y = y[index]
# 采取訓練數據和測試數據,此時訓練數據和測試數據一一對應
x_test = x[3750:]
x_train = x[:3750]
y_train = y[:3750]
y_test = y[3750:]
#引入KNN算法
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
#想用訓練數據和訓練模型對算法進行訓練
knn.fit(x_train,y_train)
#訓練結果
"""
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=None, n_neighbors=5, p=2, weights='uniform')
"""
#用測試數據對訓練的算法進行測試算法的預測准確率
x_predict = knn.predict(x_test)
array = x_predict==y_test
#array是含有Ture和False的數組
#對於0和1的數組進行求平均值,則就是值為1的出現的概率
array.mean()
#算法准確率
0.9376
自定義驗證算法
# 加載樣本圖片
numall = plt.imread("./timg.jpg")
# plt.imshow(numall)
#對需要識別的數字進行切片,使之符合算法樣本要求(算法的訓練數據的尺寸是(28,28))
#測試數據的格式必須和算法訓練數據的樣本格式相同
num8 = numall[280:510,380:600][:,:,0]
plt.imshow(num8)
#導入算法響應模塊,對圖片尺寸進行修正
from scipy import misc
num8 = misc.imresize(num8,(28,28))
num8.shape
num8 = num8.reshape(1,-1)
knn.predict(num8)