機器學習之Knn演算法2

2021-08-14 05:33:39 字數 2859 閱讀 5533

寫了knn演算法以後,再寫乙個二,

一的連線

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

#import math

import random

import operator

import csv

import numpy as np

defloaddataset

(filename,split,trainingset = ,testset = ):

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

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

dataset = list(lines) #轉換為列表

for x in range(len(dataset)-1): #轉化為csv後多出來乙個空,所以要-1

for i in range(4):

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

if random.random() #隨機分割訓練集和測試集

else:

return trainingset,testset

# loaddataset('irisdata.txt',0.5,trainingset = ,testset = )

# 返回兩個例項之間的距離

defeuclideandistance

(instance1,instance2):

n = len(instance1)-1

instance1 = np.array(instance1[:n])

instance2 = np.array(instance2[:n])

distance = (instance2-instance1)**2

distances = distance.sum(axis = 0)

return math.sqrt(distances)

#返回k個最近的例項集合

defgetneaborhod

(testset,trainset,k):

distances =

for i in range(len(trainset)):

distance = euclideandistance(testset,trainset[i])

distances = np.array(distances) #轉化為np.array()型別,為了方便使用argsort,返回從小到大的元素的下標

distancessort = distances.argsort()

neighbors =

for x in range(k):

return neighbors #返回最近的k個物件

#找到最近的label

defgetresponse

(neighbors):

classvotes = {}

for x in range(len(neighbors)):

label = neighbors[x][-1]

classvotes[label] = classvotes.get(label,0)+1

result = sorted(classvotes.iteritems(),key = operator.itemgetter(1),reverse=true)

return result[0][0]

defmain

(): trainset,testset = loaddataset('irisdata.txt',0.8,trainingset = ,testset = ) #80作為訓練集

print

'trainset1',len(trainset)

print

'testset1',len(testset)

n = 0.0

for i in range(len(testset)):

test = testset[i]

neighbor = getneaborhod(test,trainset,3)

predict = getresponse(neighbor)

if predict == test[-1]:

n = n+1

allset = float(len(testset))

result = n/allset

print result

trainset,testset = loaddataset('irisdata.txt',0.8,trainingset = ,testset = )

print

'trainset2',len(trainset)

print

'testset2',len(testset)

a = [6.1,2.8,4.7,1.2]

defpredict

(new,train):

neighbor = getneaborhod(new,train,3)

predict = getresponse(neighbor)

print predict

if __name__ == '__main__':

main()

predict(a,testset)

測試結果還算是比較滿意,達到了識別率95%

測試結果如下:

trainset2 112

testset2 38

trainset1 109

testset1 41

0.951219512195

iris-versicolor

[finished in

1.5s]

機器學習之KNN演算法

在幾位志同道合的小夥伴的帶領下,開始了機器學習的路程,然而一切並不是想象的那麼簡單,因此本文記錄了自己的學習路程,希望還能堅持做好這件事。knn演算法是機器學習中屬於比較簡單的演算法,容易理解和閱讀。1.knn的應用 客戶流失 欺詐偵測等 更適合於稀有事件的分類問題 2.優缺點 優點 這是乙個簡單有...

機器學習演算法之KNN

物以類聚 人以群分,乙個例項與它周圍的例項屬於同一類的概率較大。給定乙個訓練資料集,對新輸入的例項,在訓練資料集中找到與該例項最鄰近的k個例項,這k個例項的多數屬於某個類,就把該輸入例項分為這個類。這裡,選用了歐氏距離,k的預設值為3,使用了sklearn提供的digits資料集來進行測試。inpu...

機器學習之kNN演算法

knn原理及實踐 1 演算法介紹 總的來說,機器學習入門的第乙個演算法是k 近鄰演算法 knn 它的工作原理是 存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進...