常曉花,熊 翱
(北京郵電大學(xué) 網(wǎng)絡(luò)技術(shù)研究院,北京 100876)
銷售量是衡量一個(gè)公司銷售業(yè)績(jī)好壞的重要標(biāo)志.銷售量的多少不僅影響著公司的盈利和發(fā)展,同時(shí)也影響著整個(gè)國(guó)家的經(jīng)濟(jì)命脈.因此,銷售量預(yù)測(cè)的精確性和科學(xué)性具有重要的研究?jī)r(jià)值.
銷售數(shù)據(jù)是一種動(dòng)態(tài)的、非線性的、不規(guī)則的時(shí)間序列數(shù)據(jù),受季節(jié)氣候、突發(fā)事件、經(jīng)銷商的銷售能力、下級(jí)經(jīng)銷商的數(shù)量等等各種因素的影響.國(guó)內(nèi)外學(xué)者對(duì)各行各業(yè)銷售量預(yù)測(cè)的方法,主要有神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)法[1]、聚類預(yù)測(cè)[2]方法等.傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)方法,容易陷入局部極小值,而達(dá)不到預(yù)測(cè)的精度;基于聚類的銷量預(yù)測(cè)方法,初始聚類中心的選擇對(duì)聚類結(jié)果的影響較大,并且需要不斷調(diào)整聚類中心,所以數(shù)據(jù)量較大時(shí),算法時(shí)間開銷也會(huì)非常大.
本文針對(duì)上述問(wèn)題,提出了基于改進(jìn)Adaboost算法[3]的隨機(jī)森林預(yù)測(cè)方法,該方法不存在神經(jīng)網(wǎng)絡(luò)算法會(huì)陷入局部極小值的缺點(diǎn),且在數(shù)據(jù)量較大和較小時(shí)都能夠維持一定的預(yù)測(cè)精度,對(duì)不平衡數(shù)據(jù)集來(lái)說(shuō),能夠平衡誤差,同時(shí)訓(xùn)練速度快,能夠?qū)崿F(xiàn)并行化.本文利用該改進(jìn)的Adaboost隨機(jī)森林預(yù)測(cè)方法,對(duì)某醫(yī)療器械銷售公司的實(shí)際銷售數(shù)據(jù)集進(jìn)行了仿真實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果證明了本文所提方法的有效性.
隨機(jī)森林[4]是Bagging算法和改進(jìn)的決策樹算法的結(jié)合.
Bagging算法是多個(gè)個(gè)體弱學(xué)習(xí)器各自學(xué)習(xí),然后通過(guò)集合策略來(lái)得到最終的強(qiáng)學(xué)習(xí)器,個(gè)體弱學(xué)習(xí)器之間不存在依賴關(guān)系,個(gè)體弱學(xué)習(xí)器的訓(xùn)練集通過(guò)隨機(jī)采樣得到,隨機(jī)采樣表示每次從訓(xùn)練集中采集固定個(gè)數(shù)的樣本,但是采集后都將樣本放回;普通的決策樹算法,會(huì)在節(jié)點(diǎn)所有樣本特征中選擇一個(gè)最優(yōu)的特征來(lái)做決策樹的左右子樹劃分.但是,隨機(jī)森林中所用的決策樹算法,則是通過(guò)隨機(jī)選擇節(jié)點(diǎn)上的一部分樣本特征,再在其中選擇一個(gè)最優(yōu)的特征來(lái)做決策樹的左右子樹劃分.
隨機(jī)森林算法,就是將改進(jìn)的決策樹算法作為弱學(xué)習(xí)器,然后使用Bagging算法對(duì)弱學(xué)習(xí)器進(jìn)行集成學(xué)習(xí)而得到的.該算法結(jié)合了Bagging算法的隨機(jī)采樣以及決策樹算法的隨機(jī)特征選擇,這兩個(gè)“隨機(jī)”性,因而其泛化能力強(qiáng),不容易陷入過(guò)擬合.同時(shí),由于Bagging算法中弱學(xué)習(xí)器之間相互獨(dú)立,隨機(jī)森林中的決策樹可以并行學(xué)習(xí),因而,隨機(jī)森林算法的時(shí)間效率高.
隨機(jī)森林的訓(xùn)練過(guò)程如下:
(1)給定訓(xùn)練集S,測(cè)試集T,特征維數(shù)F.確定參數(shù):使用到的CART的數(shù)量t,每棵樹的深度d,每個(gè)節(jié)點(diǎn)使用到的特征數(shù)量f.終止條件:節(jié)點(diǎn)上最少樣本數(shù)s,節(jié)點(diǎn)上最少的信息增益m.
對(duì)于第1-t棵樹,i=1-t:
乳腺肉瘤是發(fā)生于乳腺間葉組織的惡性腫瘤,按其組織來(lái)源分為間葉組織類,主要包括乳腺脂肪肉瘤,血管肉瘤及纖維組織肉瘤等;混合組織類,主要為乳腺葉狀囊肉瘤和癌肉瘤。
(2)從S中有放回的抽取大小和S一樣的訓(xùn)練集S(i),作為根節(jié)點(diǎn)的樣本,從根節(jié)點(diǎn)開始訓(xùn)練.
(3)如果當(dāng)前節(jié)點(diǎn)上達(dá)到終止條件,則設(shè)置當(dāng)前節(jié)點(diǎn)為葉子節(jié)點(diǎn),如果是分類問(wèn)題,該葉子節(jié)點(diǎn)的預(yù)測(cè)輸出為當(dāng)前節(jié)點(diǎn)樣本集合中數(shù)量最多的那一類c(j),概率p為c(j)占當(dāng)前樣本集的比例;如果是回歸問(wèn)題,預(yù)測(cè)輸出為當(dāng)前節(jié)點(diǎn)樣本集各個(gè)樣本值的平均值.然后繼續(xù)訓(xùn)練其他節(jié)點(diǎn).如果當(dāng)前節(jié)點(diǎn)沒(méi)有達(dá)到終止條件,則從F維特征中無(wú)放回的隨機(jī)選取f維特征.利用這f維特征,尋找分類效果最好的一維特征k及其閾值th,當(dāng)前節(jié)點(diǎn)上樣本第k維特征小于th的樣本被劃分到左節(jié)點(diǎn),其余的被劃分到右節(jié)點(diǎn).繼續(xù)訓(xùn)練其他節(jié)點(diǎn).
(4)重復(fù)(2),(3),直到所有節(jié)點(diǎn)都訓(xùn)練過(guò)了或者被標(biāo)記為葉子節(jié)點(diǎn).
(5)重復(fù)(2),(3),(4),直到所有CART都被訓(xùn)練過(guò).
利用隨機(jī)森林的預(yù)測(cè)過(guò)程如下:
對(duì)于第1-t棵樹,i=1-t:
(1)從當(dāng)前樹的根節(jié)點(diǎn)開始,根據(jù)當(dāng)前節(jié)點(diǎn)的閾值th,判斷是進(jìn)入左節(jié)點(diǎn)還是進(jìn)入右節(jié)點(diǎn),直到到達(dá),某個(gè)葉子節(jié)點(diǎn),并輸出預(yù)測(cè)值.
(2)重復(fù)執(zhí)行(1),直到所有t棵樹都輸出了預(yù)測(cè)值.如果是分類問(wèn)題,則輸出為所有樹中預(yù)測(cè)概率總和最大的那一個(gè)類,即對(duì)每個(gè)c(j)的p進(jìn)行累計(jì);如果是回歸問(wèn)題,則輸出為所有樹的輸出的平均值.
表1 Bagging框架的參數(shù)
表2 CART決策樹的參數(shù)
Adaboost是一種迭代算法.其主要過(guò)程分為三步,首先對(duì)訓(xùn)練樣本進(jìn)行權(quán)重初始化;然后對(duì)弱學(xué)習(xí)器進(jìn)行訓(xùn)練,如果某個(gè)樣本點(diǎn)的預(yù)測(cè)值達(dá)到了所要求的精度,那么在構(gòu)造下一個(gè)訓(xùn)練集時(shí),它的權(quán)重就降低,相反,則權(quán)重提高,接著權(quán)重更新過(guò)的樣本集被用于訓(xùn)練下一個(gè)學(xué)習(xí)器,整個(gè)訓(xùn)練過(guò)程如此迭代進(jìn)行;最后將各個(gè)學(xué)習(xí)器組合成強(qiáng)學(xué)習(xí)器[5].
Adaboost算法最終得到的強(qiáng)學(xué)習(xí)器,由各個(gè)弱學(xué)習(xí)器與其權(quán)重結(jié)合而成,弱學(xué)習(xí)器的權(quán)重由每個(gè)弱學(xué)習(xí)器的誤差率決定,誤差率小的弱學(xué)習(xí)器,其權(quán)重則大,這使其在最終的強(qiáng)學(xué)習(xí)器函數(shù)中起較大的決定作用.
因此,Adaboost算法中的個(gè)體學(xué)習(xí)器之間有很強(qiáng)的依賴關(guān)系,也因此導(dǎo)致其有預(yù)測(cè)精度高的優(yōu)點(diǎn).并且,Adaboost算法[6]提供的是一個(gè)學(xué)習(xí)框架,這使其應(yīng)用非常靈活,可以使用各種分類回歸模型來(lái)構(gòu)建弱學(xué)習(xí)器.
本文將隨機(jī)森林算法與Adaboost算法框架結(jié)合,提出了一種改進(jìn)Adaboost算法的隨機(jī)森林銷售量預(yù)測(cè)算法,以下稱為預(yù)測(cè)算法.
該算法詳細(xì)步驟如下:
(2)隨機(jī)森林弱預(yù)測(cè)模型[8]預(yù)測(cè).通過(guò)選取合適隨機(jī)森林算法參數(shù)值,構(gòu)造不同的隨機(jī)森林弱預(yù)測(cè)器,對(duì)于t=1,...,T進(jìn)行T次迭代,在訓(xùn)練第t個(gè)弱預(yù)測(cè)器時(shí),使用隨機(jī)森林回歸類對(duì)數(shù)據(jù)進(jìn)行訓(xùn)練,建立回歸模型gt(x)→y.具體步驟如下:
5)進(jìn)行第t+1次迭代;
6)如果迭代次數(shù)達(dá)到T,則繼續(xù)7),否則返回1),直到達(dá)到最大迭代次數(shù);
最終強(qiáng)預(yù)測(cè)器函數(shù)的輸出公式如下:
本文提出的基于Adaboost的隨機(jī)森林預(yù)測(cè)算法,結(jié)合了隨機(jī)森林算法和Adaboost算法的優(yōu)點(diǎn),時(shí)間效率高,泛化能力強(qiáng),同時(shí)由于Adaboost的迭代,預(yù)測(cè)精度較高.預(yù)測(cè)算法使用了弱學(xué)習(xí)器中每次學(xué)習(xí)后的預(yù)測(cè)錯(cuò)誤率以及樣本的平均相對(duì)誤差作為影響弱學(xué)習(xí)器權(quán)重的因子,使得在下一個(gè)學(xué)習(xí)器中能夠更注重上一個(gè)學(xué)習(xí)器預(yù)測(cè)誤差較大的樣本,從而提高了預(yù)測(cè)的精度.
本文的實(shí)驗(yàn)數(shù)據(jù)來(lái)自某醫(yī)療器械銷售公司的銷售數(shù)據(jù).共有240組樣本數(shù)據(jù),部分?jǐn)?shù)據(jù)如表3所示,tmp_max表示最高氣溫均值,tmp_min表示最低氣溫均值,prob_rain表示降雨概率(已做處理),lstwk_sales表示上周的銷量,lsttwo_sales表示上上周的銷量,單位為實(shí)際銷售單位EA.
表3 實(shí)驗(yàn)部分?jǐn)?shù)據(jù)
選取樣本中的150組數(shù)據(jù)進(jìn)行訓(xùn)練,其余90組作為測(cè)試樣本.然后用本文提出的方法進(jìn)行訓(xùn)練.實(shí)驗(yàn)采用python[9,10]進(jìn)行仿真,實(shí)驗(yàn)過(guò)程中,隨機(jī)森林決策樹個(gè)數(shù)設(shè)為100,隨機(jī)森林其余參數(shù)均選擇默認(rèn)值,構(gòu)成弱預(yù)測(cè)器.根據(jù)本文提出的預(yù)測(cè)方法,設(shè)置Adaboost算法的最大迭代次數(shù)T為20,調(diào)整系數(shù)k為1.1,相對(duì)誤差率閾值設(shè)0.1.
表4所示為部分預(yù)測(cè)值及相對(duì)誤差,圖1是使用改進(jìn)Adaboost方法和未使用Adaboost方法的預(yù)測(cè)結(jié)果對(duì)比圖.實(shí)驗(yàn)結(jié)果表明,預(yù)測(cè)數(shù)據(jù)誤差率小于0.1,使用基于Adaboost改進(jìn)后的算法能夠比改進(jìn)之前的預(yù)測(cè)率提高約12%,證明了本文提出的算法的有效性.
表4 室內(nèi)光流擾動(dòng)效應(yīng)檢測(cè)
圖1 改進(jìn)前后銷量預(yù)測(cè)對(duì)比圖
近年來(lái),隨著醫(yī)療技術(shù)的不斷更新發(fā)展,醫(yī)療器材的需求量也不斷增加,大量的銷售數(shù)據(jù)銷售信息有待挖掘,本文利用改進(jìn)的Adaboost方法,初始化訓(xùn)練樣本權(quán)重,并利用隨機(jī)森林算法訓(xùn)練得到若預(yù)測(cè)器,后又結(jié)合多個(gè)弱預(yù)測(cè)器,形成強(qiáng)預(yù)測(cè)器的方法,對(duì)銷售數(shù)據(jù)集進(jìn)行了分析和研究,同時(shí)提升了隨機(jī)森林算法的回歸性能,但是本文提出的方法,只是通過(guò)改進(jìn)Adaboost算法結(jié)合隨機(jī)森林算法來(lái)提高算法的回歸性能,并沒(méi)有考慮通過(guò)改進(jìn)隨機(jī)森林算法本身來(lái)提高算法的有效性,所以未來(lái)還有很大的提升改進(jìn)空間.
1陳蓉.基于BP神經(jīng)網(wǎng)絡(luò)的零售產(chǎn)品銷量預(yù)測(cè)方法.經(jīng)營(yíng)管理者,2015,(4):10-11.
2王建偉.基于商品聚類的電商銷量預(yù)測(cè).計(jì)算機(jī)系統(tǒng)應(yīng)用,2016,25(10):162-168.[doi:10.15888/j.cnki.csa.005423]
3曹瑩,苗啟廣,劉家辰,等.AdaBoost算法研究進(jìn)展與展望.自動(dòng)化學(xué)報(bào),2013,39(6):745-758.
4丁君美,劉貴全,李慧.改進(jìn)隨機(jī)森林算法在電信業(yè)客戶流失預(yù)測(cè)中的應(yīng)用.模式識(shí)別與人工智能,2015,28(11):1041-1049.
5李翔,朱全銀.Adaboost算法改進(jìn)BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)研究.計(jì)算機(jī)工程與科學(xué),2013,35(8):96-102.
6張禹,馬駟良,張忠波,等.基于Adaboost算法與神經(jīng)網(wǎng)絡(luò)的快速虹膜檢測(cè)與定位算法.吉林大學(xué)學(xué)報(bào)(理學(xué)版),2006,44(2):233-236.
7李翔,朱全銀.基于Adaboost算法和BP神經(jīng)網(wǎng)絡(luò)的稅收預(yù)測(cè).計(jì)算機(jī)應(yīng)用,2012,32(12):3558-3560,3568.
8李威威,李春青,聶敬云,等.膜生物反應(yīng)器膜污染的隨機(jī)森林預(yù)測(cè)模型.計(jì)算機(jī)應(yīng)用,2015,35(SI):135-137.
9Richert W,Coelho LP.Python語(yǔ)言構(gòu)建機(jī)器學(xué)習(xí)系統(tǒng).南京:東南大學(xué)出版社,2016.
10Hetland ML.Python基礎(chǔ)教程.2版.司維,曾軍崴,譚穎華,譯.北京:人民郵電出版社,2014.