001 KNN分類 最鄰近演算法

2022-07-23 07:39:09 字數 3143 閱讀 7562

2 **

# -*- coding: utf-8 -*-

import math

import csv

import random

import operator

'''@author:hunter

@time:2017.03.31

'''class knearestneighbor(object):

def __init__(self):

pass

def loaddataset(self,filename, split, trainingset, testset): # 載入資料集 split以某個值為界限分類train和test

with open(filename, 'r') as csvfile:

lines = csv.reader(csvfile) #讀取所有的行

dataset = list(lines) #轉化成列表

for x in range(len(dataset)-1):

for y in range(4):

dataset[x][y] = float(dataset[x][y])

if random.random() < split: # 將所有資料載入到train和test中 生成0和1的隨機浮點數

else:

def calculatedistance(self,testdata, traindata, length): # 計算距離

distance = 0 # length表示維度 資料共有幾維

for x in range(length):

distance += pow((testdata[x]-traindata[x]), 2)

return math.sqrt(distance)

def getneighbors(self,trainingset, testinstance, k): # 返回最近的k個邊距

distances =

length = len(testinstance)-1

for x in range(len(trainingset)): #對訓練集的每乙個數計算其到測試集的實際距離

dist = self.calculatedistance(testinstance, trainingset[x], length)

print('訓練集:{}-距離:{}'.format(trainingset[x], dist))

distances.sort(key=operator.itemgetter(1)) # 把距離從小到大排列

neighbors =

for x in range(k): #排序完成後取前k個距離

print(neighbors)

return neighbors

def getresponse(self,neighbors): # 根據少數服從多數,決定歸類到哪一類

classvotes = {}

for x in range(len(neighbors)):

response = neighbors[x][-1] # 統計每乙個分類的多少

if response in classvotes:

classvotes[response] += 1

else:

classvotes[response] = 1 # 初始值為1

print(classvotes.items())

sortedvotes = sorted(classvotes.items(), key=operator.itemgetter(1), reverse=true) #reverse按降序的方式排列

return sortedvotes[0][0]

def getaccuracy(self,testset, predictions): # 準確率計算

correct = 0

for x in range(len(testset)):

if testset[x][-1] == predictions[x]: #predictions是**的和testset實際的比對

correct += 1

print('共有{}個**正確,共有{}個測試資料'.format(correct,len(testset)))

return (correct/float(len(testset)))*100.0

def run(self):

trainingset =

testset =

split = 0.75

self.loaddataset(r'testdata.txt', split, trainingset, testset) #資料劃分

print('train set: ' + str(len(trainingset)))

print('test set: ' + str(len(testset)))

#generate predictions

predictions =

k = 3 # 取最近的3個資料

# correct =

for x in range(len(testset)): # 對所有的測試集進行測試

neighbors = self.getneighbors(trainingset, testset[x], k) #找到3個最近的鄰居

result = self.getresponse(neighbors) # 找這3個鄰居歸類到哪一類

# print('predictions: ' + repr(predictions)) 返回乙個它在python中的描述

# print('>predicted=' + repr(result) + ', actual=' + repr(testset[x][-1]))

# print(correct)

accuracy = self.getaccuracy(testset,predictions)

print('accuracy: ' + repr(accuracy) + '%')

if __name__ == '__main__':

a = knearestneighbor()

a.run()

k最鄰近演算法 加權kNN

上篇文章中提到為每個點的距離增加乙個權重,使得距離近的點可以得到更大的權重,在此描述如何加權。該方法最簡單的形式是返回距離的倒數,比如距離d,權重1 d。有時候,完全一樣或非常接近的商品權重會很大甚至無窮大。基於這樣的原因,在距離求倒數時,在距離上加乙個常量 weight 1 distance co...

機器學習分類篇 最鄰近規則分類KNN

最鄰近規則分類演算法 k nearest neighbor cover和hart在1968年提出了最初的鄰近演算法,也被稱為基於例項的學習或懶惰學習,與決策樹演算法相比,處理訓練集的時候並不建立任何模型,進行分類時才將測試樣例和所有已知例項進行比較進而分類。如上圖,主要有兩種色塊,藍色方塊和紅色三角...

knn鄰近演算法

knn演算法即為k鄰近演算法,是一種監督式的機器學習演算法,且它是用來進行分類的。注意此演算法需要和 k means演算法進行區別,因為都有個k。工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,且樣本集中每個資料都存在標籤,知道樣本集中與所屬分類的對應關係。輸入沒有定義的新資料後,將新資料的每個...