機器學習1 KNN文字分類

2021-07-27 00:13:20 字數 1802 閱讀 1759

思想

1.找到與資料最相近k個資料(根據余弦相似度)

2.分別找出k條資料的類別,同類別相加,得到最大值,則該類別為測試資料的所屬類。

**

# encoding=utf-8

from pylab import *

reload(sys)

defcreatedataset

(): group = [[1.0, 1.1], [2.0, 2.1], [1.1, 1.2], [2.2, 2.2]]

label = ['a', 'b', 'a', 'b']

return group, label

definit

(testdata, k):

dataset, labels = createdataset()

fg = plt.figure()

ax = fg.add_subplot(111)

index = 0

for point in dataset:

if (labels[index] == 'a'):

plt.scatter(point[0], point[1])

plt.an

elif (labels[index] == 'b'):

plt.scatter(point[0], point[1])

index += 1

res = classify(testdata, dataset, labels, k)

plt.scatter(testdata[0][0],testdata[0][1])

print res+" pppppp"

plt.show()

# 余弦距離

defcosdistance

(vector1, vector2):

return dot(vector1, vector2) / (linalg.norm(vector1) * linalg.norm(vector2))

defclassify

(testdata, trainset, listclasses, k):

res = array(zeros(k))

reslabel = array(zeros(k))

for label, data in enumerate(trainset):

for tdata in testdata:

dis = cosdistance(tdata, data)

for index, d in enumerate(res):

if dis < d:

res[index] = dis

reslabel[index] = listclasses[label]

freslabel = array(zeros(len(listclasses)))

for index, cl in enumerate(listclasses):

for fcl in reslabel:

if cl == fcl:

freslabel[index] += 1

maxvalue = freslabel[0]

maxindex = 0

for index,val in enumerate(freslabel):

if val > maxvalue:

maxindex = index

return listclasses[maxindex]

if __name__ == '__main__':

init([[1.5,1.3]],3)

`

機器學習演算法(1) KNN

k nearest neighbor algorithm 右圖中,綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?如果k 3,由於紅色三角形所佔比例為2 3,綠色圓將被賦予紅色三角形那個類,如果k 5,由於藍色四方形比例為3 5,因此綠色圓被賦予藍色四方形類。k最近鄰 k nearest ne...

機器學習經典演算法1 knn

一 演算法簡要 物以類聚人以群分 是生活的現實寫照,knn就是讓那些距離近的人或物歸為一類。問題定義 基於給定的一些示例 事物的屬性features和該事物的分類class 對於某個特定或一系列事物的features,來對未定事物進行分類classifying。一般把給出了事物features和cl...

1 KNN 學習筆記

k near neighbor 優點 缺點 計算複雜度高,空間複雜度高 一般演算法流程 1 收集 準備和分析資料 2 訓練資料 不適用 knn 演算法 3 測試資料 4 使用演算法 準備 createdataset knn 分類演算法的流程 5 classify0 file2matrix 準備資料 ...