鳶尾花資料分類實戰

2021-09-27 11:11:58 字數 3276 閱讀 4143

資料集大概是這樣子的

將資料預處理一下

def get_data(loc="iris.csv"):

with open(loc, 'r') as fr:

lines = csv.reader(fr)

data_file = np.array(list(lines))

data = data_file[1:, 0:-1].astype(float)

labels = data_file[1:, -1]

return data, labels

返回地data如下

labels如下

之後繪圖

def draw():

style_list = ['ro','go','bo']

data, labels = get_data()

print(data)

print(labels)

cc = defaultdict(list)

for i, d in enumerate(data):

p_list =

c_list =

for i, (c, ds) in enumerate(cc.items()):

draw_data = np.array(ds)

p = plt.plot(draw_data[:, 0], draw_data[:, 1], style_list[i])

plt.legend(map(lambda x:x[0], p_list), c_list)

plt.title("鳶尾花萼片的長度和寬度")

plt.xlabel("萼片的長度(cm)")

plt.ylabel("萼片的寬度(cm)")

plt.show()

對data進行進一步處理,得到索引和元素,然後將其用dict儲存起來

再次處理

對cc的key和value進行迴圈

cc = defaultdict(list)

for i, d in enumerate(data):

cc的結果如下:

for i, (c, ds) in enumerate(cc.items()):

draw_data = np.array(ds)

p = plt.plot(draw_data[:, 0], draw_data[:, 1], style_list[i])

得到一張這樣的圖

但是標題顯示有問題,這就很煩了

總結一下預處理的過程,大概就是提取出自己的需要的資料,然後在python的各種資料型別之間進行轉換

python的各種資料型別和nump的陣列一定要很熟悉

從**上就能看地差不多了

def classify(input_data, train_data, labels, k):

data_size = train_data.shape[0]

diff = np.tile(input_data, (data_size, 1)) - train_data

sqrt_diff = diff ** 2

sqrt_distance = sqrt_diff.sum(axis=1)

distance = np.sqrt(sqrt_distance)

sorted_index = distance.argsort()

class_count = counter(labels[sorted_index[:k]])

return class_count.most_common()[0][0]

每種花其實是有四個屬性的,萼片的長度和寬度,花瓣的長度和寬度

近鄰演算法就是計算距離

根據距離的遠近來判斷

所以先diff = np.tile(input_data, (data_size, 1)) - train_data計算出差值

之所以np.tile是怕資料的維度不一樣

然後平方 ,平方之後,沿行方向求和再開方

random的shuffle() 方法將序列的所有元素隨機排序。

這裡需要注意的是:

python3中的random.shuffle()方法只能打亂list

所以必須將range型別的轉換成list型別的

所以打亂的**:

def try_once():

data, labels = get_data()

index = range(len(data))

data = data[index]

labels = labels[index]

index = list(index)

random.shuffle(index)

labels = labels[index]

data = data[index]

input_data = data[-1]

data = data[:-1]

input_label = labels[-1]

labels = labels[:-1]

print('input_index:', index[-1])

print('true class:', input_label)

print(classify(input_data, data, labels, 5))

這樣就完成了knn演算法了

結果如下

input_index: 58

true class: versicolor

versicolor

**********

input_index: 70

true class: versicolor

virginica

**********

input_index: 76

true class: versicolor

versicolor

**********

input_index: 107

true class: virginica

virginica

**********

input_index: 67

true class: versicolor

versicolor

**********

鳶尾花分類python演算法 BP演算法鳶尾花分類

bp演算法鳶尾花分類 網上很多鳶尾花例子,學習其他人後仿寫,我在執行其他人的時候會有溢位和錯誤。下述 準確率95 提取碼 y07d 如果有什麼不對的或者有什麼不懂iamzhubaoliang yeah.net 工程位址 import math import random import pandas ...

Python Iris鳶尾花資料Knn分類

首先匯入sklearn庫中自帶iris資料 三類 0 山鳶尾花 1 變色鳶尾花 2 維吉尼亞鳶尾花 訓練集112個,測試集38個。匯入iris資料,x資料,y標籤 iris datasets.load iris x iris.data y iris.target x train,x test,y t...

鳶尾花分類 機器學習 鳶尾花資料集 貝葉斯分類

step1 庫函式匯入 import warnings warnings.filterwarnings ignore import numpy as np 載入鶯尾花資料集 from sklearn import datasets 匯入高斯樸素貝葉斯分類器 from sklearn.bayes im...