knn算法之預測數字


訓練算法並對算法的准確值准確率進行估計

#導入相應模塊

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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM