資料集大概是這樣子的
將資料預處理一下
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...