Skip to content

Latest commit

 

History

History
302 lines (266 loc) · 6.8 KB

02-05 訓練及測試.md

File metadata and controls

302 lines (266 loc) · 6.8 KB

02-05 訓練及測試

執行結果:

GitHub Logo

(1)main.py

import matplotlib.pyplot as plt
import numpy as np
import random
import math

#--------------------------------------------------------------------------------------------
# 讀取鳶尾花資料
# 花萼長, 花萼寬, 花瓣長, 花瓣寬, 花種編號 (山鳶尾花:1, 變色鳶尾花:2, 維吉尼亞鳶尾花:3)
#--------------------------------------------------------------------------------------------
data=np.genfromtxt('iris.csv',  names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'classes'], delimiter=',')

#--------------------
# 亂數重排資料
#--------------------
np.random.shuffle(data)

#--------------------------------
# 將資料分成訓練資料及測試資料
#--------------------------------
training_data=data[:120]
testing_data=data[120:]


#---------------------------
# 繪圖
#---------------------------
feature_1='petal_length'
feature_2='petal_width'

fig = plt.figure()
sub = fig.add_subplot(111)
sub.plot(training_data[feature_1][training_data['classes']==1], training_data[feature_2][training_data['classes']==1], 'bd', alpha=0.2)
sub.plot(training_data[feature_1][training_data['classes']==2], training_data[feature_2][training_data['classes']==2], 'ro', alpha=0.2)
sub.plot(training_data[feature_1][training_data['classes']==3], training_data[feature_2][training_data['classes']==3], 'gv', alpha=0.2)

#--------------------------------
# 山鳶尾花(1)中心點
#--------------------------------
fc_11=np.mean(training_data[feature_1][training_data['classes']==1])
fc_12=np.mean(training_data[feature_2][training_data['classes']==1])

print('山鳶尾花')
print(feature_1, ':', fc_11)
print(feature_2, ':', fc_12)
print('-'*20)

#-----------------------------------
# 變色鳶尾花(2)中心點
#-----------------------------------
fc_21=np.mean(training_data[feature_1][training_data['classes']==2])
fc_22=np.mean(training_data[feature_2][training_data['classes']==2])

print('變色鳶尾花')
print(feature_1, ':', fc_21)
print(feature_2, ':', fc_22)
print('-'*20)

#--------------------------------------
# 維吉尼亞鳶尾花(3)中心點
#--------------------------------------
fc_31=np.mean(training_data[feature_1][training_data['classes']==3])
fc_32=np.mean(training_data[feature_2][training_data['classes']==3])

print('維吉尼亞鳶尾花')
print(feature_1, ':', fc_31)
print(feature_2, ':', fc_32)
print('-'*20)

#---------------------------
# 繪出各品種鳶尾花中心點
#---------------------------
sub.plot(fc_11, fc_12, 'bs', alpha=1.0)
sub.plot(fc_21, fc_22, 'rs', alpha=1.0)
sub.plot(fc_31, fc_32, 'gs', alpha=1.0)

#---------------------------
# 設定圖標題
#---------------------------
plt.title('Iris flower')

#---------------------------
# 設定資料說明
#---------------------------
plt.legend(['setosa', 'versicolor', 'virginica'], numpoints=1, loc='upper left')

#---------------------------
# 設定x軸及y軸標題
#---------------------------
plt.xlabel(feature_1)
plt.ylabel(feature_2)

#---------------------------
# 儲存圖檔
#---------------------------
fig.savefig('graph.png')

#---------------------------
# 進行測試資料的分類
#---------------------------
correct=0
total=0

