用SVM分类模型处理iris数据集
文章目錄
- 一、實(shí)驗(yàn)簡介:
- 二、實(shí)驗(yàn)環(huán)境
- 三、第三方函數(shù)庫
- 1. Sklearn函數(shù)庫(用于構(gòu)建SVM模型和數(shù)據(jù)集劃分)= Sci-Kit learn庫
- 2. Numpy函數(shù)庫(用于基本數(shù)據(jù)清洗和對(duì)數(shù)據(jù)格式進(jìn)行處理會(huì)用于數(shù)據(jù)可視化過程中)
- 3. Matplotlib函數(shù)庫(用于數(shù)據(jù)可視化過程便于對(duì)比實(shí)驗(yàn)結(jié)果)
- 四、實(shí)驗(yàn)?zāi)繕?biāo):
- 五、實(shí)驗(yàn)過程
- 六、實(shí)驗(yàn)代碼
- 七、實(shí)驗(yàn)結(jié)果分析及結(jié)論
一、實(shí)驗(yàn)簡介:
本次數(shù)據(jù)集很經(jīng)典,實(shí)驗(yàn)本身是基于SVM支持向量機(jī)技術(shù)對(duì)數(shù)據(jù)集Iris進(jìn)行特征分類。實(shí)驗(yàn)采取Sklearn函數(shù)庫來實(shí)現(xiàn)SVM,并使用SVM對(duì)提取好的特征進(jìn)行分類,結(jié)果的展示方面進(jìn)行了數(shù)據(jù)可視化保證觀測(cè)結(jié)果清晰可見。
首先,Iris數(shù)據(jù)集的中文名是安德森鳶尾花卉數(shù)據(jù)集,Iris包含150個(gè)樣本,對(duì)應(yīng)數(shù)據(jù)集的每行數(shù)據(jù)。每行數(shù)據(jù)包含每個(gè)樣本的四個(gè)特征和樣本的類別信息,所以iris數(shù)據(jù)集是一個(gè)150行5列的二維表形式的樣本,被應(yīng)用于多類模型的實(shí)驗(yàn)當(dāng)中。
還需要進(jìn)一步介紹數(shù)據(jù)集的內(nèi)容:數(shù)據(jù)集當(dāng)中,每個(gè)樣本包含了花萼長度、花萼寬度、花瓣長度、花瓣寬度四個(gè)特征(前4列),我們需要建立一個(gè)分類器,分類器可以通過樣本的四個(gè)特征來判斷樣本屬于山鳶尾、變色鳶尾還是維吉尼亞鳶尾(‘Iris-setosa’, ‘Iris-versicolor’ , ‘Iris-virginica’)。當(dāng)然數(shù)據(jù)集默認(rèn)為str分類的,位于第五列,而由于在分類中類別標(biāo)簽必須為數(shù)字量,所以應(yīng)將Iris.data中的第5列的類別(字符串)轉(zhuǎn)換為數(shù)字形式。這是需要進(jìn)行人工清洗的一個(gè)過程。
數(shù)據(jù)清洗完畢后就開始利用數(shù)據(jù)集進(jìn)行分類器的構(gòu)建,Sklearn非常方便可以根據(jù)需要將原始數(shù)據(jù)集按照比例依據(jù)類別標(biāo)簽劃分成訓(xùn)練集和測(cè)試集,本次實(shí)驗(yàn)過程中分別按照默認(rèn)比例和個(gè)人設(shè)置比例作了5組對(duì)照實(shí)驗(yàn)。劃分好訓(xùn)練集和測(cè)試集之后,就可以開始訓(xùn)練SVM模型了,對(duì)核函數(shù)和參數(shù)的選擇將直接影響到模型的泛化誤差和預(yù)測(cè)準(zhǔn)確度,在此處按照之前寫過的文章分成四組進(jìn)行對(duì)照。在訓(xùn)練完模型之后,采用可視化方法將預(yù)測(cè)區(qū)域和樣本呈現(xiàn)出來,可以比較直觀地觀測(cè)到模型的預(yù)測(cè)精度。具體對(duì)照組的對(duì)照情況和具體實(shí)驗(yàn)過程將在后文中寫出。
二、實(shí)驗(yàn)環(huán)境
Windows 10操作系統(tǒng),Jupyter Notebook環(huán)境。
三、第三方函數(shù)庫
1. Sklearn函數(shù)庫(用于構(gòu)建SVM模型和數(shù)據(jù)集劃分)= Sci-Kit learn庫
2. Numpy函數(shù)庫(用于基本數(shù)據(jù)清洗和對(duì)數(shù)據(jù)格式進(jìn)行處理會(huì)用于數(shù)據(jù)可視化過程中)
3. Matplotlib函數(shù)庫(用于數(shù)據(jù)可視化過程便于對(duì)比實(shí)驗(yàn)結(jié)果)
四、實(shí)驗(yàn)?zāi)繕?biāo):
我們現(xiàn)在得到了一組蘭花數(shù)據(jù)集,在這組數(shù)據(jù)中包含三種不同種類的蘭花,我們打算使用SVM對(duì)其進(jìn)行分類,并通過這組實(shí)驗(yàn)來評(píng)價(jià)SVM的分類效果和參數(shù)設(shè)置對(duì)模型泛化誤差的影響。
五、實(shí)驗(yàn)過程
首先數(shù)據(jù)集是.data格式的文件,根據(jù)觀察和了解得知,其中包括4維特征值,和1維的標(biāo)志位,而標(biāo)志位還是以字符串形式給出的,所以需要先對(duì)數(shù)據(jù)集進(jìn)行清洗和特征提取,為了方便后期可視化展示,在本次實(shí)驗(yàn)過程中只取其中前兩維特征來進(jìn)行實(shí)驗(yàn)。
數(shù)據(jù)清洗可以通過字典過濾來實(shí)現(xiàn),使用loadtxt函數(shù)中的參converters來實(shí)現(xiàn)字典轉(zhuǎn)換。將第五列特征特征提取過程使用的是numpy庫當(dāng)中的split函數(shù),該函數(shù)可以實(shí)現(xiàn)將前四維特征與后面的部分分離,這里用到一個(gè)以前不太常見的切片寫法(4,),在這里特別記錄一下。具體代表的含義為以4,5列中心點(diǎn)未劃分劃為兩個(gè)array保存在兩個(gè)參數(shù)中(注意結(jié)果為兩個(gè)輸出)。所以我們可以通過這個(gè)函數(shù)來實(shí)現(xiàn)將數(shù)據(jù)和標(biāo)志分離,并保持其一一對(duì)應(yīng),相對(duì)位置不變。
為了實(shí)驗(yàn)?zāi)軌蛴酗@著的結(jié)果,而且為了保證訓(xùn)練集和測(cè)試集能有著良好的數(shù)據(jù)一致性,使用train_test_split函數(shù)將原始數(shù)據(jù)集對(duì)訓(xùn)練集和測(cè)試及進(jìn)行劃分,該方法是有默認(rèn)分配比例的(訓(xùn)練集:測(cè)試集=7.5:2.5),但也可以認(rèn)為指定參數(shù)來進(jìn)行修改。本次試驗(yàn)分別取了5組比例進(jìn)行對(duì)照。由于,數(shù)據(jù)集包含兩部分(數(shù)據(jù)和標(biāo)簽),所以當(dāng)分離結(jié)束后,需要使用4個(gè)變量來接收返回值(train_data, test_data, train_label, test_label)。
當(dāng)以上對(duì)數(shù)據(jù)的處理結(jié)束,就可以開始構(gòu)建SVM分類器了,Sklearn提供了很好的分類器實(shí)現(xiàn),我將在這里介紹其參數(shù)配置,以及實(shí)驗(yàn)的對(duì)照設(shè)計(jì)。分類器的實(shí)現(xiàn)總共含3個(gè)主要參數(shù)(訓(xùn)練對(duì)應(yīng)關(guān)系decision_function_shape,學(xué)習(xí)步長c和核函數(shù)的選擇kernel),當(dāng)選擇的核為rbf高斯核的時(shí)候還會(huì)需要配置gamma徑向基核速度參數(shù)。本次試驗(yàn)中步長給定為5且對(duì)應(yīng)關(guān)系為一對(duì)多ovr,這兩個(gè)變量作為控制變量保持不變。對(duì)照組分別使用高斯核(不同gamma)和線性核,進(jìn)行對(duì)照設(shè)計(jì)實(shí)驗(yàn)。
設(shè)計(jì)好對(duì)照組之后,將不同對(duì)照組的實(shí)驗(yàn)數(shù)據(jù)跑出進(jìn)行對(duì)比。同時(shí)給出可視化展示。
六、實(shí)驗(yàn)代碼
第三方函數(shù)庫的導(dǎo)入部分:
函數(shù)定義部分:
具體實(shí)現(xiàn)部分:(事實(shí)上我重點(diǎn)做了以下本實(shí)驗(yàn)的可視化部分并設(shè)置了對(duì)照)
關(guān)于接下來分類器定義這一部分:我需要詳細(xì)講一下參數(shù)問題,雖然上文中講到了一部分,但還不夠詳細(xì):
首先關(guān)于核函數(shù)的選取,kernel='linear’時(shí),為線性核,C越大分類效果越好,但有可能會(huì)過擬合(defaul C=1)。而當(dāng)kernel=‘rbf’(default),為高斯核,gamma值越小,分類界面越連續(xù);gamma值越大,分類界面越“散”,分類效果越好,但有可能會(huì)過擬合(在后面的圖中能看出來)。
其次關(guān)于決策函數(shù)對(duì)應(yīng)關(guān)系問題,當(dāng)decision_function_shape='ovr’時(shí),為one v rest(一對(duì)多),即一個(gè)類別與其他類別進(jìn)行劃分,而當(dāng)decision_function_shape='ovo’時(shí),為one v one(一對(duì)一),即將類別兩兩之間進(jìn)行劃分,用二分類的方法模擬多分類的結(jié)果。
關(guān)于數(shù)據(jù)可視化部分,我再做一些補(bǔ)充,大家會(huì)發(fā)現(xiàn)我在這里使用grid,這個(gè)來自numpy庫函數(shù),詳細(xì)解釋一下:
要想理解mgrid的參數(shù),我們先假設(shè)現(xiàn)在要實(shí)現(xiàn)一個(gè)目標(biāo)函數(shù)f(x,y) = x + y。x軸范圍13,y軸范圍46,當(dāng)繪制圖像時(shí)主要分四步進(jìn)行:
step1:x方向上的擴(kuò)展(即沿x軸向右擴(kuò)展):
[1 1 1]
[2 2 2]
[3 3 3]
step2:y方向上的擴(kuò)展(即沿y軸向下擴(kuò)展):
[4 5 6]
[4 5 6]
[4 5 6]
step3:定位(xi,yi)(其實(shí)就是合并兩個(gè)矩陣):
[(1,4) (1,5) (1,6)]
[(2,4) (2,5) (2,6)]
[(3,4) (3,5) (3,6)]
step4:將(xi,yi)代入F(x,y) = x+y表示出來
因此這里x1, x2 = np.mgrid[x1_min:x1_max:200j,x2_min:x2_max:200j]后的結(jié)果可以看做是將兩個(gè)矩陣拼合之后,創(chuàng)造了一片布滿點(diǎn)的區(qū)域出來。
七、實(shí)驗(yàn)結(jié)果分析及結(jié)論
首先,我們先來看一下數(shù)據(jù)集劃分對(duì)照的結(jié)果,我們這時(shí)候規(guī)定C=5,核為rbf核,ovr模式,gamma=10。
Chart1:數(shù)據(jù)集劃分對(duì)照結(jié)果
根據(jù)劃分結(jié)果看,在接近7580%:2520%的訓(xùn)練集測(cè)試集比例時(shí),結(jié)果開始趨于穩(wěn)定,同時(shí)為了避免測(cè)試集數(shù)據(jù)過少缺乏一般性,可以認(rèn)為默認(rèn)的7.5:2.5的比例已經(jīng)具備相對(duì)較好的觀測(cè)水平(接下來的實(shí)驗(yàn)對(duì)照組均是以7.5:2.5來進(jìn)行的)。
接下來開始對(duì)不同參數(shù)的分類器模型進(jìn)行對(duì)照觀測(cè):
Chart2:分類器對(duì)照結(jié)果
我們和之前對(duì)手寫輸入識(shí)別的數(shù)據(jù)計(jì)處理方法一樣,主要針對(duì)的是徑向基核的實(shí)驗(yàn)效果(因?yàn)樗俣瓤?#xff09;,當(dāng)然也加入了一組線性核做對(duì)照。單從數(shù)據(jù)來看的話似乎,gamma取5的時(shí)候測(cè)試集表現(xiàn)出了很好的預(yù)測(cè)效果,但是竟然超過了訓(xùn)練集得分,我們認(rèn)為這是不可靠的,事實(shí)上很好理解,gamma過低會(huì)導(dǎo)致徑向基核欠擬合(當(dāng)然過高也會(huì)過擬合),所以結(jié)果不可靠,不能認(rèn)為是得到了很好的預(yù)測(cè)結(jié)果和模型參數(shù)。事實(shí)上,這一點(diǎn)也可以從下文的圖中直觀地感受到,因?yàn)槲覀兝L制了預(yù)測(cè)區(qū)域,而這個(gè)區(qū)域和我們最終預(yù)測(cè)的部分重合度很低,是欠擬合的。
所以,我們應(yīng)該關(guān)注的是,當(dāng)gamma達(dá)到10-20的時(shí)候,測(cè)試集得分趨于穩(wěn)定,我們認(rèn)為在這個(gè)區(qū)間上的gamma值才是相對(duì)可靠的,這一點(diǎn)也可以通過下文的圖來印證。有趣的是,我引入了一組線性核發(fā)現(xiàn)表現(xiàn)并不是很差(無論是在訓(xùn)練集還是在測(cè)試集),也許當(dāng)實(shí)際應(yīng)用需要的時(shí)候,也會(huì)選擇犧牲linear核的錯(cuò)誤率來提高分類速度。這在現(xiàn)實(shí)應(yīng)用中往往是可以接受的。我在我的前一篇文章也就是手寫輸入識(shí)別案例報(bào)告中對(duì)這一部分也是有所提及的。
接下來展示不同的參數(shù)對(duì)照組的預(yù)測(cè)效果圖像,一方面這可以幫助我們更直觀的觀察結(jié)果,另一方面這也是為了印證我剛剛所得出的結(jié)論:(三種不同的花類別用三種顏色代表,高亮區(qū)域是我們用grid構(gòu)造的預(yù)測(cè)區(qū)域(也就是我們的模型),樣本點(diǎn)的顏色代表著其數(shù)據(jù)集中的標(biāo)簽顏色,有白色環(huán)的為測(cè)試集樣本)
Chart3:RBF核Gamma = 1實(shí)驗(yàn)結(jié)果
Chart4:RBF核Gamma = 5實(shí)驗(yàn)結(jié)果
Chart5:RBF核Gamma = 10實(shí)驗(yàn)結(jié)果
Chart6:RBF核Gamma = 20實(shí)驗(yàn)結(jié)果
Chart7:Linear核實(shí)驗(yàn)結(jié)果
總結(jié)
以上是生活随笔為你收集整理的用SVM分类模型处理iris数据集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ESP32 coredump 分析
- 下一篇: SQL 插入时直接插入当前时间