1、cover和hart在2023年提出了最初的鄰近演算法
2、knn 演算法的核心思想是如果乙個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。
3、類別決策時,只與極少量的相鄰樣本有關。
4、距離的測量方法:
euclidean distance歐式距離
cos距離
相關度
manhattan distance曼哈頓距離
5、缺陷:
需要大量空間儲存所有已知例項
演算法複雜度高
樣本分佈不均時,比如其中一類樣本過大(例項數量過多)佔主導樣本,因為這類樣本例項的數量過大,但這個新的未知例項實際並不接近目標樣本。
6、改進:
考慮距離,根據距離加上權重
比如:1/d(d:距離)
7、應用
(資料集)虹膜:150個例項,萼片長度(sepal length)、萼片寬度(sepal width)、花瓣長度(petal length)、花瓣寬度(petal width)
利用python 的機器學習庫sklearn:sklearnexample.py
import csv
import rangdom
import math
import operator
def euclideandistance(instance1,instance2.length)#length表示維度
distance = 0
for x in range(length):
diatance += pow((instance1[x]-instance2[x]),2)
return math.sqrt(diatance)
def getrespons(neighbors):
classvotes =
for x in range(len(neighbors)):
response = neighbors[x][-1]
if response in classvotes:
classvotes[response] += 1
else:
classvotes[response]=1
sortvotes = sorted(classvotes.iteritems(), key=operater.itemgetter(1), reverse=true)
return sortvotes[0][0]
def getaccuracy(testset, predictions):
correct = 0
for x in range(len(testset)):
if testset[x][-1] == predictions[x]:
correct += 1
return (correct/(len(testset))) * 100
def main():
trainingset=
testset=
split=0.67
loaddataset(r』資料集所在目錄』,split, trainingset, testset)
print(『train set:』 + repr(trainingset))#列印訓練集
print(『test set:』 + repr(testset)) #列印測試集
pridictions =
k=3for x in range(len(testset)):
neighbors = getneighbors(trainingset, testset[x], k)
result = getrespons(neighbors)
print('>predicted=' + repr(result) + 'actual=' + repr(testset[x][-1]))
accuracy = getaccuracy(testset,predictions)
print('accuracy:' + repr(accuracy) + '%')
main() k 鄰近演算法學習筆記
目錄 採用測量不同特徵值之間的距離進行分類。缺點 適用範圍 工作原理 usr bin env python coding utf 8 from numpy import import matplotlib import matplotlib.pyplot as plt k 近鄰演算法 defclas...
機器學習實戰筆記(k鄰近演算法)
1.k鄰近演算法原理 k鄰近演算法通過計算不同特徵值間的距離進行分類 存在乙個樣本資料集合,也稱為訓練樣本集,樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將輸入資料中的每個特徵值和訓練樣本集進行比較,然後選出特徵最相似的資料集的標籤作為輸入資料集標籤。一般來說我們選取訓練樣本集中前k個相似資...
k 鄰近演算法學習
coding utf 8 from numpy import import operator def createdataset group array 1.0,1.1 1.0,1.0 0,0 0,0.1 labels a b c d return group,labels def classify...