李瑋琢
(華北電力大學 河北 保定 071000)
隨著互聯網大數據時代的到來,各個領域每天都會產生海量的數據,為了對這些數據進行更好地處理,很多數據分析方法被提出。在經典的數據分析模型中,回歸和分類是兩大重要的分支,回歸分析可以對已知數據進行擬合,從而更好地對未知的數據進行預測;而分類可以將所給數據進行有效分類,進而完成對一些信息的識別。二者對于數據分析和處理階段都起著至關重要的作用,那么如果將二者進行結合,通過一個模型完成分類和回歸的雙重任務,就可以有效減少資源的使用,從而提升數據的分析效率。
近年來,相關學者提出許多回歸模型并將其應用于特征提取和分類之中。比如基于嶺回歸(ridge regression)和Lasso回歸的線性回歸模型在近年來被廣泛應用于分類問題中。Naseem等[1]采用嶺回歸模型,將人臉識別問題轉換為樣本之間的線性表示問題。Wright等[2]提出了一種稀疏表示分類器(sparse representation based classifier,SRC),在人臉識別上取得了極大成功。SRC將所有訓練樣本作為字典,認為測試樣本僅能由字典中的同類樣本線性表示,而與其他類樣本無關,從而該線性表示向量應當滿足稀疏性質。因此,SRC將人臉識別問題轉化為范數最小化問題,其本質上與Lasso回歸是一致的。Zhang等[3]認為測試樣本的正確表示關鍵在于訓練樣本之間的協同性而非稀疏性,其基于嶺回歸模型提出了協同表示分類器,取得了較SRC在計算效率上的大幅提升[4]。下面本研究就從基本原理入手,逐步完成一個基于回歸和分類的混合模型建立。
本研究采用的擬合方式為極大似然估計,首先設似然函數為

其中,m為訓練數據集的個數,p為分類數據集的個數,即前半部分為訓練數據部分,后半部分為測試數據部分;Φ(·)是標準高斯分布的分布函數,即probit函數;α和β為兩個超參數。
根據最大似然估計的計算方法,需求出對數似然函數

其中,const為與參數w無關的項,因為在后續對w求偏導過程中會將其舍去,所以這里不做詳細闡述。再設先驗

由于是將回歸模型和分類模型合并為一個模型進行擬合,那么這里令

參數w可以通過最大后驗法求出,即求解

具體方法是通過求f(w)對w的導數,即梯度▽f(w),再根據梯度上升法對w進行迭代,具體迭代公式如下

隨著w的更新不斷計算新的f(w)值,直到f(w)值收斂即達到最大值,此時的w值即為所求,然后根據所設的基函數以及訓練數據,即可運用所訓練的模型對函數進行擬合。具體的模型建立流程見圖1。

圖1 模型建立流程
首先設置訓練集數據為定義域在[-1,1]范圍內的函數

得到原函數之后,在此基礎上運用如下公式[5],增加一個均值為0,方差為1的高斯噪聲,在得到處理后的函數值后,從中取50個連續等間隔的點,將奇數位置上的設置為回歸訓練數據,橫坐標用表示;偶數位置上的為分類訓練數據,橫坐標用表示。

其中ε為均值為0,方差為1的高斯噪聲,ti為回歸訓練數據的目標函數值,si為分類數據的目標函數值,sign(·)是符號函數(取值范圍為±1,正類為+1,負類為-1)。相應的回歸訓練集和分類訓練集見圖2。

圖2 回歸訓練數據和分類訓練數據
圖中藍色的點為回歸訓練數據集,黃色的點為分類訓練數據集,由于高斯噪聲的存在可能會導致部分分類數據集的點判斷有誤,由此也可以更好地體現研究中的隨機性以及結論的普遍性。
本文選擇了兩種基函數來對模型進行擬合,分別為多項式基函數以及高斯基函數,基函數的表示形式定義如下:

對于多項式曲線擬合,基函數為冪函數,即

這時

若選擇的為高斯基函數,則

在這里μi是指每個高斯曲線的中心,可以在區間[-1,1]內等間隔,s是高斯曲線的尺度參數。
分布函數有probit函數和sigmoid函數兩種,probit為實驗中規定的分布函數,該分布函數服從正態分布,而sigmoid為常用的分布函數,兩個模型都是離散選擇模型的常用的模型,二者的區別就是在0左右的上升速度不同,一般情況下可以換用。而這里將sigmoid函數引入進行計算是因為該函數計算相對簡單,可大大減少代碼運行所需時間。兩個分布函數的公式如下:
Probit

Probit函數的導數即為對x求均值為0,方差為1的正態分布。
Sigmoid

本文共選擇兩種基函數以及兩種分布函數進行擬合計算,并對各種組合的效果進行對比。研究中相關參數自行設置,為保證后續各組之間的比較,要注意維持參數的同一。以下為對基函數與分布函數兩兩組合后的模型進行擬合的訓練情況。
迭代1 000次的probit模型以及迭代5 000次的sigmoid模型訓練過程中的誤差函數f(w)變化情況見圖3。

