李斌斌
(廣西師范大學(xué)數(shù)學(xué)與統(tǒng)計學(xué)院,桂林 541006)
近年來,由于國內(nèi)互聯(lián)網(wǎng)行業(yè)的火熱,各種編程人才的需求都較高。Java 從誕生開始就備受青睞,因?yàn)樗木幊陶Z言具有簡潔、高效、安全能力突出等特點(diǎn),現(xiàn)在越來越多的開發(fā)者使用Java 編程。各大招聘網(wǎng)站顯示,Java 的崗位需求仍處于一個火熱的狀態(tài),幾乎是其他行業(yè)的倍數(shù)。但與Java 開發(fā)人員的薪資相關(guān)的影響因素是什么,尚不十分清楚。本文使用貝葉斯神經(jīng)網(wǎng)絡(luò)方法,從許多變量中選擇出重要的影響因素。貝葉斯神經(jīng)網(wǎng)絡(luò)在解決神經(jīng)網(wǎng)絡(luò)的過擬合方面有著突出的效果,它根據(jù)已有的信息推斷未知,因此被譽(yù)為未來神經(jīng)網(wǎng)絡(luò)的方向。
線性回歸模型中的變量選擇目前已經(jīng)非常成熟,比如采取1 懲罰的lasso,采取2懲罰的嶺回歸等,這些方法都是基于正則化實(shí)現(xiàn)的,通過對似然函數(shù)添加懲罰來達(dá)到模型的稀疏化。貝葉斯方法通過選取一個比較合適的先驗(yàn),然后稀疏化模型,但是這些方法僅對線性模型是有用的。日常生活中更多的是非線性模型,因此,有必要去研究如何在非線性系統(tǒng)中選擇變量以及確定模型。
最近幾年也有神經(jīng)網(wǎng)絡(luò)的稀疏方法,比如使用總體隨機(jī)近似蒙特卡羅算法來稀疏神經(jīng)網(wǎng)絡(luò),但是由于該算法屬于傳統(tǒng)的MCMC 算法,需要在每一次迭代時評估完整數(shù)據(jù)的可能性,因此在大數(shù)據(jù)問題的情況下,該算法受到一定的限制。
本文基于Liang 等提出的貝葉斯神經(jīng)網(wǎng)絡(luò)的變量選擇方法。貝葉斯神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)是前反饋神經(jīng)網(wǎng)絡(luò)(feed-forward neural networks,F(xiàn)NNs)。
貝葉斯神經(jīng)網(wǎng)絡(luò)(Bayesian neural networks,BNN)和深度神經(jīng)網(wǎng)絡(luò)(deep neural networks,DNN)的不同之處在于:貝葉斯神經(jīng)網(wǎng)絡(luò)的權(quán)重由固定的數(shù)字變?yōu)閹в袇?shù)的分布,參數(shù)由給定的先驗(yàn)表示。
用數(shù)據(jù)集D=(x,y)表示觀測到的個樣本數(shù)據(jù),其中∈R,∈,由此可以得出,在給定時的分布為:

()表示的非線性函數(shù),(),(),()依次表示所對應(yīng)的函數(shù)。
在如圖1 所示的神經(jīng)網(wǎng)絡(luò)中,我們設(shè)置,…,x為個輸入變量,并且令= 1。隱藏層共有個隱藏節(jié)點(diǎn)。隱藏層中每一個隱藏結(jié)點(diǎn)的值為:

圖1 神經(jīng)網(wǎng)絡(luò)

ω表示第個輸入單元到第個隱藏單元的權(quán)重,I表示第個輸入單元到第個隱藏單元的連接的指示向量,f是激活函數(shù)。同理可以得到輸出層的值,即:

我們定義={I,I,I},表示貝葉斯神經(jīng)網(wǎng)絡(luò)的連接結(jié)構(gòu)。 為了方便表示={ω,ω,ω; I= 1,I= 1,I= 1} 。在此神經(jīng)網(wǎng)絡(luò)中共有個連接,=(+ 1)(+ 1) +,則我們可以用=(,,…,β)表示連接權(quán)重。
本文中我們使用spike-and-slab 先驗(yàn),在此之前,已經(jīng)有很多的研究者使用spike-andslab先驗(yàn)來做變量選擇。


