《機器學習實戰》第2章k-近鄰演算法之識別手寫數字
import numpy as np
from os import listdir #用於獲取資料夾下的檔名
#對目標元素進行分類
defclassify0
(x, dataset, labels, k)
: size = dataset.shape[0]
dis = np.sqrt(np.
sum(np.square(dataset-x)
, axis=1)
)#差值後平方、求和、開方
sort_index = np.argsort(dis)
#按照距離排序,返回的是排序後的索引
label_count =
for i in
range
(k):
label = labels[sort_index[i]
] label_count[label]
= label_count.get(label,0)
+1sort_label =
sorted
(label_count.items(
), key=
lambda d: d[1]
, reverse=
true
)#按照標籤出現次數進行排序
return sort_label[0]
[0]#將32*32的二進位制影象矩陣轉換為1*1024的向量
defdigvector
(filename)
: vect = np.zeros((1
,1024))
f =open
(filename)
for i in
range(32
):lines = f.readline(
)for j in
range(32
):vect[0,
32*i+j]
=int
(lines[j]
)return vect
defclassifydigits()
: trainlist = listdir(
'trainingdigits'
)#獲取資料夾下檔案的名稱
ntrain =
len(trainlist)
train_x = np.zeros(
(ntrain,
1024))
train_y =
for i in
range
(ntrain)
: filename = trainlist[i]
train_x[i,:]
= digvector(
'trainingdigits/%s'
%filename)
int(filename.split(
'.')[0
].split(
'_')[0
]))#解讀檔名,獲取元素的類別,如0_24.txt,表示類別為0
testlist = listdir(
'testdigits'
) ntest =
len(testlist)
error_count =
0for i in
range
(ntest)
: filename = testlist[i]
label =
int(filename.split(
'.')[0
].split(
'_')[0
])test = digvector(
'testdigits\%s'
%filename)
result = classify0(test, train_x, train_y,3)
print
('predict: %d, real: %d'
%(result, label)
)if result != label: error_count +=
1print
('the error rate: '
, error_count/
float
(ntest)
)
儲存空間開銷大
無法給出任何資料的基礎結構資訊,無法知曉平均例項樣本和典型例項樣本的特徵
機器學習實戰 KNN演算法(K近鄰)
演算法實現 演算法應用舉例 k近鄰演算法是機器學習最簡單的演算法之一,也是機器學習的初步,其主要通過大量的資料分析,判斷一組未知資料和各資料的距離,從而對一組未知資料進行相應的歸類。而所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。所以knn演算法並不是十分完...
《機器學習實戰》 k近鄰分類演算法kNN
knn全稱為k nearest neighbors,是模式識別中比較簡單的一種演算法,可以用於分類和回歸。使用時,輸入的訓練樣本帶有標籤,輸出根據是用於分類還是回歸 分類問題的輸出為 找出k個和要 物件最近鄰的樣本,這k個樣本中,大多數 屬於哪一類即為 物件的分類標籤。回歸問題的輸出為 找出k個和回...
機器學習之 K近鄰演算法(KNN)
k近鄰演算法是機器學習中的最基礎的演算法之一,也是必須會講解的演算法之一。因為其簡單,易懂。但是k近鄰演算法在實際應用中卻很少使用到,由於其侷限性很強,執行效率低下。那麼所謂的k近鄰中的近鄰是指 已有乙個訓練資料集,現給定乙個新的資料,利用現有資料集對其進行 那麼 方法便是尋找與給定資料距離最近的k...