李詒靖 ,石 詠 ,李亞楠,郭海湘,b,c,2
(中國地質大學1a.經濟管理學院;1b.數字化商務管理研究中心;1c.中國礦產資源戰略與政策研究中心,武漢 430074;2.中南大學 商學院,長沙 410083)
支持向量機(Support Vector Machine,SVM)是一種泛化能力很強的分類器,它在解決小樣本問題方面表現出了許多特有的優勢,是一種非常流行的學習方法,被廣泛應用于文本分類[1]、臉譜識別[2]、基因方程預測[3]、機械故障診斷[4]以及預測[5]等方面。在運用SVM解決問題時,需要提前考慮的是選擇全局學習方法還是局部學習方法。全局學習方法中主要有非線性SVM(SVM直接劃分非線性分類邊界),局部學習方法中主要有線性SVM(將非線性分類邊界拆分為若干線性邊界,從而進行線性劃分)。運用非線性的SVM處理問題主要是通過構造復雜的核函數實現,其優點是直接,但缺點是具體的非線性變換是未知的,因此容易過學習,并且相關參數對具體問題有依賴性。相對而言,線性SVM魯棒性強,但分類精度低,所以通常采用多個線性SVM來保證一定精度并同時提高泛化能力,這就是多支持向量機。由于多支持向量機只訓練局部的訓練集,故其也被稱為局部SVM。
現有的局部SVM算法很多,最簡單的方法是對每一個測試樣本用一個線性SVM來學習。Zhang等[13]提出了一種基于KNN的SVM-KNN算法,該算法首先找到測試樣本在訓練集中的k個近鄰,將樣本與其k個近鄰的距離矩陣轉化為核矩陣,再分別用SVM進行分類。與SVM-KNN不同,Blanzieri等[15]提出的k NNSVM直接在核空間內尋找測試樣本的k個近鄰,相比SVM-KNN更為簡潔直觀。Cheng等[16]只采用線性核變換,通過計算測試樣本與訓練集中每個樣本的相似度選取k個相似度最高的樣本,為測試樣本構造SVM模型來分類,Cheng等提出的算法稱為LSVM,并有2個變種:SLSVM和HLSVM。上述3種局部支持向量機算法都需要對每一個測試樣本構造SVM模型,當測試樣本非常多時,采用上述方法就變得不實際,缺乏實用性。為了克服該問題,許多學者提出了局部SVM的改進算法,基本思想都是將訓練集中的樣本依據一定的原則劃分為若干類并找到類中心,對每個類中心構造一個SVM模型。之后,在對測試樣本進行測試時,選擇離測試樣本最近的中心所構造的SVM進行分類。如圖1所示。改進的多支持向量機中每個SVM的訓練數據都是通過聚類方法對訓練數據進行劃分而形成的訓練子集,Cheng等提出的PSVM算法,利用加入了平衡正負樣本因子的Mag Kmeans聚類算法對訓練集進行聚類;Segate等[14]在其提出的k NNSVM的基礎上,提出了FaLK-SVM算法,在訓練集上采用最小覆蓋集的方法來尋找k個中心;Gu等[12]在每個聚類中心構造的SVM的目標函數中加入了全局支持向量來控制每個子線性SVM的支持向量與全局支持向量保持一致,通過這種變化,他們提出的CSVM能很好地克服子SVM中的過擬合問題。

