K 近鄰演算法的Python實現(一)

2021-08-01 00:26:16 字數 2086 閱讀 1864

1.python的語言環境和參考的書籍

下面給出的**是基於python2.7.9編寫的(編譯器推薦使用pycharm),python到了3.0以後的版本語言有所改變,但是大體上沒有太大的變化。我所給出的**是引用《機器學習實戰》中的**,帶對於一些書中**沒有標註的地方進行詳細的標註。

2.使用python實現演算法

開啟python編譯器 ,建立knn.py檔案。在檔案的開頭寫入#coding= utf-8 -2- (python不支援中文釋義,加入這個可以解決這個問題)。

2.1使用python匯入資料

#coding= utf-8 -2-

from numpy import * #numpy是科學計算包

import operator #運算子模組

defcreatedataset

(): group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])

labels = ['a','a','b','b']

return group , labels

建立乙個python測試檔案knn1.py,將該檔案放入和knn.py相同的目錄中,寫入如下**

#coding= utf-8 -2-

import knn #呼叫knn模組

group , labels = knn.createdataset()

print group ,labels

輸出結果:

[[ 1. 1.1]

[ 1. 1. ]

[ 0. 0. ]

[ 0. 0.1]] [『a』, 『a』, 『b』, 『b』]

這裡的group只是簡單的建立了4個資料,每行為不同的資料組,每個陣列可以看做座標軸上的x,y的值。labels為每組資料代表的類,即如【1.0 , 1.1】為a類。

2.2編寫k近鄰演算法

k近鄰演算法的實現思想為1.計算測試資料和已知型別的資料集中的資料的距離(這裡可以看出k近鄰在測試大量資料時計算量是很大的);2.按照計算得到的每個已知資料和測試資料的距離從小到大排序;3.按照排序選取距離最小的k的資料,並計算這k個資料中每個型別出現的頻率;4.頻率最大的型別即為測試資料的型別。用歐式距離公式計算距離,在前面建立好的knn.py中寫入**:

'''定義的k—近鄰演算法**,使用歐式距離公式計算樣本點之間的距離'''

defclassify0

(inx,dataset,labels,k):

# inx為需要測試的資料,dataset為訓練樣本集,labels為標籤,k為最近鄰的數目

datasetsize = dataset.shape[0] #讀取矩陣dataset一維長度

diffmat = tile(inx,(datasetsize,1)) - dataset #此處及以下為計算樣本之間的距離

sqdiffmat = diffmat**2

sqdistances = sqdiffmat.sum(axis=1)

distances = sqdistances**0.5

sorteddistindicies = distances.argsort()

classcount = {}

for i in range(k): #此處及以下為選取樣本間距離最小的k個點

voteilabel = labels[sorteddistindicies[i]]

classcount[voteilabel] = classcount.get(voteilabel,0) + 1

sortedclasscount = sorted(classcount.iteritems(),

key=operator.itemgetter(1),reverse=true) #對k個點進行逆排序,返回頻率最高的點

return sortedclasscount[0][0]

2.3使用k近鄰演算法

在上面knn1.py中寫入**並執行:

print knn.classify0([0,0],group,labels,3)

k近鄰演算法matlab實現 K 近鄰演算法(一)

k 近鄰演算法是採用不同特徵之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定 缺點 計算複雜度高 空間複雜度高 k 近鄰演算法的一般流程 1 收集資料集 可以使用任何方法 2 準備資料集 距離計算所需要的數值,最好是結構化的資料格式 3 分析資料 可以使用任何方法 4 訓練資料集...

k近鄰演算法 python實現

k近鄰演算法 k nearest neighbor,knn 是一種非常直觀的,易於理解的有監督的演算法 對於乙個待分類的樣本,在已知的樣本集合中尋 找與它距離最近的k個樣本,及所謂的k近鄰。通過這這k個近鄰的所述類別來決定分類結果。距離度量距離度量方法有很多種,例如 歐式距離 曼哈頓距離 切比雪夫距...

k近鄰演算法 python實現

特徵距離計算 距離計算方法有很多,這裡先列三種 簡單例子 電影型別 根據歐氏距離計算公式,算出未知電影與已知電影型別之間的距離。電影名稱 打鬥鏡頭 接吻鏡頭 電影型別 歐式距離13 104愛情片 20.522 100愛情片 18.731 81愛情片 19.2 4101 10動作片 115.3599 ...