本文數(shù)據(jù)是通過使用爬蟲在智聯(lián)招聘爬取得到,包括Java 開發(fā)者的薪資、城市、崗位要求、工作經(jīng)驗(yàn),以及公司人數(shù)等變量。按照城市規(guī)模,分別爬取了一線城市如北京、上海、廣州、深圳,以及部分非一線城市如西安、鄭州、蘭州等城市的數(shù)據(jù)。為了便于分析計算,本文將一線城市和非一線城市分別賦值1 和0。由于爬取到的工資以及工作經(jīng)驗(yàn)是一個范圍,因此,取工資平均數(shù)作為因變量,工作經(jīng)驗(yàn)也取平均值。學(xué)歷要求按照高中到博士分別賦值0~7。該數(shù)據(jù)集中含有16 個自變量,以每個職位給出的薪資作為因變量。本文使用該數(shù)據(jù)集的前80%作為訓(xùn)練樣本數(shù)據(jù)集,剩余20%作為測試數(shù)據(jù)集。由于真正影響每個職位的薪資的變量我們并不知道,所以可以認(rèn)為該模型是稀疏的。
數(shù)據(jù)集中含有16 個自變量,本文設(shè)置隱藏層有三個隱藏單元,那么在此模型中神經(jīng)網(wǎng)絡(luò)的 最 大 連 接 數(shù)= 71, 我 們 設(shè) 置 λ={0.001,0.002,0.005,0.01,0.02},由 于λ越 大,意味著神經(jīng)網(wǎng)絡(luò)中擁有更多的連接,因此計算所需要的時間更長。通過先驗(yàn)最優(yōu)化計算,我們確定0.02 是最適合的λ。
圖2 顯示了神經(jīng)網(wǎng)絡(luò)中每一個連接的邊緣包含概率,其中共有8個連接的邊緣包含概率超過了0.5。圖3 顯示共有四個變量的邊緣包含概率大于0.5,那么,就可認(rèn)為在此神經(jīng)網(wǎng)絡(luò)中,共有四個變量,分別對應(yīng)工作位置、學(xué)歷信息、工作經(jīng)驗(yàn),以及Spring技術(shù)。

圖2 連接邊緣包含概率(橫軸數(shù)字代表第幾根線)

圖3 變量選擇概率
2.3.1 因變量分析
圖4給出了Java開發(fā)者薪資的頻數(shù)分布直方圖,可以看出大多數(shù)崗位薪資集中在1 萬~1.5萬之間。該圖呈現(xiàn)了一個明顯的偏左分布特征,因此,大多數(shù)人的薪資水平比較低,只有很少的一部分人擁有很高的工資。在所搜集的數(shù)據(jù)中,平均薪資在1.38 萬元,中位數(shù)以及中數(shù)都是1.3萬元。

圖4 各個薪資階段的人數(shù)
2.3.2 自變量分析
在本文數(shù)據(jù)中共有四個變量與Java 開發(fā)者的薪資相關(guān),其中工作城市、工作經(jīng)驗(yàn)和學(xué)歷是最重要的幾個變量。
計算發(fā)現(xiàn),一線城市的平均薪資在1.738 萬元,而非一線的平均薪資在1.29萬元。圖5和圖6顯示一線城市和非一線城市中Java開發(fā)者的薪資高于總體平均值的比率。從中可以看出,一線城市的薪資水平明顯高于其他城市。導(dǎo)致這一現(xiàn)象的主要原因是互聯(lián)網(wǎng)行業(yè)主要集中于大城市,比如北京的百度、美團(tuán)、小米等;上海有拼多多、小紅書;深圳的騰訊、華為以及其他的大型互聯(lián)網(wǎng)公司。行業(yè)的需求以及國家的扶持政策等因素,都在影響著一個公司的發(fā)展。

圖5 一線城市薪資相對于平均薪資的分布比

圖6 非一線城市薪資相對于平均薪資的分布比
由于我國教育事業(yè)的高質(zhì)量發(fā)展,使得我們擁有大量的人才。在人們的普遍印象中,學(xué)歷永遠(yuǎn)是影響工資的一個重要因素。在Java 行業(yè)的招聘要求中,學(xué)歷要求在大專及以上的公司占到了99.9%,學(xué)歷要求在大學(xué)本科及以上的公司占61%。
除了上述兩個因素以外,工作經(jīng)歷也是影響薪資高低的重要變量。工作時間長,意味著有更多的經(jīng)驗(yàn)和知識技能,因此隨著工作經(jīng)歷增長,招聘公司給出的工資也會相應(yīng)上升。

圖7 各個學(xué)歷的要求占比

圖8 薪資與工作經(jīng)驗(yàn)柱狀圖

表1 薪資與工作經(jīng)驗(yàn)的關(guān)系表
本文在貝葉斯神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上,選擇影響Java 開發(fā)者薪資的重要因素加以分析,提出以下建議:①一線城市開發(fā)者的工資較高,但消費(fèi)水平也較高,應(yīng)聘者擇業(yè)時應(yīng)綜合自身的因素,不能盲目認(rèn)為一線城市工資高,就鎖定一線城市找工作,其它城市的薪資雖稍低,但是由于消費(fèi)水平低,也不失為一個很好的選擇。并且,現(xiàn)在互聯(lián)網(wǎng)的發(fā)展正在擴(kuò)散,非一線城市也擁有更大的潛力與機(jī)遇。②在學(xué)歷方面,越來越多的公司招聘要求本科以上學(xué)位,因?yàn)榛ヂ?lián)網(wǎng)行業(yè)是一個需要知識儲備與邏輯能力的行業(yè),高學(xué)歷往往是尋找工作的必要條件。③解決問題的能力,求職者需要積累大量的工作經(jīng)驗(yàn),這樣才能在找工作時具備與面試官談判的能力??偟膩碚f,首要任務(wù)是增強(qiáng)自己的能力,再結(jié)合自身條件,來選擇是否在大城市工作。