久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

機(jī)器學(xué)習(xí)入門實(shí)踐——鳶尾花分類

 流楚丶格念 2022-01-14

文章目錄

原數(shù)據(jù)地址:

https://aistudio.baidu.com/aistudio/projectdetail/1096669

任務(wù)描述:

構(gòu)建一個(gè)模型,根據(jù)鳶尾花的花萼和花瓣大小將其分為三種不同的品種。

數(shù)據(jù)集

總共包含150行數(shù)據(jù)

每一行數(shù)據(jù)由 4 個(gè)特征值及一個(gè)目標(biāo)值組成,。

4 個(gè)特征值分別為:萼片長度,、萼片寬度、花瓣長度,、花瓣寬度

目標(biāo)值為三種不同類別的鳶尾花,分別為: Iris Setosa,、Iris Versicolour、Iris Virginica

首先導(dǎo)入必要的包:

numpy:python第三方庫,用于科學(xué)計(jì)算

matplotlib:python第三方庫,主要用于進(jìn)行可視化

sklearn:python的重要機(jī)器學(xué)習(xí)庫,其中封裝了大量的機(jī)器學(xué)習(xí)算法,如:分類,、回歸,、降維以及聚類

import numpy as np                
from matplotlib import colors     
from sklearn import svm            
from sklearn.svm import SVC
from sklearn import model_selection
import matplotlib.pyplot as plt
import matplotlib as mpl

Step1.數(shù)據(jù)準(zhǔn)備

(1)從指定路徑下加載數(shù)據(jù)

(2)對加載的數(shù)據(jù)進(jìn)行數(shù)據(jù)分割,x_train,x_test,y_train,y_test分別表示訓(xùn)練集特征、訓(xùn)練集標(biāo)簽,、測試集特征,、測試集標(biāo)簽

#*************將字符串轉(zhuǎn)為整型,便于數(shù)據(jù)加載***********************
def iris_type(s):
    it = {b'Iris-setosa':0, b'Iris-versicolor':1, b'Iris-virginica':2}
    return it[s]
#加載數(shù)據(jù)
data_path='/home/aistudio/data/data5420/iris.data'          #數(shù)據(jù)文件的路徑
data = np.loadtxt(data_path,                                #數(shù)據(jù)文件路徑
                  dtype=float,                              #數(shù)據(jù)類型
                  delimiter=',',                            #數(shù)據(jù)分隔符
                  converters={4:iris_type})                 #將第5列使用函數(shù)iris_type進(jìn)行轉(zhuǎn)換
#print(data)                                                 #data為二維數(shù)組,data.shape=(150, 5)
#print(data.shape)
#數(shù)據(jù)分割
x, y = np.split(data,                                       #要切分的數(shù)組
                (4,),                                       #沿軸切分的位置,第5列開始往后為y
                axis=1)                                     #代表縱向分割,按列分割
x = x[:, 0:2]                                               #在X中我們?nèi)∏皟闪凶鳛樘卣?#xff0c;為了后面的可視化。x[:,0:4]代表第一維(行)全取,第二維(列)取0~2
#print(x)
x_train,x_test,y_train,y_test=model_selection.train_test_split(x,              #所要?jiǎng)澐值臉颖咎卣骷?/span>
                                                               y,              #所要?jiǎng)澐值臉颖窘Y(jié)果
                                                               random_state=1, #隨機(jī)數(shù)種子
                                                               test_size=0.3)  #測試樣本占比

Step2.模型搭建

C越大,相當(dāng)于懲罰松弛變量,希望松弛變量接近0,即對誤分類的懲罰增大,趨向于對訓(xùn)練集全分對的情況,這樣對訓(xùn)練集測試時(shí)準(zhǔn)確率很高,但泛化能力弱,。
C值小,對誤分類的懲罰減小,允許容錯(cuò),將他們當(dāng)成噪聲點(diǎn),泛化能力較強(qiáng),。

kernel='linear’時(shí),為線性核

decision_function_shape='ovr’時(shí),為one v rest,即一個(gè)類別與其他類別進(jìn)行劃分,

decision_function_shape='ovo’時(shí),為one v one,即將類別兩兩之間進(jìn)行劃分,用二分類的方法模擬多分類的結(jié)果。

