本文是Python商業(yè)數(shù)據(jù)挖掘?qū)崙?zhàn)的第3篇
前言組合算法也叫集成學(xué)習(xí),,在金融行業(yè)或非圖像識(shí)別領(lǐng)域,,效果有時(shí)甚至比深度學(xué)習(xí)還要好。能夠理解基本原理并將代碼用于實(shí)際的業(yè)務(wù)案例是本文的目標(biāo),,本文將詳細(xì)介紹如何利用Python實(shí)現(xiàn)集成學(xué)習(xí)中隨機(jī)森林這個(gè)經(jīng)典的方法來預(yù)測寬帶客戶的流失,主要將分為兩個(gè)部分:
集成學(xué)習(xí)本文的主角是隨機(jī)森林,所以我們將以隨機(jī)森林所屬的分支 —— 裝袋法 入手,,深入淺出該集成學(xué)習(xí)方法的原理步驟。裝袋法流程如下 乍一看圖中的步驟可能有些復(fù)雜,,現(xiàn)在來逐步拆解,。裝袋法中的裝袋二字是精髓,顧名思義即將多個(gè)模型裝入同一個(gè)袋子后,,讓這個(gè)袋子作為一個(gè)新的模型來實(shí)現(xiàn)預(yù)測需求,,僅此而已。換句話說,,即把多個(gè)模型組合起來形成一個(gè)新的大模型,,這個(gè)大模型最終給出的預(yù)測結(jié)果是由這多個(gè)小模型綜合決定的,決定方式為少數(shù)服從多數(shù),。 假設(shè)有10萬條原始數(shù)據(jù),,用這些數(shù)據(jù)來做十棵決策樹(當(dāng)然也可以是其他模型),最后這10棵樹將被裝進(jìn)了同一個(gè)袋子中,。這時(shí)候取其中一條數(shù)據(jù)放入這個(gè)袋子,,便會(huì)得出10個(gè)預(yù)測值(每棵樹各一個(gè)),假如其中三棵樹給出的預(yù)測值為0,,剩余的七棵給出的為1,,那我們便可知道這個(gè)袋子對(duì)這個(gè)數(shù)據(jù)的預(yù)測結(jié)果為 0 的概率是 3/10。 為了更深入的理解裝袋法,,下面將回答三個(gè)與裝袋法有關(guān)的常見問題: 問:袋子中的每個(gè)模型使用的樣本量范圍應(yīng)為多少合適,? 答:如果是上面的例子,,袋子里面有十棵樹,源數(shù)據(jù)總量為 10萬 條,,則每棵樹取用的樣本量的最小值為最少是1w個(gè)(10w/10棵 = 1w/棵),,因?yàn)橹辽僖WC不能浪費(fèi)樣本,但每棵樹最多可取用多少樣本呢,?其實(shí)在樣本量已知,,同一袋子中模型個(gè)數(shù)為n的情況下,樣本的選擇比例為1/n ~ 0.8最好,。每個(gè)小模型取用 100% 的樣本是絕對(duì)沒有意義的,,那就跟沒抽是一樣的,這樣也就沒有體現(xiàn)出裝袋,,只有每個(gè)模型用到的數(shù)據(jù)都有一定的不同,,組合起來后每個(gè)的投票(預(yù)測結(jié)果)也才有意義。 問:袋中模型們之間的相關(guān)性會(huì)影響最后的決策結(jié)果嗎,? 答:裝袋法思路最重要的一點(diǎn):袋子中每個(gè)模型之間不能相關(guān),,越不相關(guān)越好,這里的不相關(guān)主要體現(xiàn)在用于訓(xùn)練每個(gè)模型的樣本不一樣,。其次,,每個(gè)模型的精度越高越好,這樣它的投票才更有價(jià)值,。 PS:訓(xùn)練模型的樣本不一樣這一點(diǎn)可以理解為總統(tǒng)選舉,,抽 10 波選民來投票,這 10 波選民的差異性越大越好,,這樣一來,,只有在選民千差萬別的情況下你依然脫穎而出,才足以說明你的實(shí)力,,如果這10波選民中每一波之間的差異性都很小,,比如都是本來就偏袒于總統(tǒng)候選人,那投票結(jié)果的說服力就會(huì)大減,。 問:上面所說的模型精度高是不是哪怕模型很復(fù)雜也可以,,如果每個(gè)模型的精度高但都過度擬合怎么辦? 答:在裝袋法中,,模型是越精確越好,,哪怕是過度擬合的也沒有關(guān)系。因?yàn)橐粋€(gè)模型要想在訓(xùn)練集上做到越精確越好,,而精確程度與模型的復(fù)雜度大多是成正比的,,所以出現(xiàn)過擬合的情況也是正常且情有可原的。復(fù)雜和過度擬合只是對(duì)袋子中每個(gè)模型而言,,因?yàn)樽詈蠖紩?huì)被加權(quán),,所以整個(gè)袋子(整體)并不會(huì)出現(xiàn)過度擬合的情況,。 隨機(jī)森林隨機(jī)森林的實(shí)現(xiàn)步驟如下: 有關(guān)隨機(jī)森林算法,本文說明以下幾個(gè)問題 問:為什么在列上也要隨機(jī)抽樣,? 答:在引入筆者最最喜歡的一個(gè)比喻之前,,先來看一個(gè)實(shí)際的業(yè)務(wù)場景,來自某城市商業(yè)銀行,。我們有一大個(gè)電子表格存著大量的歷史數(shù)據(jù),,大概50多個(gè)變量(50多列),變量們來自幾個(gè)不同的公司如人行,,電信等(同一個(gè)客戶在不同公司),,最后希望預(yù)測的是該客戶是否會(huì)違約。電子表格組成如下: 而根據(jù)基礎(chǔ)的業(yè)務(wù)知識(shí)可知,,與銀行有關(guān)的數(shù)據(jù)中往往會(huì)存在許多缺失值,,以上圖為例,通常情況下只有待預(yù)測的變量這一列的數(shù)據(jù)是齊全的,,畢竟客戶們是否違約這個(gè)行為的歷史數(shù)據(jù)很容易查找,,但藍(lán)框和綠框這兩部分的缺失值往往較多,而且較隨意,,具體隨意程度參見下圖: 紅框表示數(shù)據(jù)缺失,,這里只展示了部分行和部分列數(shù)據(jù),,如果這份數(shù)據(jù)表的規(guī)模為 4萬行 * 50列,,那這數(shù)據(jù)缺失的分布得有多隨意啊 ???,?所以,,到底該如何充分利用這殘次不齊的數(shù)據(jù)就成了呈待解決的關(guān)鍵問題。這時(shí)候就可以祭出超級(jí)生動(dòng)形象的 “島嶼 - 湖泊 - 椰子樹”比喻了:
正因?yàn)槭切辛卸茧S機(jī),,才能夠做到真正的把整個(gè)數(shù)據(jù)表隨機(jī)切分成多份,每個(gè)模型使用一份,,只要模型的數(shù)量足夠,,總有模型能夠在最大程度上獲取數(shù)據(jù)集的價(jià)值。而且因變量的分類往往又是極不平衡的,,可以參考原理+代碼|手把手教你使用Python實(shí)戰(zhàn)反欺詐模型,。至于如何將這些種好的樹的信息又再收集,,便可以將陸地上比較近的幾棵樹上面再弄一個(gè)收集器,把這幾棵樹從陸地上收集到的養(yǎng)分再遞進(jìn)一層匯總,,最終實(shí)現(xiàn)陸地養(yǎng)分匯總于樹木,,樹木養(yǎng)分匯總于收集器,收集器養(yǎng)分匯總于更上層的另一個(gè)收集器,,最終實(shí)現(xiàn)整片數(shù)據(jù)海洋中多個(gè)島嶼的信息匯總,,這便是周志華團(tuán)隊(duì)和螞蟻金服的合作的用分布式深度隨機(jī)森林算法檢測套現(xiàn)欺詐。 隨機(jī)森林第一步之后的操作完全可以參照集成學(xué)習(xí)——裝袋法中提及的步驟,。 問:既然每個(gè)模型給出的預(yù)測結(jié)果最后都會(huì)被加權(quán),,所以隨機(jī)森林中每棵決策樹的權(quán)重是多少? 答:隨機(jī)森林中每棵決策樹的權(quán)重都是一樣的,,如果這個(gè)袋子中有 10 棵決策樹(或者其他模型),,那每棵樹給出的預(yù)測結(jié)果的權(quán)重便是 1/10,這是隨機(jī)森林的特性,。如果權(quán)重不一樣的話,,便是后續(xù)推文會(huì)提及的Adaboost等集成學(xué)習(xí)中的提升分支了。 問:裝袋法中袋子中的模型越多越好嗎,?袋中用來訓(xùn)練每個(gè)模型的源數(shù)據(jù)比例也是越多越好嗎,? 答:袋子中模型多一點(diǎn)好,袋中用來訓(xùn)練每個(gè)模型的源數(shù)據(jù)比例小一點(diǎn)好,,但這并不代表越多越好與越小越好,,還得結(jié)合數(shù)據(jù)集特性和一些深層次的模型算法知識(shí)。 裝袋法的優(yōu)勢如下:
隨機(jī)森林算法的優(yōu)點(diǎn):
Python實(shí)戰(zhàn)數(shù)據(jù)探索本次實(shí)戰(zhàn)目標(biāo)為演示隨機(jī)森林的用法和調(diào)優(yōu)方法,。因?yàn)榧蓪W(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)一樣,都屬于解釋性較差的黑盒模型,,所以我們無需過分探究數(shù)據(jù)集中每個(gè)變量的具體含義,,只需關(guān)注最后一個(gè)變量 import pandas as pd 參數(shù)說明本代碼文件只為演示隨機(jī)森林的用法和調(diào)優(yōu)方法,,所以數(shù)據(jù)參數(shù)我們只需關(guān)注最后一個(gè)broadband 即可
現(xiàn)在查看因變量 from collections import Counter 接著拆分測試集與訓(xùn)練集,,客戶
決策樹建模我們先進(jìn)行完整的決策樹建模來和隨機(jī)森林進(jìn)行對(duì)比 import sklearn.tree as tree
隨機(jī)森林建模隨機(jī)森林建模一樣是使用網(wǎng)格搜索,有關(guān)Python實(shí)現(xiàn)隨機(jī)森林建模的詳細(xì)參數(shù)解釋可以看代碼的注釋
可以看到,,模型的精度大大提升 為什么要打印梯度優(yōu)化給出的最佳參數(shù),?打印梯度優(yōu)化結(jié)果的最佳參數(shù)的目的是為了判斷這個(gè)分類模型的各種參數(shù)是否在決策邊界上,簡言之,,我們不希望決策邊界限制了這個(gè)模型的效果,。(通常這時(shí)候會(huì)先把復(fù)雜度放一邊) 不難發(fā)現(xiàn),參數(shù) ''' 現(xiàn)在來查看再次建模的結(jié)果 |
|