圖1 multi-SVM結構圖
在改進的多支持向量機算法中,聚類方法肯定能確保每一個樣本都歸屬到某一簇中,但該方法無法從分段線性角度來確保最優劃分[6]。上述一些改進的多支持向量機算法能夠提高多支持向量機的時間復雜度,但在對訓練集聚類時,只有PSVM考慮了如何劃分子集的問題。事實上,如何劃分子集會直接關系到多支持向量機的表現。子集的劃分至少要考慮兩點:①子集包含的訓練樣本是否同時來自不同的2個類,若訓練子集中只包含同一類的樣本,那么構造的SVM分類器就不能很好地學習到另一類的信息,學習的效率降低。PSVM中加入的樣本平衡因子就是為了保證所構造的子訓練集中正負樣本的平衡性。②子集的中心盡量靠近不同類別的分離邊界,這是因為,當子集的聚類中心越靠近邊界,子集中包含的正負樣本數會越平衡,這一點在不均衡數據分類時尤其重要。在不均衡數據中,少數類樣本數量本來就較少,只有子集中心靠近邊界才能盡可能更靠近少數類樣本,從而訓練子集才能最大限度地包含較多的少數類樣本。基于這種背景,本文提出了有導師學習的k-means聚類方法,即在傳統k-means方法的基礎上加入指導信息,從而盡量滿足子集劃分所要考慮的兩點。
支持向量機(SVM)是在統計學習理論基礎上發展起來的一種新的機器學習方法,它是基于結構風險最小化原則的[7-8],在解決小樣本、非線性、高維及防止過學習模式識別問題中表現出許多特有的優勢[9]。在SVM中,有{X,yi},Xi∈Rn,i=1,2,…,N。Xi為 第i個輸入向量,yi是類別標簽(+1或—1)。輸入的數據集分為2個不同的類別A和B,對應的輸出為+1和—1。支持向量為A的{X∈},支持向量為B的{X∈。在非線性數據集中需要將數據從低維轉向高維。高維空間用映射函數φ(x),構造的邊界線為

優化邊界的問題變成一個最優化問題:

式中:C為可以調節的參數,稱為懲罰因子;ξ為松弛變量。將式(2)表示優化問題通過拉格朗日優化方法轉化為其對偶問題:

式中,αi為拉格朗日乘 子,這里K(Xi,Xj)=φ(Xi)T—φ(Xj)是核函數。訓練后,得到拉格朗日乘子α。如果αi≠0,則對應的樣本i就是一個支持向量。SVM的決策值可以定義為

式中:Xi為訓練數據中的樣本;X為輸入向量。當f(X)S為正值時,樣本X屬于正類,反之屬于負類。SVM也可以用一種網絡結構進行表達,如圖2所示。

圖2 SVM網絡結構表達
k-means聚類算法是一種硬聚類方法。即在n維的歐幾里得空間將n個樣本數據分為k類。首先,由用戶確定所要聚類的準確數目k,并隨機選擇k個對象(樣本),每個對象稱為一個種子,代表一個類的均值或中心,對剩余的每個對象,根據其與各類中心的距離將它賦給最近的類。然后重新計算每個類內對象的平均值形成新的聚類中心,該過程重復進行,直到收斂為止。考慮到n個樣本(x1,x2,…,xn),每一個樣本都是d維向量,k-means聚類的目的就是將n個樣本劃分為k個集合(k≤n)S={S1,S2,…,Sk},最小化類中距為

式中,mi為第i個聚類集合中所有樣本的平均值,即類中心。在迭代過程中考慮2個步驟:
(1)樣本分配。分配樣本到最近類中心的所屬類別,即

(2)更新。計算聚類樣本集合新的均值,即

由以上介紹可見,傳統的k-means聚類方法只考慮了類中距,這導致在SVM分類學習中,同類的樣本通常會劃到同一類別集合[10],即該類別集合里的樣本標簽都為+1,或都為—1,如圖3所示。圖3(a)表示有2類樣本,紅色(+1),藍色(—1),圖3(b)通過傳統k-means聚類方法進行的劃分,很顯然,黑色和綠色樣本點的劃分分別來自同一類,這種劃分導致SVM的學習會出現過學習的問題。
本文提出的有導師學習的k-means方法是在傳統k-means的基礎上不僅考慮類中距,而且還增加了一些指導信息,這些指導信息的引入能夠保證樣本集合的劃分盡量滿足集合中的樣本來自不同的類別(見圖3(b)中,紅色樣本點集合劃分所示)和劃分集合的中心盡量靠近分界線。

圖3 同類的樣本劃到同一類別集合的例子
傳統的k-means主要考慮類中距目標,即

式中:Xi為第i個樣本;Cj為第j個聚類的類中心;Z為樣本隸屬于各個聚類的隸屬度矩陣。本文的方法就是加入指導參數部分放入式(8)中,即

式中:Yi為向量Y(該向量就是對應樣本的類別標簽)的第i個元素;λ1>0。隸屬度矩陣Z如表1所示,向量Y如表2所示。在表1中 數字0和1表示向量Y是否屬于類別C。數字0表示向量Y不屬于類別C。反之,數字1表示向量Y屬于類別C。表2中可以看到數字—1和1,表示向量Y的類別標簽,—1表示向量Y是負的,1表示向量Y是正的。

表1 隸屬度矩陣Z

表2 向量Y
目標方程式(9)的第1部分


圖4 基于式(9)的k-means劃分模擬圖
由圖5可見,表示正樣本和負樣本的點基本相同,但是在局部區域不均衡,左邊紅色樣本點多于藍色樣本點,中間基本無差,右邊藍色樣本點多于紅色樣本點。運用有導師學習基于式(9)的k-means方法后,仿真圖5變為圖6。樣本劃分為3個部分用3種不同的顏色基本上劃分正確,但是每一個子集的中心用黑點表示,可以清楚地發現,左、右邊子集的中心點并不靠近分離邊界。導致這種原因就是樣本不均衡。

圖5 某區域樣本不均衡例子
為了解決該問題,需要附加另一種有導師信息,使得劃分的子集不僅考慮類別標簽的信息,而且考慮中心的信息。①用標簽均衡的改進的k-means進行劃分類別(即基于式(9));②測量每個子集中心和對立樣本的最短距離,然后最小化該距離。這保證每個類在最近正負樣本之間,目標方程為

圖6 基于式(9)的k-means劃分后

式中:Dj為每個子集到最近的對立樣本的距離;λ2>0。
圖7(a)為不均衡數據分布圖,圖7(b)為運用k-means方法對不均衡數據基于式(8)的仿真圖,圖7(c)為基于式(9)的仿真圖,圖7(d)為基于式(10)的仿真圖。

圖7 基于式(10)的k-means劃分過程圖,不均衡樣本
本文選用UCI數據庫[17]中5組不同的二分類數據集進行實驗,分別為Heart、Breast、Liver、Ionosphere和Tic-tac-toe數據集,各數據集的具體信息如表3所示。實驗選用數據集中60%的樣本作為訓練集,40%樣本作為測試集,并將本文方法所得的分類正確率與采用RBF核函數的標準SVM算法和常用的SVM-KNN[13]、Fa LKSVM[14]以 及CSVM[12]3種局部SVM算法進行對比,結果如表4所示。
表3反映出選用的5組數據集都存在一定的正負類樣本數不均衡的情況,而由表4可以看出,4種multi-SVM算法相比SVM在對這5組數據進行分類時分類正確率上均有不同程度的提高,說明采用muiti-SVM的思想可以在一定程度上提高SVM分類器的精度并增強分類器的泛化能力。在4種multi-SVM算法中,本文提出的SkSVM在5組實驗中都能得到與其他3種算法相當或更優的精度,尤其是在數據集不均衡程度較高的情況下(如Breast和Tic-tac-toe數據集),SkSVM相比其他3種算法所得的分類正確率要高,說明本文采用有導師學習的k-means對訓練集進行劃分在不均衡數據分類時有很好的效果。

表3 測試數據集詳細信息

表4 5種不同SVM算法的分類正確率對比 %
收集江漢油田某區塊oilsk81井、oilsk83井及oilsk85井的測井數據如表5~7所示(只列出了部分數據,詳細數據參見文獻[11])。oilsk81油井數據集是江漢油田鄂深8井區的生產井,2001-12-19開鉆,完鉆日期2002-04-17,完鉆井深3 580 m。數據集有31個樣本,其中,非油層16個樣本,油層15個樣本。oilsk83油井數據集是鄂深8井區的生產井,2002-11-08開鉆,完鉆日期2003-02-11,完鉆井深3 558 m。數據集有50個樣本,其中,非油層31個樣本,油層19個樣本。Oilsk85油井數據集是鄂深8井區的開發井,數據集有65個樣本,其中,非油層48個樣本,油層17個樣本。由表中可知,儲層含油性識別的測井屬性集合大小為6,即聲波時差(AC)、中子(CNL)、深測向電阻率(RT)、孔隙度(POR)、含油飽和度(So)和滲透率(PERM)。在該屬性集合中到底哪個子集(核屬性或者關鍵屬性)是用來識別該油區含油性最優且最簡單的屬性組合,運用GA-FCM進行屬性約簡[5],將GA和FCM進行嵌套,GA負責遍歷各種屬性組合,而FCM根據相對應的屬性組合進行識別,識別結果與目標結果進行比較,用識別正確率來評價每個屬性組合的優劣,從而可以得到對該油區進行含油性識別的最核心屬性組合為聲波時差(AC)和含油飽和度(So)。本文即選擇聲波時差和含油飽和度為輸入數據,輸出數據為油層(標簽為+1)與非油層(標簽為—1)。

表5 oilsk81井測井解釋成果表(只列出部分數據)

表6 oilsk83井測井解釋成果表(只列出部分數據)

表7 oilsk85井測井解釋成果表(只列出部分數據)
本文用有導師學習的k-means方法的SkSVM、k-means以及SVM分類方法對江漢油田oilsk81,oilsk83和oilsk85三口井的數據進行油層和非油層的識別比較,其中,oilsk81井中隨機選擇20個樣本作為訓練數據,11個樣本作為測試數據,oilsk83井中隨機選擇30個樣本作為訓練數據,20個樣本作為測試數據,oilsk85井中隨機選擇45個樣本作為訓練數據,20個樣本作為測試數據。k-means+all采用所有屬性作為輸入進行k-means分類,k-means+core采用核屬性(聲波時差和含油飽和度)進行k-means分類,其余方法的表達依此類推。實驗所有的結果均為50次重復實驗的平均值。由表8可見,本文提出的SkSVM方法無論是在所有屬性作為輸入還是核屬性作為輸入的條件下,對三口井的油層和非油層的識別率都是100%,充分說明了Sk SVM方法的魯棒性和容錯性比單獨使用k-means和單獨使用SVM要好,一定程度上避免了過學習的問題。

表8 對oilsk81,oilsk83,oilsk85三口油井的油層和非油層識別比較 %
本文用一種容錯性好、具有全局優化功能、帶有指導信息的有導師學習的k-means方法對數據樣本進行劃分,針對每個劃分建立線性SVM,將一個復雜的非線性問題分解為若干線性子問題進行求解,從而可以盡量避免過學習。SkSVM方法不僅拓展了SVM優化理論,同時也豐富了SVM的應用范疇。后續的研究將k-means的劃分替換為KNN的劃分、AP的劃分以及FCM的劃分等,然后進行深入的分析和比較。