深度學習 學習筆記 之最鄰近演算法KNN(2)

2021-07-30 06:56:21 字數 2088 閱讀 3830

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...