#**********************SVM分類器構(gòu)建*************************
def classifier():
    #clf = svm.SVC(C=0.8,kernel='rbf', gamma=50,decision_function_shape='ovr')
    clf = svm.SVC(C=0.5,                         #誤差項(xiàng)懲罰系數(shù),默認(rèn)值是1
                  kernel='linear',               #線性核 kenrel="rbf":高斯核
                  decision_function_shape='ovr') #決策函數(shù)
    return clf

# 2.定義模型:SVM模型定義
clf = classifier()

Step3.模型訓(xùn)練

#***********************訓(xùn)練模型*****************************
def train(clf,x_train,y_train):
    clf.fit(x_train,         #訓(xùn)練集特征向量
            y_train.ravel()) #訓(xùn)練集目標(biāo)值
#***********************訓(xùn)練模型*****************************
def train(clf,x_train,y_train):
    clf.fit(x_train,         #訓(xùn)練集特征向量
            y_train.ravel()) #訓(xùn)練集目標(biāo)值
# 3.訓(xùn)練SVM模型
train(clf,x_train,y_train)

Step4.模型評估

#**************并判斷a b是否相等,計(jì)算acc的均值*************
def show_accuracy(a, b, tip):
    acc = a.ravel() == b.ravel()
    print('%s Accuracy:%.3f' %(tip, np.mean(acc)))

def print_accuracy(clf,x_train,y_train,x_test,y_test):
    #分別打印訓(xùn)練集和測試集的準(zhǔn)確率  score(x_train,y_train):表示輸出x_train,y_train在模型上的準(zhǔn)確率
    print('trianing prediction:%.3f' %(clf.score(x_train, y_train)))
    print('test data prediction:%.3f' %(clf.score(x_test, y_test)))
    #原始結(jié)果與預(yù)測結(jié)果進(jìn)行對比   predict()表示對x_train樣本進(jìn)行預(yù)測,返回樣本類別
    show_accuracy(clf.predict(x_train), y_train, 'traing data')
    show_accuracy(clf.predict(x_test), y_test, 'testing data')
    #計(jì)算決策函數(shù)的值,表示x到各分割平面的距離
    print('decision_function:\n', clf.decision_function(x_train))
# 4.模型評估
print_accuracy(clf,x_train,y_train,x_test,y_test)

Step5.模型使用

def draw(clf, x):
    iris_feature = 'sepal length', 'sepal width', 'petal lenght', 'petal width'
    # 開始畫圖
    x1_min, x1_max = x[:, 0].min(), x[:, 0].max()               #第0列的范圍
    x2_min, x2_max = x[:, 1].min(), x[:, 1].max()               #第1列的范圍
    x1, x2 = np.mgrid[x1_min:x1_max:200j, x2_min:x2_max:200j]   #生成網(wǎng)格采樣點(diǎn)
    grid_test = np.stack((x1.flat, x2.flat), axis=1)            #stack():沿著新的軸加入一系列數(shù)組
    print('grid_test:\n', grid_test)
    # 輸出樣本到?jīng)Q策面的距離
    z = clf.decision_function(grid_test)
    print('the distance to decision plane:\n', z)
    
    grid_hat = clf.predict(grid_test)                           # 預(yù)測分類值 得到【0,0.,。,。。2,2,2】
    print('grid_hat:\n', grid_hat)  
    grid_hat = grid_hat.reshape(x1.shape)                       # reshape grid_hat和x1形狀一致
                                                                #若3*3矩陣e,則e.shape()為3*3,表示3行3列   
 
    cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
    cm_dark = mpl.colors.ListedColormap(['g', 'b', 'r'])
 
    plt.pcolormesh(x1, x2, grid_hat, cmap=cm_light)                                   # pcolormesh(x,y,z,cmap)這里參數(shù)代入
                                                                                      # x1,x2,grid_hat,cmap=cm_light繪制的是背景,。
    plt.scatter(x[:, 0], x[:, 1], c=np.squeeze(y), edgecolor='k', s=50, cmap=cm_dark) # 樣本點(diǎn)
    plt.scatter(x_test[:, 0], x_test[:, 1], s=120, facecolor='none', zorder=10)       # 測試點(diǎn)
    plt.xlabel(iris_feature[0], fontsize=20)
    plt.ylabel(iris_feature[1], fontsize=20)
    plt.xlim(x1_min, x1_max)
    plt.ylim(x2_min, x2_max)
    plt.title('svm in iris data classification', fontsize=50)
    plt.grid()
    plt.show()

在這里插入圖片描述

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多