for t in testing_data:
  d1=math.pow(t[feature_1]-fc_11, 2) + math.pow(t[feature_2]-fc_12, 2)
  d2=math.pow(t[feature_1]-fc_21, 2) + math.pow(t[feature_2]-fc_22, 2)
  d3=math.pow(t[feature_1]-fc_31, 2) + math.pow(t[feature_2]-fc_32, 2)
  
  guess=0
  
  if(d1<=d2 and d1<=d3):
    guess=1
    print('猜測品種:', '山鳶尾花')

  if(d2<=d1 and d2<=d3):
    guess=2
    print('猜測品種:', '變色鳶尾花')    

  if(d3<=d1 and d3<=d2):
    guess=3
    print('猜測品種:', '維吉尼亞鳶尾花')  
    
  total=total+1
  
  if(guess==t['classes']):
    correct=correct+1
    print('答對')
  else:
    print('答錯')
  
  print('-'*30)  
  
print('共答題數:', total)
print('答對題數:', correct)
print('答對比率:', correct/total*100 , '%')

(2)iris.csv

5.1,3.5,1.4,0.2,1 
4.9,3.0,1.4,0.2,1 
4.7,3.2,1.3,0.2,1 
4.6,3.1,1.5,0.2,1 
5.0,3.6,1.4,0.2,1 
5.4,3.9,1.7,0.4,1 
4.6,3.4,1.4,0.3,1 
5.0,3.4,1.5,0.2,1 
4.4,2.9,1.4,0.2,1 
4.9,3.1,1.5,0.1,1 
5.4,3.7,1.5,0.2,1 
4.8,3.4,1.6,0.2,1 
4.8,3.0,1.4,0.1,1 
4.3,3.0,1.1,0.1,1 
5.8,4.0,1.2,0.2,1 
5.7,4.4,1.5,0.4,1 
5.4,3.9,1.3,0.4,1 
5.1,3.5,1.4,0.3,1 
5.7,3.8,1.7,0.3,1 
5.1,3.8,1.5,0.3,1 
5.4,3.4,1.7,0.2,1 
5.1,3.7,1.5,0.4,1 
4.6,3.6,1.0,0.2,1 
5.1,3.3,1.7,0.5,1 
4.8,3.4,1.9,0.2,1 
5.0,3.0,1.6,0.2,1 
5.0,3.4,1.6,0.4,1 
5.2,3.5,1.5,0.2,1 
5.2,3.4,1.4,0.2,1 
4.7,3.2,1.6,0.2,1 
4.8,3.1,1.6,0.2,1 
5.4,3.4,1.5,0.4,1 
5.2,4.1,1.5,0.1,1 
5.5,4.2,1.4,0.2,1 
4.9,3.1,1.5,0.1,1 
5.0,3.2,1.2,0.2,1 
5.5,3.5,1.3,0.2,1 
4.9,3.1,1.5,0.1,1 
4.4,3.0,1.3,0.2,1 
5.1,3.4,1.5,0.2,1 
5.0,3.5,1.3,0.3,1 
4.5,2.3,1.3,0.3,1 
4.4,3.2,1.3,0.2,1 
5.0,3.5,1.6,0.6,1 
5.1,3.8,1.9,0.4,1 
4.8,3.0,1.4,0.3,1 
5.1,3.8,1.6,0.2,1 
4.6,3.2,1.4,0.2,1 
5.3,3.7,1.5,0.2,1 
5.0,3.3,1.4,0.2,1 
7.0,3.2,4.7,1.4,2 
6.4,3.2,4.5,1.5,2 
6.9,3.1,4.9,1.5,2 
5.5,2.3,4.0,1.3,2 
6.5,2.8,4.6,1.5,2 
5.7,2.8,4.5,1.3,2 
6.3,3.3,4.7,1.6,2 
4.9,2.4,3.3,1.0,2 
6.6,2.9,4.6,1.3,2 
5.2,2.7,3.9,1.4,2 
5.0,2.0,3.5,1.0,2 
5.9,3.0,4.2,1.5,2 
6.0,2.2,4.0,1.0,2 
6.1,2.9,4.7,1.4,2 
5.6,2.9,3.6,1.3,2 
6.7,3.1,4.4,1.4,2 
5.6,3.0,4.5,1.5,2 
5.8,2.7,4.1,1.0,2 
6.2,2.2,4.5,1.5,2 
5.6,2.5,3.9,1.1,2 
5.9,3.2,4.8,1.8,2 
6.1,2.8,4.0,1.3,2 
6.3,2.5,4.9,1.5,2 
6.1,2.8,4.7,1.2,2 
6.4,2.9,4.3,1.3,2 
6.6,3.0,4.4,1.4,2 
6.8,2.8,4.8,1.4,2 
6.7,3.0,5.0,1.7,2 
6.0,2.9,4.5,1.5,2 
5.7,2.6,3.5,1.0,2 
5.5,2.4,3.8,1.1,2 
5.5,2.4,3.7,1.0,2 
5.8,2.7,3.9,1.2,2 
6.0,2.7,5.1,1.6,2 
5.4,3.0,4.5,1.5,2 
6.0,3.4,4.5,1.6,2 
6.7,3.1,4.7,1.5,2 
6.3,2.3,4.4,1.3,2 
5.6,3.0,4.1,1.3,2 
5.5,2.5,4.0,1.3,2 
5.5,2.6,4.4,1.2,2 
6.1,3.0,4.6,1.4,2 
5.8,2.6,4.0,1.2,2 
5.0,2.3,3.3,1.0,2 
5.6,2.7,4.2,1.3,2 
5.7,3.0,4.2,1.2,2 
5.7,2.9,4.2,1.3,2 
6.2,2.9,4.3,1.3,2 
5.1,2.5,3.0,1.1,2 
5.7,2.8,4.1,1.3,2 
6.3,3.3,6.0,2.5,3 
5.8,2.7,5.1,1.9,3 
7.1,3.0,5.9,2.1,3 
6.3,2.9,5.6,1.8,3 
6.5,3.0,5.8,2.2,3 
7.6,3.0,6.6,2.1,3 
4.9,2.5,4.5,1.7,3 
7.3,2.9,6.3,1.8,3 
6.7,2.5,5.8,1.8,3 
7.2,3.6,6.1,2.5,3 
6.5,3.2,5.1,2.0,3 
6.4,2.7,5.3,1.9,3 
6.8,3.0,5.5,2.1,3 
5.7,2.5,5.0,2.0,3 
5.8,2.8,5.1,2.4,3 
6.4,3.2,5.3,2.3,3 
6.5,3.0,5.5,1.8,3 
7.7,3.8,6.7,2.2,3 
7.7,2.6,6.9,2.3,3 
6.0,2.2,5.0,1.5,3 
6.9,3.2,5.7,2.3,3 
5.6,2.8,4.9,2.0,3 
7.7,2.8,6.7,2.0,3 
6.3,2.7,4.9,1.8,3 
6.7,3.3,5.7,2.1,3 
7.2,3.2,6.0,1.8,3 
6.2,2.8,4.8,1.8,3 
6.1,3.0,4.9,1.8,3 
6.4,2.8,5.6,2.1,3 
7.2,3.0,5.8,1.6,3 
7.4,2.8,6.1,1.9,3 
7.9,3.8,6.4,2.0,3 
6.4,2.8,5.6,2.2,3 
6.3,2.8,5.1,1.5,3 
6.1,2.6,5.6,1.4,3 
7.7,3.0,6.1,2.3,3 
6.3,3.4,5.6,2.4,3 
6.4,3.1,5.5,1.8,3 
6.0,3.0,4.8,1.8,3 
6.9,3.1,5.4,2.1,3 
6.7,3.1,5.6,2.4,3 
6.9,3.1,5.1,2.3,3 
5.8,2.7,5.1,1.9,3 
6.8,3.2,5.9,2.3,3 
6.7,3.3,5.7,2.5,3 
6.7,3.0,5.2,2.3,3 
6.3,2.5,5.0,1.9,3 
6.5,3.0,5.2,2.0,3 
6.2,3.4,5.4,2.3,3 
5.9,3.0,5.1,1.8,3