機器學習之k 近鄰演算法(一)kNN分類演算法

2021-09-29 16:44:02 字數 1680 閱讀 5844

採用python3.7,需要安裝numpy庫

演算法的邏輯如下:

1.計算已知分類資料集中的點與輸入點之間的距離

2.根據距離遞增排序

3 選擇與輸入點距離最小的k個點

4 確認前k個點所在分類的出現頻率

5 返回前k個點出現頻率最高的分類作為輸入點的**分類

資料集:

[[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]
['a','a','b','b']
輸入:[1.2,0]

輸出:a

輸入:[1.5,1]

輸出:a

輸入:[0,0.5]

輸出:b

下面是原始碼:

from numpy import *

import operator

'''knn分類演算法

出現問題

attributeerror: 'dict' object has no attribute 'iteritems'

python3.5中:iteritems變為items

'''def createdataset():

#建立資料集

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

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

return group,labels

#print(group)

#print(labels)

def classify0(intx,dataset,labels,k):

#距離計算

datasetsize = dataset.shape[0]

diffmat = tile(intx,(datasetsize,1))-dataset

sqdiffmat = diffmat**2

sqdistances = sqdiffmat.sum(axis=1)

distances = sqdistances**0.5

sorteddistindicies = distances.argsort()

#選擇距離最小的k個點

classcount = {}

for i in range(k):

voteilabel = labels[sorteddistindicies[i]]

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

#排序sortedclasscount = sorted(classcount.items(),key=operator.itemgetter(1),reverse=true)

return sortedclasscount[0][0]

group,labels = createdataset()

print("輸入:[1.2,0]")

print("輸出:"+classify0([1.2,0],group,labels,3))

print("輸入:[1.5,1]")

print("輸出:"+classify0([1.5,1],group,labels,3))

print("輸入:[0,0.5]")

print("輸出:"+classify0([0,0.5],group,labels,3))

機器學習之 K近鄰演算法(KNN)

k近鄰演算法是機器學習中的最基礎的演算法之一,也是必須會講解的演算法之一。因為其簡單,易懂。但是k近鄰演算法在實際應用中卻很少使用到,由於其侷限性很強,執行效率低下。那麼所謂的k近鄰中的近鄰是指 已有乙個訓練資料集,現給定乙個新的資料,利用現有資料集對其進行 那麼 方法便是尋找與給定資料距離最近的k...

機器學習 k 近鄰 kNN 演算法

一 基本原理 存在乙個樣本資料集合 也稱訓練樣本集 並且樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最近鄰 的分類標籤。我們一般只選擇樣本集中前k k通常是不大於20的整數 個最相似的資料,最後選擇k個...

機器學習 k近鄰演算法 kNN

knn演算法通過計算當前測試樣本與離它最近的k個點的距離,進行投票,得到它最有可能的分類結果。首先來看看機器學習演算法的基本流程 由此可見knn演算法的特點 1.k近鄰演算法是非常特殊的,可以認為是沒有模型的演算法。2.為了和其他演算法統一,可以認為訓練資料集就是模型本身。這也是scikit lea...