圖3 基函數與分布函數組合的誤差變化情況
隨著4個訓練過程的f(w)變化曲線可以看出,其絕對值在不斷降低,最終達到一個平緩的階段,即收斂,表明該參數下的模型訓練已達到最優。圖2(a)、圖2(b)分別為迭代1 000次的probit模型以及迭代5 000次的sigmoid模型訓練過程中的誤差函數變化情況。在實驗中測得迭代1 000次的probit模型訓練的用時情況為720 s,而迭代5 000次的sigmoid模型的用時只有2.6 s,可見sigmoid函數在運行時間上的提升很大,有利于我們在研究中對模型進行優化,并通過增加迭代次數,來完成對曲線的更精確擬合。而圖2(c)、圖2(d)為高斯基函數分別在probit模型以及sigmoid模型中訓練的情況,二者均選用500次迭代情況,通過兩幅圖可以看出,在高斯基函數下,兩個分布函數的模型均很快就達到平穩狀態。相比于之前的多項式基函數,其收斂速度有很大的提升,也表明模型訓練能力得到了改善。為檢驗擬合的情況是否都理想,下面對各個模型曲線的擬合情況進行展示分析,見圖4。

圖4 基函數與分布函組合的擬合情況
圖中黃點為分類數據,藍點為回歸數據。4幅圖的模型分別與上文4幅f(w)曲線的模型相對應。通過對比可以看出,多項式基函數的二者擬合情況基本準確,大體上完成了對該曲線的擬合,但如果與后兩幅高斯基函數進行對比,則顯得不容樂觀。4個模型的具體分類情況根據曲線相對于0的大小可以進行判斷,分類情況稍有誤差。
通過高斯基函數的圖像可以看出,上述兩個圖都幾乎很完美地完成了對于所給曲線的擬合,分類數據也相對較為準確,可以說是很好地完成了回歸以及分類任務。相比于多項式基函數,高斯基函數的擬合情況要更好一些,分析其原因可能是因為多項式基函數變換相比于高斯基函數變化較為緩慢,不利于突出訓練數據的特征,而高斯基函數更容易突出訓練數據的特征,從而可以更好地完成對于模型的擬合。
若將上下兩個基函數進行對比,那么由實驗數據可知,多項式基函數運行時間相對較長,probit模型在曲線的開始階段出現了一點過擬合的情況。由于迭代次數的增加,使得sigmoid模型在一些細節的處理上更為細致,因此sigmoid的擬合效果會優于probit函數的模型。所以在后面為了方便實驗的進行,我們的測試樣本部分以及參數改變的部分均使用sigmoid函數模型來執行。
在上述4個實驗過程中,高斯基函數的擬合效果更為平滑且精確度更高一些,并且sigmoid函數的運算效率較高,因此在這里本研究選用“sigmoid函數+高斯基函數”和“sigmoid函數+多項式基函數”的兩個組合來進行誤差的檢測,對比它們的測試情況。該部分的測試數據為在[-1,1]區間內選用5個隨機數據,下標為奇數的為回歸測試數據,下標為偶數的為分類數據,即3個回歸測試數據和2個分類測試數據。高斯基函數的測試的誤差為-4.83,而多項式基函數的測試誤差為-28.912,該數據的絕對值越小,則表明擬合的效果更好一些,與標準函數的相似程度越接近。由數據可以看出兩者的誤差均不是很大,但顯然是高斯基函數的精確度更高一些。下面將測試數據放入到該誤差函數中進行展示,見圖5。

圖5 “sigmoid與高斯基函數、多項式基函數”組合測試
該圖中黃點表示回歸測試數據,藍點表示分類測試數據,左右兩圖分別為高斯基函數以及多項式基函數同sigmoid模型的組合,從兩圖中可以看出高斯基函數的回歸測試數據均在擬合曲線的附近,而分類測試數據也與函數的正負一致,即分類正確。而多項式基函數的擬合效果整體不錯,但部分回歸測試點稍有一些誤差。總體來講,若要將兩種基函數相比,高斯基函數的收斂速度更快,擬合效果更佳,結果顯然是高斯基函數更勝一籌。
改變參數,測試模型誤差,本文選用“sigmoid函數+高斯基函數”的模型來測試參數對于模型的影響。共選用9組實驗參數,來對比不同參數情況下,模型訓練的誤差情況。表格中9組實驗使用的為同一套測試數據,隨機生成的測試數據為(-0.946,0.037,-0.352,0.878,0.299),9組參數的實驗結果展示見表1。

