KNN演算法識別手寫數字識別集

2021-08-17 17:45:45 字數 2039 閱讀 8957

呼叫sklearn中knn演算法庫,資料級為matlab檔案,使用matplot讀取,並進行一維化處理

from scipy.io import loadmat as load

import matplotlib.pyplot as plt

from sklearn.neighbors import kneighborsclassifier as knn

import numpy as np

# 載入matlab格式資料檔案

train = load('train_32x32.mat')

test = load('test_32x32.mat')

train_samples = train['x']

train_labels = train['y']

test_samples = test['x']

test_labels = test['y']

def reformat(samples, labels):

"""改變原始資料的形狀

(高,寬,通道數,數)-> (數,高,寬,通道數)

把labers轉化為列向量

"""# 改變張量形狀資訊

samples = np.transpose(samples, (3, 0, 1, 2))

# 改變標籤資訊

labels = np.array([x[0] for x in labels])

one_hot_labels =

for num in labels:

one_hot =[0.0] * 10

if num == 10:

one_hot[0] = 1.0

else:

one_hot[num] = 1.0

labels = np.array(one_hot_labels).astype(np.float32)

return samples, labels

def normalize(samples):

"""將 0到255線性對映到 -1.0到1.0

"""samples = np.add.reduce(samples, keepdims = true, axis = 3)

samples = samples/128 - 1

return samples

def inspect(data_set, labels, i):

"""顯示第i張資料集"""

print(labels[i])

plt.imshow(data_set[i])

plt.show()

if __name__ == '__main__':

train_samples,train_labels= reformat(train_samples, train_labels)

train_samples = normalize(train_samples)

# 一維化影象

train_samples = train_samples.reshape(train_samples.shape[0], -1)

test_samples, test_labels = reformat(test_samples, test_labels)

test_samples = normalize(test_samples)

# 一維化影象

test_samples = test_samples.reshape(test_samples.shape[0], -1)

# 取100張進行**

test = test_samples[0:1000, :]

y = test_labels[0:1000, :]

knn_clf = knn(n_neighbors=5)

print(knn_clf.fit(train_samples, train_labels))

y_ = knn_clf.predict(test)

rate = (y_ == y).sum()/y_.size

print("正確率為%f"%rate)

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

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

KNN演算法識別手寫數字

前言 從現在開始博主要開始學習機器學習了,歡迎有共同興趣的人一起學習。廢話不多說了,開始上 一 將資料集csv檔案匯入到python中,並將csv格式轉為list格式 def dataset 讀取訓練集檔案路徑 path trains1.csv os.path.abspath machinelear...

KNN手寫數字識別

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