鳶尾花資料集knn演算法python實現

2021-09-28 15:50:29 字數 4481 閱讀 1047

1.作業題目

原生python實現knn分類演算法,用鳶尾花資料集。

2.演算法設計

首先需要設定資料集(以50個為例),然後在程式中匯入資料集,根據資料集畫出散點圖。另外還需要定義兩個函式,其中乙個函式來計算兩個資料點之間的歐氏距離,另乙個函式設定knn模型,即計算訓練資料與測試資料之間的歐氏距離,然後根據距離來排序,提取top k近鄰,並且計算鄰居**現次數最多的類。最後還需要設定測試集(設定不同的k值)用來測試程式正確性。

資料集存入到檔案「dataset.csv」中,具體資料為:

sepal_length,sepal_width,petal_length,petal_width,species

5.1,3.5,1.4,0.2,setosa

4.9,3,1.4,0.2,setosa

4.7,3.2,1.3,0.2,setosa

4.6,3.1,1.5,0.2,setosa

5,3.6,1.4,0.2,setosa

5.4,3.9,1.7,0.4,setosa

4.6,3.4,1.4,0.3,setosa

5,3.4,1.5,0.2,setosa

4.4,2.9,1.4,0.2,setosa

4.9,3.1,1.5,0.1,setosa

5.4,3.7,1.5,0.2,setosa

4.8,3.4,1.6,0.2,setosa

4.5,2.3,1.3,0.3,setosa

4.4,3.2,1.3,0.2,setosa

5,3.5,1.6,0.6,setosa

4.6,3.2,1.4,0.2,setosa

5.3,3.7,1.5,0.2,setosa

7,3.2,4.7,1.4,versicolor

6.4,3.2,4.5,1.5,versicolor

6,2.7,5.1,1.6,versicolor

5.6,3,4.1,1.3,versicolor

5.5,2.5,4,1.3,versicolor

5.5,2.6,4.4,1.2,versicolor

6.1,3,4.6,1.4,versicolor

5.8,2.6,4,1.2,versicolor

5,2.3,3.3,1,versicolor

5.6,2.7,4.2,1.3,versicolor

5.7,3,4.2,1.2,versicolor

5.7,2.9,4.2,1.3,versicolor

6.2,2.9,4.3,1.3,versicolor

5.1,2.5,3,1.1,versicolor

5.7,2.8,4.1,1.3,versicolor

6.3,3.3,6,2.5,virginica

5.8,2.7,5.1,1.9,virginica

7.1,3,5.9,2.1,virginica

6.3,2.9,5.6,1.8,virginica

6.5,3,5.8,2.2,virginica

7.6,3,6.6,2.1,virginica

4.9,2.5,4.5,1.7,virginica

7.3,2.9,6.3,1.8,virginica

6.7,2.5,5.8,1.8,virginica

7.2,3.6,6.1,2.5,virginica

6.5,3.2,5.1,2,virginica

6.4,2.7,5.3,1.9,virginica

6.8,3,5.5,2.1,virginica

5.7,2.5,5,2,virginica

5.8,2.8,5.1,2.4,virginica

6.4,3.2,5.3,2.3,virginica

6.5,3,5.5,1.8,virginica

3.源**如下

import matplotlib.pyplot as plt

import pandas as pd

import numpy as np

import os

import operator

import csv

#讀取資料

data=pd.read_csv(os.getcwd() + '/data/' + os.sep + 'dataset.csv')

#輸出資料

print('資料集為:')

print(data)

#繪製散點圖

def draw_iris_data(csvpath='data/dataset.csv'):

x_list1=

y_list1=

x_list2=

y_list2=

x_list3=

y_list3=

csv_reader=csv.reader(open(csvpath))

for one_line in csv_reader:

if one_line[4]=='setosa':#類1

if one_line[4]=='versicolor':#類2

if one_line[4]=='virginica':#類3

#設定xy座標

plt.xlabel('x')

plt.ylabel('y')

plt.title("iris_data_pic")

plt.scatter(x_list1,y_list1,c='g',marker='.')#類1表示為「 . 」

plt.scatter(x_list2,y_list2,c='b',marker='+')#類2表示為「 + 」

plt.scatter(x_list3,y_list3,c='y',marker='*')#類3表示為「 * 」

plt.legend('123')

#畫圖plt.show()

print('資料集繪製的散點圖如下:')

draw_iris_data()

#定義乙個函式來計算兩個資料點之間的歐氏距離

def calculatedistance(data1, data2, length):

distance = 0

for x in range(length):

distance += np.square(data1[x] - data2[x])

return np.sqrt(distance)

#定義knn模型

def knn(trainingset, testinstance, k):

length = testinstance.shape[1]

distances = {}

#計算訓練資料與測試資料之間的歐氏距離

for x in range(len(trainingset)):

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

distances[x] = dist[0]

#根據距離來排序

sorted_d = sorted(distances.items(), key=operator.itemgetter(1))

neighbors =

#提取top k近鄰

for x in range(k):

classvotes = {}

#計算鄰居**現次數最多的類

for x in range(len(neighbors)):

answer = trainingset.iloc[neighbors[x]][-1]

if answer in classvotes:

classvotes[answer] += 1

else:

classvotes[answer] = 1

sortedvotes = sorted(classvotes.items(), key=operator.itemgetter(1), reverse=true)

return(sortedvotes[0][0])

#建立乙個測試集

testset = [[5.1, 3.5, 4.8, 2.7]]

test = pd.dataframe(testset)

print('測試資料',end='')

print(testset)

#設定k為1

k = 1

print('k=1時即選取乙個鄰居來判斷時結果為:')

result = knn(data, test, k)

print(result)

#設定k為3

k = 3

print('k=3時即選取三個鄰居來判斷時結果為:')

result = knn(data, test, k)

print(result)

#設定k為5

k = 5

print('k=5時即選取五個鄰居來判斷時結果為:')

result = knn(data, test, k)

print(result)

knn演算法 鳶尾花

knn分類演算法實現鳶尾花 對鳶尾花利用knn演算法進行分類,利用python的sklean庫極大方便了python的使用,減少了大量 的書寫。knn演算法的 是通過計算歐氏距離來確定 鳶尾花的結果,遍歷所有樣本集,計算待分類樣本與每個樣本的距離,計算並儲存後排序,尋找k個近鄰,最後輸出最小結果即為...

kNN處理鳶尾花資料集

knn k nearest neighbor 演算法是機器學習中最基礎入門,也是最常用的演算法之一,可以解決大多數分類與回歸問題。這裡以鳶尾花資料集為例,討論分類問題中的 knn 的思想。鳶尾花資料集內包含 3 類共 150 條記錄,每類各 50 個資料,每條記錄都有 4 項特徵 花萼長度 sepa...

KNN演算法實現,(鳶尾花資料集分類)

knn演算法的具體實現 參考部落格 knn演算法,又叫k 近鄰演算法。屬於乙個分類演算法,主要思想如下 乙個樣本在特徵空間中的k個最近鄰的樣本中的大多數都屬於某乙個類別,則該樣本也屬於這個類別。其中k表示最近鄰居的個數。通俗理解 和最近的幾個是一類 二維圖示 iris 鳶尾花資料集內包含 3 類分別...