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