表1 不同參數對模型的影響
本部分采用對照實驗方法,一組為實驗組,后8組均為測試組。其中通過一、二、三組實驗的對照,可以看出噪聲方差會影響訓練數據的混亂程度,方差較大會導致訓練數據分布混亂程度較大,使得模型擬合的準確度下降,誤差絕對值較大;方差取得小會使訓練數據相比原函數變化不大,模型擬合相對容易,但無法體現出模型的整體擬合效果。
(1)四、五組是關于超參數α的對照實驗,可以看出參數α在比較大的時候會對模型的擬合造成影響,容易造成欠擬合,誤差絕對值增大;而α在小到一定程度后,再繼續減小,將不會對結果造成什么影響,即使改變也是比較細微的變化,所以可以通過改變α來對模型的擬合情況進行微調。
(2)六、七組為關于超參數β的對照實驗,可以看出超參數β對模型的訓練情況影響比較明顯。當β取值較大時,可以看出訓練的誤差收斂值絕對值上升,而測試誤差絕對值下降了一些,說明參數值調大可以增大模型的訓練精度,但本實驗在這里又做了一組將β調整到100時的情況進行觀察,發現如果將β調整到過于大的值會導致模型的過擬合;回到表格中數據,β的減小使得模型收斂值絕對值減小,而測試誤差絕對值增大,通過實驗時的圖像觀察,可得出結論,當β取值過于小時會造成模型的欠擬合,所以適當的β對模型的擬合情況影響比較明顯。
(3)八、九組為關于步長h的對照實驗,從表格中數據可以看出當步長取大值時,誤差收斂值絕對值減小,測試誤差絕對值減小,表明h增大,模型的學習速度增加,收斂速度增加,會改善模型的擬合情況;相反,如果h減小,誤差收斂值以及測試誤差的絕對值都會增大,表明模型訓練速度減慢,擬合情況不佳。在這里本實驗繼續將h取得更大,發現當模型的步長h達到一定數值后,若繼續增大,會使得模型無法收斂,即越過收斂值,在一定范圍內不斷震蕩。而且h的取值應與超參數β相匹配,不然會導致模型在訓練過程中出現溢出的情況。
綜上所述,噪聲方差c對于訓練數據的混亂程度有關,適當的取值有利于模型的訓練;超參數α適用于對模型的微調操作,不宜取值過大;超參數β與步長h對模型的擬合情況影響較大,并且二者需要相互配合調整,合適的取值對模型的擬合情況會有很大的提升。
由于未能找到具體同時實現回歸和分類模型的庫函數,但通過對該模型的分析,不難看出,具體的分類模型也應該是通過曲線的擬合來進行展示,根據曲線相對于零的大小位置即可完成分類,那么本研究就基于回歸模型,調用庫函數完成對該曲線的擬合,進而完成分類任務。
此部分,本文采用Python語言sklearn庫中的linear_model.LinearRegression以及linear_model.Ridge模塊來完成對回歸曲線的擬合。主要思路為通過基函數對原始數據進行變換可以將變量間的線性回歸模型轉換為非線性模型,實現方法就是通過將一維的x投影到高維空間,以此通過線性模型擬合出x和y之間的復雜關系[6]。模型的具體實現步驟如下。
首先通過使用make_pipeline函數將PolynomialFeatures模塊或高斯基函數轉換器GaussianFeatures與線性模型LinearRegression或Ridge模塊進行串聯,然后將所給函數數據代入串聯模型中進行訓練,即可完成對模型的訓練操作。最后畫出該模型擬合的曲線,放回到原訓練數據中觀察回歸以及分類效果,并完成對模型的測試。具體的擬合結果見圖6。

圖6 庫函數擬合情況
圖6中(a)、(b)、(c)分別為LinearRegression多項式擬合、LinearRegression高斯擬合、Ridge高斯擬合。由3幅圖的擬合情況可以看出,在對多項式進行擬合時,普通的線性回歸模塊LinearRegression的擬合效果還算不錯,但當對高斯基函數進行擬合的過程中,每個位置上的基函數系數變化幅度很大,即出現了過擬合的現象。此時本文采用了Ridge嶺回歸,該模塊的處理方法與普通的有所不同,嶺回歸是通過對模型系數平方和即L2范數進行懲罰,從而抑制模型的劇烈波動,消除了過擬合的問題,其擬合結果為上圖中的(c),可以看出比(b)的圖像平滑了許多。調用庫函數的3種方法所消耗的時間依次為:0.02、0019、0.012,可以看出運行時間是非常短的,相比于本實驗的程序,庫函數算法的不足在于只完成模型的回歸操作,無法減少資源的使用,這也正是本文設計模型的優勢所在,但是庫函數的執行效率非常高效,并且代碼簡潔,擬合效果好。因此本實驗的程序還需在代碼復雜度方面進行進一步的優化,比如循環的使用情況、計算公式的執行情況等方面,以提升算法的效率。
本文通過將傳統的回歸模型與分類模型進行結合,以極大似然估計為基礎,運用梯度上升法進行迭代,完成對回歸與分類混合模型的建立。并對兩種基函數以及兩種分布函數的不同選取情況進行了詳細分析,比較不同模型之間的優劣。運用對照實驗的方法,驗證不同參數對于模型的影響并詳細闡述了各個參數所代表的具體含義。最后將所設計的模型與回歸模型的庫函數進行對比分析,總結該混合模型的優勢與不足,提出進一步的優化方向。
通過研究表明將回歸與分類模型的結合可以有效增強模型的使用效率,并且減少相應的資源浪費,大大強化了模型的實用性,具備進一步研究的潛力。