張 濤
(蘭州財(cái)經(jīng)大學(xué)統(tǒng)計(jì)學(xué)院,甘肅 蘭州 730020)
小麥?zhǔn)侵袊?guó)四大主糧之一,是僅次于水稻而居第二的重要糧食作物.我國(guó)作為人口大國(guó),對(duì)口糧的壓力越來(lái)越大,保障國(guó)家糧食安全理所當(dāng)然成為了頭等大事,因此,小麥產(chǎn)業(yè)發(fā)展直接影響到國(guó)家糧食安全和社會(huì)穩(wěn)定.然而,不同品種的小麥對(duì)病害的感染程度有差異[1],那么如何以極高的準(zhǔn)確率將小麥品種正確分類就成為一個(gè)具有重要研究意義的課題.
機(jī)器學(xué)習(xí)的本質(zhì)就是算法,其核心問(wèn)題在于有意義地變換數(shù)據(jù),換句話說(shuō),在于學(xué)習(xí)輸入數(shù)據(jù)的有用表示,這種有用表示可以讓數(shù)據(jù)更加地接近預(yù)期輸出.機(jī)器學(xué)習(xí)的技術(shù)定義是在預(yù)先定義好的可能性空間中,利用反饋信號(hào)的指引來(lái)尋找輸入數(shù)據(jù)的有用表示.我們可以將機(jī)器學(xué)習(xí)想象成一個(gè)“黑盒”,利用機(jī)器學(xué)習(xí),人們輸入的是數(shù)據(jù)和從這些數(shù)據(jù)中預(yù)期得到的答案,而這個(gè)黑盒系統(tǒng)輸出的是規(guī)則.這些規(guī)則隨后可應(yīng)用于新的數(shù)據(jù),并且使計(jì)算機(jī)自主地生成答案.
本文基于Anaconda 腳本,選取UCI數(shù)據(jù)庫(kù)的seeds數(shù)據(jù)集,并將其劃分成訓(xùn)練集和測(cè)試集.選擇機(jī)器學(xué)習(xí)中的隨機(jī)森林和支持向量機(jī)(Support vector machine,SVM)兩種算法分別構(gòu)建模型以對(duì)劃分好的訓(xùn)練集進(jìn)行學(xué)習(xí),并在其測(cè)試集上進(jìn)行分類,接著選取分類精度(Accuracy)作為模型的評(píng)估指標(biāo),然后利用網(wǎng)格搜索技術(shù)進(jìn)行參數(shù)尋優(yōu)以取得令人滿意的分類結(jié)果,進(jìn)而證明基于兩種算法所構(gòu)建的小麥種子分類模型具有良好的分類性能,最后通過(guò)實(shí)驗(yàn)結(jié)果的對(duì)比和分析,評(píng)價(jià)兩種算法的優(yōu)缺點(diǎn),總結(jié)出基于隨機(jī)森林所構(gòu)建的小麥種子分類模型整體上要優(yōu)于基于支持向量機(jī)所構(gòu)建的模型.
隨機(jī)森林是一個(gè)包含多個(gè)決策樹(shù)的分類器,其輸出類別由個(gè)別樹(shù)輸出的類別的眾數(shù)而定,最早由Leo Breiman[2]和Adele Cutler提出.SVM是一種分類方法,最早由Vladimir N.Vapnik[3]和Alexan?der Y.Lerner提出,兩種算法都是機(jī)器學(xué)習(xí)領(lǐng)域中的研究熱點(diǎn).
1.1.1 基本單元—決策樹(shù)
決策樹(shù)是廣泛用于分類和回歸任務(wù)的模型,因其結(jié)構(gòu)呈樹(shù)形,故稱決策樹(shù).學(xué)習(xí)決策樹(shù),本質(zhì)上講就是學(xué)習(xí)一系列if/else問(wèn)題,目標(biāo)是通過(guò)盡可能少的if/else問(wèn)題來(lái)得到正確答案,我們從這些一層層的if/else問(wèn)題中進(jìn)行學(xué)習(xí)并以最快的速度找到答案.
1.1.2 集成學(xué)習(xí)
集成學(xué)習(xí)是合并多個(gè)機(jī)器學(xué)習(xí)模型來(lái)構(gòu)建更強(qiáng)大模型的方法.目前,集成學(xué)習(xí)主要有兩大流派(bagging 派系和boosting 派系),其中boosting 派系的代表算法主要有AdaBoost 算法[4]、梯度提升機(jī)(GBDT)[5]和極限提升機(jī)(XGBoost)[6],而本文中選擇的隨機(jī)森林是屬于bagging 派系的典型代表,其算法描述在表1中給出,從本質(zhì)上講就是許多決策樹(shù)的集合,其中每棵樹(shù)都和其他樹(shù)略有不同.對(duì)于分類問(wèn)題,隨機(jī)森林中的每棵樹(shù)都是一個(gè)分類器,也就是說(shuō),每棵樹(shù)做出一個(gè)分類結(jié)果,隨機(jī)森林集成了所有樹(shù)的分類投票結(jié)果且結(jié)果的投票是等權(quán)的[7],即對(duì)所有的投票取平均值,并將投票次數(shù)最多的結(jié)果作為輸出.
表1 bagging算法流程
本文使用的數(shù)據(jù)來(lái)自于UCI數(shù)據(jù)庫(kù)的seeds數(shù)據(jù)集[10],其官方網(wǎng)址為:http://archive.ics.uci.edu/ml/datasets/seeds.
該數(shù)據(jù)集一共有210個(gè)數(shù)據(jù)樣本,每個(gè)樣本包含了小麥的7種測(cè)量數(shù)據(jù),即7種特征,分別是面積(A)、周長(zhǎng)(P)、種子飽滿度(C)、谷粒長(zhǎng)度(L)、谷粒寬度(W)、偏度系數(shù)(AC)、谷粒槽長(zhǎng)度(LKG).
這210個(gè)樣本根據(jù)小麥品種的不同分為三類,分別是Rosa品種,包含樣本1~70,對(duì)應(yīng)類別標(biāo)簽(label)為1;Kama品種,包含樣本71~140,對(duì)應(yīng)類別標(biāo)簽(label)為2;Canadian品種,包含樣本141~210,對(duì)應(yīng)類別標(biāo)簽(label)為3.
從直觀上看,這是一個(gè)典型的平衡數(shù)據(jù).因此,我們要處理的問(wèn)題就是平衡多分類問(wèn)題.我們使用Anaconda中的scikit-learn庫(kù)的train_test_split函數(shù)將數(shù)據(jù)集打亂并拆分,這個(gè)函數(shù)將數(shù)據(jù)集中75%的樣本及對(duì)應(yīng)的類別標(biāo)簽作為訓(xùn)練集,共計(jì)157 個(gè)樣本(其中類別1 有53 個(gè),類別2 有49 個(gè),類別3有55個(gè)),剩下25%的樣本及對(duì)應(yīng)的類別標(biāo)簽作為測(cè)試集,共計(jì)53個(gè)樣本(其中類別1有17個(gè),類別2有21個(gè),類別3有15個(gè)).
我們使用pandas庫(kù)的describe函數(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)集的描述性統(tǒng)計(jì),并通過(guò)繪制散點(diǎn)矩陣圖,實(shí)現(xiàn)數(shù)據(jù)集特征分布的可視化,從而兩兩查看所有的特征.
表2 seeds數(shù)據(jù)集的描述性統(tǒng)計(jì)
從表2可觀察到數(shù)據(jù)集各個(gè)特征的條目統(tǒng)計(jì)(count),平均值(mean),標(biāo)準(zhǔn)差(std),最小值(min),25%,50%,75%分位數(shù)和最大值(max).
從圖1可以觀察到面積(A)—周長(zhǎng)(P),面積(A)—谷粒長(zhǎng)度(L),面積(A)—谷粒寬度(W),周長(zhǎng)(P)—谷粒槽長(zhǎng)度(LKG)等圖像呈現(xiàn)線性關(guān)系;面積(A)—偏度系數(shù)(AC),周長(zhǎng)(P)—偏度系數(shù)(AC),谷粒長(zhǎng)度(L)—偏度系數(shù)(AC)等圖像的關(guān)系比較復(fù)雜,很難用線性關(guān)系表示.
圖1 seeds數(shù)據(jù)集的散點(diǎn)矩陣圖
首先嘗試直接使用默認(rèn)參數(shù)去構(gòu)建模型.這里我們調(diào)用Anaconda中的scikit-learn庫(kù)的ensemble模塊,通過(guò)將該模塊中的RandomForestClassifier類實(shí)例化來(lái)實(shí)現(xiàn)模型的構(gòu)建,然后利用劃分好的訓(xùn)練集擬合該模型并在測(cè)試集上進(jìn)行分類預(yù)測(cè),實(shí)驗(yàn)結(jié)果表明其分類精度達(dá)到92%.
樹(shù)的可視化有助于深入理解算法是如何進(jìn)行預(yù)測(cè)的,也易于非專家理解機(jī)器學(xué)習(xí)算法這個(gè)“黑盒”.作為隨機(jī)森林的一部分,樹(shù)被保存在estimators_屬性中.我們可以利用tree模塊的export_graph?viz函數(shù)來(lái)將樹(shù)可視化.這里我們以構(gòu)建的隨機(jī)森林中的其中一顆樹(shù)為例,將其決策過(guò)程可視化.
圖2 seeds數(shù)據(jù)集構(gòu)造的隨機(jī)森林中一顆樹(shù)的可視化
其中圖2每個(gè)節(jié)點(diǎn)的samples給出了該節(jié)點(diǎn)的樣本個(gè)數(shù),value給出的是每個(gè)類別的樣本個(gè)數(shù).
除了將樹(shù)的決策過(guò)程可視化之外,我們還可以利用樹(shù)的特征重要性來(lái)總結(jié)樹(shù)的工作原理.它為每個(gè)特征對(duì)樹(shù)的決策的重要性進(jìn)行排序,通常被被保存在feature_importance_屬性中.我們可以通過(guò)構(gòu)建一個(gè)自定義函數(shù)來(lái)實(shí)現(xiàn)樹(shù)的特征重要性可視化.
表3 小麥種子的7種特征重要性
圖3 seeds數(shù)據(jù)集上學(xué)到的樹(shù)的特征
表3 顯示的是各個(gè)特征重要性的數(shù)值.從圖3 中可以觀察到谷粒槽長(zhǎng)度(LKG)是最重要的特征,說(shuō)明所構(gòu)建的隨機(jī)森林模型是以谷粒槽長(zhǎng)度(LKG)這一特征作為最重要的分類依據(jù).
通過(guò)調(diào)參來(lái)提升模型的泛化能力,達(dá)到優(yōu)化模型的目的.這是一項(xiàng)棘手的任務(wù),但對(duì)于所有模型和數(shù)據(jù)集來(lái)說(shuō)都是必要的.最常用的調(diào)參方法有網(wǎng)格搜索技術(shù),通過(guò)指定參數(shù)n_estimaors取不同的取值(1,5,10,50)—該參數(shù)用于確定構(gòu)造的隨機(jī)森林的樹(shù)的個(gè)數(shù),即分別構(gòu)造1 顆樹(shù)、5 顆樹(shù)、10顆樹(shù)和50顆樹(shù)組成的模型.原則上來(lái)講,參數(shù)n_estimaors 總是越大越好,不過(guò)收益是遞減的,即模型的反饋效果是邊際遞減的.在參數(shù)n_estimaors 上使用for 循環(huán),通過(guò)窮舉搜索式的“貪婪”算法來(lái)得到最優(yōu)的結(jié)果.
表4 各參數(shù)模型的預(yù)測(cè)結(jié)果
從表4中可以觀察到最優(yōu)參數(shù)為50,其對(duì)應(yīng)的分類精度為96.22%.與基準(zhǔn)模型(92%)相比,經(jīng)過(guò)調(diào)參優(yōu)化后的模型在分類精度有了不少的提高,在小麥種子分類性能上有優(yōu)秀的體現(xiàn).
觀察seeds數(shù)據(jù)集,原始數(shù)據(jù)包含面積、周長(zhǎng)、無(wú)量綱的量都混合在一起,例如面積(A)是有量綱的,其量綱為平方米,而種子飽滿度(C)是無(wú)量綱的.這些量綱不同、數(shù)量級(jí)不同的特征對(duì)其他模型(比如隨機(jī)森林)可能是小問(wèn)題,但對(duì)SVM卻又極大影響,會(huì)影響其分類決策的貢獻(xiàn)度[11].因此,我們需要對(duì)原始數(shù)據(jù)集進(jìn)行預(yù)處理—?dú)w一化,確保每個(gè)特征的值落在0到1的范圍之間,這里我們調(diào)用scikit-learn庫(kù)的preprocessing模塊,通過(guò)將MinMaxScaler類實(shí)例化來(lái)實(shí)現(xiàn)對(duì)原始數(shù)據(jù)集的歸一化,并通過(guò)箱線圖和小提琴圖將歸一化后的數(shù)據(jù)集實(shí)現(xiàn)其可視化.
從圖4中可以觀察到歸一化后的訓(xùn)練集的7種特征都位于0到1之間,而歸一化后的測(cè)試集的特征絕大部分也位于0 到1 之間,有些特征在0 到1 的范圍之外,其原因是實(shí)例化的MinMaxScaler對(duì)象總是對(duì)訓(xùn)練集和測(cè)試集應(yīng)用相同的變換,換句話說(shuō),總是減去訓(xùn)練集的最小值,然后除以訓(xùn)練集的范圍,而這兩個(gè)值可能與測(cè)試集的最小值和范圍并不相同.不過(guò),這并不影響實(shí)驗(yàn)結(jié)果.從圖5中可以觀察到歸一化后的訓(xùn)練集和測(cè)試集的分布形狀及其概率密度,相當(dāng)于箱線圖和密度圖的結(jié)合.
這里同樣使用默認(rèn)參數(shù)去構(gòu)建SVM模型,調(diào)用Anaconda中的scikit-learn 庫(kù)的svm模塊,通過(guò)將該模塊中的SVC類實(shí)例化來(lái)實(shí)現(xiàn)模型的構(gòu)建,然后利用歸一化后的訓(xùn)練集擬合該模型并在測(cè)試集上進(jìn)行分類預(yù)測(cè),實(shí)驗(yàn)結(jié)果表明其分類精度達(dá)到91%.
帶交叉驗(yàn)證的網(wǎng)格搜索是一種常用的調(diào)參方法.這里調(diào)用Anaconda 中的scikit-learn 庫(kù)的mod?el_selection模塊,通過(guò)將該模塊中的GridSearchCV類實(shí)例化來(lái)實(shí)現(xiàn).我們用一個(gè)字典指定要搜索的參數(shù)組合:C和({C:0.01,0.1,1,10,100;:0.01,0.1,1,10,100})—參數(shù)C是正則化參數(shù),參數(shù)是控制高斯核寬度的參數(shù),兩者控制的都是模型的復(fù)雜度,相關(guān)度高,應(yīng)同時(shí)調(diào)節(jié).這樣我們就構(gòu)建了25組不同的參數(shù)組合,然后指定要使用的交叉驗(yàn)證策略(這里選擇5折交叉驗(yàn)證)來(lái)擬合實(shí)例化的GridSearchCV對(duì)象,通過(guò)cv_results_屬性找到其保存的網(wǎng)格搜索的所有內(nèi)容,并將其轉(zhuǎn)換成pandas數(shù)據(jù)框以供查看,最后我們截取數(shù)據(jù)框中的部分重要結(jié)果做成表格.
圖4 歸一化后的訓(xùn)練集(左)及測(cè)試集(右)的箱線圖
圖5 歸一化后的訓(xùn)練集(左)及測(cè)試集(右)的小提琴圖
表5 各參數(shù)組合模型的預(yù)測(cè)結(jié)果
本文將隨機(jī)森林算法和SVM算法應(yīng)用到小麥種子分類模型中,根據(jù)各個(gè)模型的輸出結(jié)果,對(duì)其進(jìn)行比較和分析,得到以下幾點(diǎn)結(jié)論:
(1)在分類精度方面,基于隨機(jī)森林算法構(gòu)建的分類模型要優(yōu)于基于SVM算法構(gòu)建的分類模型,即用隨機(jī)森林算法構(gòu)建的分類模型所得到的分類精度(Accuracy)高于用SVM 算法構(gòu)建的模型的分類精度.
(2)在數(shù)據(jù)預(yù)處理方面,兩者有明顯差異.數(shù)據(jù)預(yù)處理對(duì)SVM 影響較大,而隨機(jī)森林不需數(shù)據(jù)預(yù)處理.這也是如今很多應(yīng)用中用的都是樹(shù)的模型,比如隨機(jī)森林(需要很少的預(yù)處理,甚至不需要預(yù)處理).
(3)在調(diào)參方面,顯然SVM需要調(diào)整的參數(shù)個(gè)數(shù)明顯多于隨機(jī)機(jī)森林,其調(diào)參需過(guò)程也比較繁瑣.而隨機(jī)森林的調(diào)參就比較簡(jiǎn)單且易實(shí)現(xiàn),通常不需要繁瑣的調(diào)參過(guò)程,甚至不調(diào)參(使用默認(rèn)參數(shù)),也能達(dá)到相對(duì)滿意的效果.
總體而言,基于隨機(jī)森林算法構(gòu)建的模型是比SVM算法更有加效的小麥種子識(shí)別技術(shù),而且還可以將決策過(guò)程以可視化的方式向非專家展現(xiàn)出來(lái).將該模型應(yīng)用于小麥種子分類問(wèn)題,提高分類精度以辨識(shí)不同品種的小麥對(duì)病害的感染程度,促進(jìn)我國(guó)小麥產(chǎn)業(yè)的健康發(fā)展.