這是machine learning in action 裡面的例子,簡單地使用knn演算法進行分類,**和資料可以在這裡找到:
因為不同的資料其絕對值可能差別很大,因此對於距離的計算會有很大的影響,因而需要對資料進行歸一化,使他們的取值都在0-1之間。
這裡簡單地認為三個維度的資料的權值都是一致的,因此都歸一化到0-1之間,如果認為有不同的權值可以做不同的處理。
歸一化公式:
new_val = (old_val - min)/(max-min)
歸一化**:
# knn.py
defauto_norm
(data_set):
# 把矩陣歸一化,yeah!,這裡可以對不同的權值進行處理嘍?
# 這裡處理是認為所有的幾個變數的權值是一致的
# 歸一化公式:new_val = (old_val - min)/(max - min)
min_vals = data_set.min(0)
max_vals = data_set.max(0) # 分別是一列中的最大值們和最小值們
ranges = max_vals - min_vals
m = data_set.shape[0]
norm_data_set = data_set - np.tile(min_vals, (m, 1))
norm_data_set = norm_data_set / np.tile(ranges, (m, 1))
return norm_data_set, ranges, min_vals
為了對分類器進行測試,我們僅僅選取其中的百分之九十的資料作為訓練集,而使用其中百分之十的資料用來測試我們實現的分類器。
分類器的**:
# knn.py
defdating_class_test
(): train_ration = 0.10
# 訓練的比例,百分之十的資料用於測試
data_matrix, data_labels = file2matrix('./data/datingtestset.txt')
norm_matrix, ranges, min_vals = auto_norm(data_matrix) # 得到歸一化之後的矩陣
m = norm_matrix.shape[0] # 資料集的總的列數
num_test_vecs = int(m * train_ration) # 用於測試的資料數目,百分之十
error_count = 0.0
# 出錯的數目
for i in range(num_test_vecs):
classify_result = classify0(norm_matrix[i], # 測試的資料,前百分之十的資料中的一列
norm_matrix[num_test_vecs:m, :], # 用於分類的資料,二維矩陣中後面的百分之九十
data_labels[num_test_vecs:m], 3) # 用於分類的類別,類別中後面的百分之九十,還有3是k
print
'the classifier came back with: %d, the real answer is: %d' % \
(classify_result, data_labels[i])
if classify_result != data_labels[i]:
error_count += 1.0
print
'the total error rate is: %f' % (error_count / float(num_test_vecs))
執行**:
# run.py
import knn
knn.dating_class_test()
改變k的取值,錯誤率大概在百分之五左右。 機器學習之KNN
knn主要應用於文字分類 聚類分析 分析 降維等 中心思想是採用測量不同特徵值之間的距離方法進行分類 演算法非常簡單,不過這是乙個監督演算法,訓練資料需要經過人工標記。演算法中心思想是 計算候選樣本到所有訓練樣本之間的距離,選取k個最近距離資料中出現次數最多的分類作為新樣本的類別。from nump...
機器學習之KNN
knn分類演算法 k nearest neighbors classification 即k近鄰演算法 給定乙個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分類到這個類中。核心思想 要確定測試樣本屬於哪一類,就尋找所有訓練樣本中與...
機器學習之KNN
以下部落格主要由兩部分構成。一是理論講解,而是 實現 因為工程上使用knn的頻率不是很高,所以 不是目的,一些 中的技巧就顯得很重要了 首先knn是什麼?k nearest neighbors knn 以下的均來自 貪心科技 不是打廣告,純粹是尊重智財權。因為便於投票分類 怎麼選擇合適的k,一般會用...