版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第6章監(jiān)督學(xué)習(xí)6.1監(jiān)督學(xué)習(xí)的概念監(jiān)督學(xué)習(xí)是指從給定的一組帶標(biāo)簽的數(shù)據(jù)中學(xué)習(xí)輸入(特征變量)和輸出(目標(biāo)變量)的映射關(guān)系,當(dāng)新的數(shù)據(jù)到來時,可以根據(jù)這個映射關(guān)系預(yù)測新數(shù)據(jù)的結(jié)果。按目標(biāo)變量的類型,監(jiān)督學(xué)習(xí)又可以分為分類和回歸:分類:當(dāng)預(yù)測目標(biāo)是離散型時,即預(yù)測類別,學(xué)習(xí)任務(wù)為分類任務(wù)。例如,預(yù)測一位企業(yè)的員工是否會離職?常用的算法是分類算法,例如決策樹分類、樸素貝葉斯分類、邏輯回歸等?;貧w:當(dāng)預(yù)測目標(biāo)是連續(xù)型時,即預(yù)測值大小,學(xué)習(xí)任務(wù)為回歸任務(wù)。例如,預(yù)測一輛新造的汽車價格。常用的算法就是回歸算法,例如線性回歸、嶺回歸等。有些機器學(xué)習(xí)的算法,例如神經(jīng)網(wǎng)絡(luò)、決策樹、隨機森林、K-近鄰等,既適用于連續(xù)型目標(biāo)變量也適用于離散型目標(biāo)變量。監(jiān)督學(xué)習(xí)的流程如圖6-1所示:選擇一個適合目標(biāo)任務(wù)的數(shù)學(xué)模型,例如決策樹、線性回歸等模型。先把一部分已知的“問題和答案”,即帶標(biāo)簽的訓(xùn)練數(shù)據(jù)集,給機器去學(xué)習(xí),監(jiān)督兩字體現(xiàn)這里。機器從訓(xùn)練數(shù)據(jù)集中總結(jié)出了自己的“方法論”。人類把“新的問題”,即新數(shù)據(jù)集,給機器,讓機器使用學(xué)習(xí)到的方法論去解答。6.2模型評價6.2.1評估方法對于收集到的一份數(shù)據(jù)集
D,同時要在D上進(jìn)行訓(xùn)練和測試,因此要把D分成訓(xùn)練集和測試集。常用的基于數(shù)據(jù)隨機選樣劃分的評估方法有留出法和交叉驗證。1.留出法(HoldOut)在留出法中,給定的數(shù)據(jù)集隨機地劃分成兩個獨立互斥的集合:訓(xùn)練集和測試集。一般情況下,30%的數(shù)據(jù)分配到測試集,其余的數(shù)據(jù)分配到訓(xùn)練集。使用訓(xùn)練集訓(xùn)練學(xué)習(xí)器,推導(dǎo)出模型,模型的性能使用測試集進(jìn)行評估,檢驗?zāi)P偷臏y試誤差,進(jìn)而估計模型的泛化能力。使用留出法進(jìn)行模型評價時,更好的方法是將數(shù)據(jù)劃分為三個部分:訓(xùn)練集、測試集和驗證集,如圖6-2所示。訓(xùn)練集用來模型擬合,估計出模型參數(shù);驗證集用來調(diào)整模型參數(shù),得到更優(yōu)的模型;測試集用來衡量模型性能優(yōu)劣。圖6-2留出法(HoldOut)在數(shù)據(jù)樣本不是很多的情況下,則需要分層抽樣,這樣可以保證訓(xùn)練集和測試集中各類樣本的比例與原數(shù)據(jù)集是一致的,這樣的劃分結(jié)果也更具代表性。關(guān)于百分比例的選擇,理論上來說是要用D中的數(shù)據(jù)來建模的,因此訓(xùn)練集占比越大,建模能使用的數(shù)據(jù)信息就越多,但是此時測試集數(shù)據(jù)過少,測試結(jié)果不具有普遍性。因此需要根據(jù)實際情況來選擇,一般情況下會選擇30%左右的數(shù)據(jù)作為測試集。留出法劃分?jǐn)?shù)據(jù)集的效果還是跟測試集的選取密切相關(guān),最終模型表現(xiàn)的好壞與初始數(shù)據(jù)的劃分結(jié)果有很大的關(guān)系,具有一定的偶然性。為了減少這種偶然性,可以選擇多次劃分?jǐn)?shù)據(jù)集將最后結(jié)果取平均值的方式去處理。2.交叉驗證(CrossValidation)交叉驗證就是對原始樣本數(shù)據(jù)進(jìn)行切分,然后組合成為多組不同的訓(xùn)練集和測試集,用訓(xùn)練集訓(xùn)練模型,用測試集評估模型。某次的訓(xùn)練集可能是下次的測試集,故而稱為交叉驗證。交叉驗證的方法有K折交叉驗證和留一交叉驗證,其中K折交叉驗證應(yīng)用較為廣泛。(1)K折交叉驗證(K-foldCrossValidation)將數(shù)據(jù)集隨機劃分為K個互不相交的子集或者“折”:S1,S2,S3,……,Sk,每個折的大小大致相等。每次選取K-1份作為訓(xùn)練集,用剩下的1份作為測試集,進(jìn)行訓(xùn)練和測試。訓(xùn)練和測試進(jìn)行K次,每個子樣本測試一次,得到K次不同的測試效果,平均K次的結(jié)果作為最終的模型效果。這個方法的優(yōu)勢在于同時重復(fù)運用隨機產(chǎn)生的子樣本進(jìn)行訓(xùn)練和測試,測試結(jié)果減少偶然性,更準(zhǔn)確地評估模型。關(guān)于K的選擇,通常來說,如果訓(xùn)練集相對較小,則增大K值,這樣在每次迭代過程中將會有更多數(shù)據(jù)用于模型訓(xùn)練,同時算法時間延長;如果訓(xùn)練集相對較大,則減小K值,這樣可以降低模型在不同的數(shù)據(jù)塊上進(jìn)行重復(fù)擬合的計算成本,在平均性能的基礎(chǔ)上獲得模型的準(zhǔn)確評估。一般地,建議使用10折交叉驗證,因為它具有相對低的偏置和方差。(2)留一驗證(LeaveOneOut)留一驗證是只使用原樣本中的一個樣本來當(dāng)做測試集,而剩余的樣本當(dāng)做訓(xùn)練集。這個步驟一直持續(xù)到每個樣本都被當(dāng)過一次測試集。它是K-fold交叉驗證的一種特例,即K與樣本數(shù)量相等的時候。6.2.2
評估指標(biāo)對于監(jiān)督學(xué)習(xí)訓(xùn)練得到的模型,到底如何評價一個模型預(yù)測的好壞呢?不同模型預(yù)測的結(jié)果如何比較?一般可以使用評估指標(biāo)來進(jìn)行模型評價和比較。評估指標(biāo)有兩個作用:了解模型的泛化能力,可以通過同一個評估指標(biāo)來對比不同模型,從而知道哪個模型相對較好,哪個模型相對較差??梢酝ㄟ^評估指標(biāo)來逐步優(yōu)化模型,而評估方法提供了不同情景下使用這些指標(biāo)對模型進(jìn)行評價。用于模型評價的評估指標(biāo)有很多,按照類別可以分為:適用于分類模型:混淆矩陣、準(zhǔn)確率、查準(zhǔn)率、查全率、F1、ROC曲線等。適用于回歸模型:MSE、RMSE、MAE、MAPE、R-Square、AdjustR-Square等。1.分類算法的評估指標(biāo)分類模型常用的幾個評估指標(biāo)都是基于混淆矩陣構(gòu)建。混淆矩陣如表6-1所示。
表6-1混淆矩陣
實際值預(yù)測值正例反例正例真正例(TP)假正例(FP)反例假反例(FN)真反例(TN)真正例(TP):模型成功將正例預(yù)測為正例。真反例(TN):模型成功將反例預(yù)測為反例。假反例(FN):模型將正例錯誤預(yù)測為反例。假正例(FP):模型將反例錯誤預(yù)測為正例。準(zhǔn)確率
(Accuracy)準(zhǔn)確率是一個描述模型總體準(zhǔn)確情況的百分比指標(biāo),主要用來說明模型的總體預(yù)測準(zhǔn)確情況,計算公式如下:準(zhǔn)確率=(真正例+真反例)/N(6-1)準(zhǔn)確率雖然可以判斷總體的正確率,但是在樣本嚴(yán)重不平衡的情況下,并不能作為很好的指標(biāo)來衡量結(jié)果。比如有一個預(yù)測客戶流失的模型,數(shù)據(jù)集有84335條是不流失客戶,2672條為流失客戶,該模型把所有客戶都判斷為不流失客戶(即沒有發(fā)現(xiàn)任何流失客戶),這時準(zhǔn)確率為
84335/(84335+2672)=96.92%。雖然這時的準(zhǔn)確率很高,但是該模型沒有發(fā)現(xiàn)流失客戶,所以該模型其實很糟糕。(2)查準(zhǔn)率(Precision)對于預(yù)測問題來說,往往關(guān)注的并不是模型的準(zhǔn)確率。例如對于客戶流失問題,更多地會關(guān)注預(yù)測流失且實際流失的那部分人。即提供的預(yù)測流失名單中到底最后有百分之多少真正流失了。查準(zhǔn)率用來反映提供名單的精準(zhǔn)性,也叫精準(zhǔn)率。它是所有預(yù)測為正例的樣本中,實際為正例的樣本所占的比例,計算公式如下:
查準(zhǔn)率=真正例/(真正例+假正例)
(6-2)查準(zhǔn)率表示對正樣本結(jié)果中的預(yù)測準(zhǔn)確程度,而準(zhǔn)確率是對所有樣本結(jié)果的預(yù)測準(zhǔn)確程度。查準(zhǔn)率適用的場景是需要盡可能地把所需的類別檢測準(zhǔn)確,而不在乎這些類別是否都被檢測出來。(3)查全率(Recall)只是查準(zhǔn)率高似乎也有問題,還是以客戶流失問題來說,假設(shè)通過數(shù)據(jù)挖掘模型只給出了一個20人的流失名單,結(jié)果該名單中有16個人確實流失了,這個模型的查準(zhǔn)率達(dá)到了80%,相當(dāng)不錯,可是問題是最終有200個人流失,而模型只發(fā)現(xiàn)了其中的16個,這樣的模型性能顯然是不會被認(rèn)可。因此就需要使用查全率,查全率也稱召回率或命中率,主要是反映正例的覆蓋程度,它是實際為正例的樣本中被正確預(yù)測為正例的樣本所占的比例,計算公式如下
查全率=真正例
/(真正例+假反例)
(6-3)查全率適用的場景是需要盡可能地把所需的類別檢測出來,而不在乎結(jié)果是否準(zhǔn)確。
然而這兩者往往成正相關(guān),因為如果調(diào)高閾值,例如認(rèn)為流失概率超過90%才認(rèn)定為流失,那么會導(dǎo)致假警報率很低,但是命中率也很低;而如果調(diào)低閾值,例如認(rèn)為流失概率超過10%就認(rèn)定為流失,那么命中率就會很高,但是假警報率也會很高。因此,為了衡量一個模型的優(yōu)劣,數(shù)據(jù)科學(xué)家根據(jù)不同閾值下的命中率和假警報率繪制了ROC曲線,如圖6-3所示,其中橫坐標(biāo)為假警報率(FPR),縱坐標(biāo)為命中率(TPR)。曲線越靠近左上角,說明在相同的閾值條件下,命中率越高,假警報率越低,模型越完善。若一個學(xué)習(xí)器的ROC曲線被另一個學(xué)習(xí)器的曲線完全“包住”,那么則可以斷言后者的性能優(yōu)于前者。若兩個學(xué)習(xí)器的ROC曲線發(fā)生交叉,則難以一般性地斷言兩者孰優(yōu)孰劣,較為合理的判斷依據(jù)就是比較ROC曲線下的面積,即AUC,AUC值越大,對應(yīng)的學(xué)習(xí)器越優(yōu)越。圖6-3ROC曲線
max_depth=3max_depth=5max_depth=7max_depth=9min_samples_leaf=5DT(max_depth=3,min_samples_leaf=5)DT(max_depth=5,min_samples_leaf=5)DT(max_depth=7,min_samples_leaf=5)DT(max_depth=9,min_samples_leaf=5)min_samples_leaf=10DT(max_depth=3,min_smples_leaf=10)DT(max_depth=5,min_samples_leaf=10)DT(max_depth=7,min_samples_leaf=10)DT(max_depth=9,min_samples_leaf=10)min_samples_leaf=15DT(max_depth=3,min_samples_leaf=15)DT(max_depth=5,min_samples_leaf=15)DT(max_depth=7,min_samples_leaf=15)DT(max_depth=9,min_samples_leaf=15)表6-2決策樹算法兩個參數(shù)形成的參數(shù)網(wǎng)格6.3決策樹算法6.3.1決策樹算法介紹決策樹是一種簡單但廣泛使用的分類器,是一個由根部向下運用遞歸分割子樹的算法,以建立一個樹形結(jié)構(gòu)的分類器。樹上的每個非葉子結(jié)點表示某個屬性的測試,每一個分支代表一個分類規(guī)則,葉子結(jié)點保存著該分類規(guī)則的分類標(biāo)簽。如圖6-4所示介紹一個典型的決策樹模型:判斷哪些天氣條件下適合外出運動。6.3.2
決策樹算法實現(xiàn)決策樹算法的實現(xiàn)是一種貪心算法,它以自頂向下遞歸的劃分的方式構(gòu)造樹結(jié)構(gòu)。算法的基本策略如下:樹以代表訓(xùn)練樣本的單個結(jié)點開始。如果樣本都在同一個類,則該結(jié)點成為葉子結(jié)點,并用該類標(biāo)記。否則,算法選擇最有分類能力的屬性作為決策樹的當(dāng)前結(jié)點。根據(jù)當(dāng)前決策結(jié)點屬性的每個已知的值,每個取值形成一個分枝,有幾個取值形成幾個分枝,并據(jù)此劃分訓(xùn)練樣本,將數(shù)據(jù)劃分為若干子集。針對上一步得到的每一個子集,算法使用同樣的過程,遞歸地形成每個劃分樣本上的決策樹。一旦一個屬性出現(xiàn)在一個結(jié)點上,就不必在該結(jié)點的任何后代上考慮它。遞歸劃分步驟僅當(dāng)下列條件之一成立時停止:給定結(jié)點的所有樣本屬于同一類。沒有剩余屬性可以用來進(jìn)一步劃分樣本。在這種情況下,使用多數(shù)表決,將給定的結(jié)點轉(zhuǎn)換成樹葉,并以樣本中占比最多的類別作為該結(jié)點的類別標(biāo)記,同時也可以存放該結(jié)點樣本的類別分布。給定結(jié)點沒有樣本,則利用該結(jié)點的父結(jié)點來判斷分類標(biāo)記,并將該結(jié)點轉(zhuǎn)換成葉結(jié)點。某一結(jié)點中的樣本數(shù)低于給定的閾值。在這種情況下,使用多數(shù)表決,確定該結(jié)點的類別標(biāo)記,并將該結(jié)點轉(zhuǎn)換成葉結(jié)點。1.屬性選擇度量在決策樹算法中,最主要的一個任務(wù)是選擇一個最具分類能力的屬性,如何度量一個屬性是最有分類能力的?下面介紹幾種屬性選擇的度量指標(biāo)。信息增益信息增益表示由于特征A而使得對數(shù)據(jù)D的分類的不確定性減少的程度。信息增益的計算涉及熵和條件熵,熵和條件熵的計算公式參考第5章5.3.4節(jié),信息增益的計算公式參考第5章5.4.2節(jié)。(2)信息增益比信息增益比的計算公式參考第5章5.4.2節(jié)。(3)基尼系數(shù)(Gini)熵的計算涉及對數(shù)運算,比較耗時,基尼系數(shù)在簡化計算的同時還保留了熵的優(yōu)點?;嵯禂?shù)代表了模型的不純度,基尼系數(shù)越小,純度越高,選擇該特征進(jìn)行劈劃也越好。這和信息增益(比)正好相反。
2.連續(xù)型屬性對于連續(xù)型屬性即數(shù)值屬性,可以將分裂限定在二元分裂,屬性劈劃的關(guān)鍵是找到最佳劈劃點,尋找過程如下:對連續(xù)型變量,按從小到大的順序排列值,假設(shè)排列之后的數(shù)組表示為:a1<a2<a3<….<am。遍歷每一對相鄰的值并計算相應(yīng)的屬性選擇度量(如信息增益比等),每一對相鄰的點隱含著一個最佳劈劃點t=(ai+ai+1)/2和一個劈劃(D),選擇最大信息增益或者信息增益比,對基尼系數(shù),則選擇最小的基尼系數(shù)的劈劃點進(jìn)行劈劃。3.樹剪枝決策樹算法在學(xué)習(xí)的過程中為了盡可能正確地分類訓(xùn)練樣本,不停地對結(jié)點進(jìn)行劃分,因此會導(dǎo)致整棵樹的分枝過多,容易造成過擬合。剪枝方法可以處理這種過分適應(yīng)訓(xùn)練集數(shù)據(jù)問題,即過擬合。通常,該方法使用統(tǒng)計度量,剪去最不可靠的分枝,使樹的結(jié)構(gòu)更易于理解,提高樹的正確分類能力,即提高樹獨立于測試數(shù)據(jù)正確分類的可靠性。有兩種常用的剪枝方法預(yù)剪枝(pre-pruning)和后剪枝(post-pruning)。1)預(yù)剪枝:預(yù)剪枝是在構(gòu)造決策樹的過程中,先對每個結(jié)點在劃分前進(jìn)行估計,如果當(dāng)前結(jié)點的劃分不能帶來決策樹模型預(yù)測性能的提升,則不對當(dāng)前結(jié)點進(jìn)行劃分并且將當(dāng)前結(jié)點標(biāo)記為葉結(jié)點;2)后剪枝:后剪枝是先把整棵決策樹構(gòu)造完畢,然后自底向上的對非葉結(jié)點進(jìn)行考察,若將該結(jié)點對應(yīng)的子樹換為葉結(jié)點能夠帶來預(yù)測性能的提升,則把該子樹替換為葉結(jié)點。4.缺失值處理決策樹算法本身可以處理缺失值。當(dāng)一個被劈劃的屬性含有缺失值時,在這個屬性上是缺失的每個樣本被分成若干片斷,采用數(shù)值加權(quán)方案,按照比例將各個片斷分配到下面的每個分枝,并一直傳遞下去,這個比例是各分枝所含的樣本數(shù)目的比值,最終含有缺失值的樣本的各部分都會到達(dá)某一個葉結(jié)點,參與分類的決策。數(shù)據(jù)集含有缺失值同樣可以使用一般的屬性選擇度量來計算,只是計算的時侯不再是整數(shù)累計,而是使用加權(quán)值來計算。6.3.3
決策樹算法應(yīng)用案例通過已有的員工信息和離職表現(xiàn)來搭建相應(yīng)的員工離職預(yù)測模型,基于員工離職預(yù)測模型預(yù)測之后的員工是否會離職。1.案例概述大部分員工決定離職時,通常需經(jīng)過思考期。慰留員工的最佳時機,就是在他們產(chǎn)生離職想法之前。本案例通過數(shù)據(jù)分析的方法,構(gòu)建離職預(yù)測模型,對員工的離職進(jìn)行預(yù)測。員工離職預(yù)測模型能夠提前預(yù)判,盡早介入,針對員工最關(guān)注/不滿的問題及時提供解決方案(例如,升職加薪,教育優(yōu)惠,經(jīng)濟(jì)補償?shù)龋?,從而提高滿意度,降低員工離職風(fēng)險,特別是留住經(jīng)驗豐富的員工,避免員工“去意已決”時才進(jìn)行無效挽留。2.數(shù)據(jù)集本案例使用的數(shù)據(jù)集共有14999組歷史數(shù)據(jù),其中,3571組為離職員工數(shù)據(jù),11428組為非離職員工數(shù)據(jù),離職率為23.81%。數(shù)據(jù)集中變量的詳細(xì)描述如表6-3所示,表格中的“是否離職”列為目標(biāo)變量,剩下的字段為特征變量,用于通過一個員工的特征來判斷其是否會離職。根據(jù)這些歷史數(shù)據(jù)搭建決策樹模型來預(yù)測之后員工的離職可能性。變量名變量說明取值范圍是否離職離散型變量,共有2個類別0-未離職,1-已離職滿意度連續(xù)型變量,對公司的滿意程度0~1績效評估連續(xù)型變量,績效評估分值0~1參與過的項目數(shù)連續(xù)型變量,單位:個2~7平均每月工作時長連續(xù)型變量,單位:小時96~310工作年限連續(xù)型變量,單位:年2-10是否有過工作差錯離散型變量,共有2個類別0-沒有,1-有五年內(nèi)是否升職離散型變量,共有2個類別0-沒有,1-有職業(yè)離散型變量,共有10個類別Accounting、HR等薪資水平離散型變量,共有3個類別Low、Medium、High表6-3員工離職數(shù)據(jù)集字段含義說明3.分析過程-大數(shù)據(jù)應(yīng)用平臺本案例按照下面步驟展開分析:離職員工特征探索:探索員工離職的原因跟哪些因素有關(guān)。模型構(gòu)建和評估:基于決策樹算法,在訓(xùn)練集上構(gòu)建員工離職預(yù)測模型,并在測試集上評估模型性能。模型應(yīng)用:將離職預(yù)測模型應(yīng)用到新數(shù)據(jù)集,預(yù)測員工離職的概率。
(1)離職員工特征探索離職員工特征探索主要來分析哪些變量與員工離職密切相關(guān),離職員工有哪些特點?根據(jù)各變量的數(shù)據(jù)類型可以分為:連續(xù)變量與是否離職的關(guān)系:可以使用直方圖或者箱型圖,如果希望得到離散變量與連續(xù)變量之間關(guān)系的量化描述,可以使用方差分析。離散變量與是否離職的關(guān)系:可以使用柱狀圖或者堆積柱狀圖,如果希望得到兩個離散變量之間關(guān)系的量化描述,也可以使用交叉表。在大數(shù)據(jù)應(yīng)用平臺的自助報告中,對于本案例的數(shù)據(jù)集,采用堆積直方圖探索連續(xù)變量對公司滿意度、月均工作時長、績效評估、工作年限、參與過的項目數(shù)與離職的關(guān)系,如圖6-5所示。從圖上看,離職員工的特點如下:對公司的滿意度較低的員工越容易離職,大部分離職員工對公司滿意度小于0.5。平均月工作時長很短(117~160)或者很高(>224)的員工越容易離職,工作時長較合理(160~224)的員工離職率較低??冃гu估很低和很高的員工越容易離職,中績效的員工離職率。工作年限在3到5年間的員工越容易離職,工作年限很短或者很長的員工離職率較低。參加項目個數(shù)越多的員工離職率越大(去除項目數(shù)為2的樣本)。在大數(shù)據(jù)應(yīng)用平臺的自助報告中,采用堆積百分比柱狀圖探索離散型變量五年內(nèi)是否升職、工作差錯、薪資水平、職位與離職的關(guān)系,結(jié)果如圖6-6所示。從圖上看,離職員工的特點:未出過工作差錯的員工離職率比較高,離職率隨著薪資的增加而降低,五年內(nèi)沒有升職的員工的離職率比較大,職位與員工離職的關(guān)系不大。(2)模型構(gòu)建和評估對于企業(yè)來說,經(jīng)驗豐富的優(yōu)秀員工的離職是特別大的損失,優(yōu)秀的員工是企業(yè)爭相競爭的人才。因此,本案例將重點針對有經(jīng)驗的優(yōu)秀的員工,構(gòu)建離職預(yù)測模型。那什么樣的員工才算是優(yōu)秀的有經(jīng)驗的呢?本案例將績效評估>=0.7或者工作年限>=4或者參與過的項目數(shù)>5的這些人定義為優(yōu)秀的或者有經(jīng)驗的員工。在大數(shù)據(jù)應(yīng)用平臺的工作流功能模塊中,使用分析組件構(gòu)建分析工作流,實現(xiàn)員工離職預(yù)測模型的構(gòu)建和評估,模型構(gòu)建和評估的分析流程如圖6-7所示。提取優(yōu)秀員工使用“過濾”節(jié)點提取優(yōu)秀員工樣本集,將“過濾”節(jié)點與“員工離職數(shù)據(jù)”表相連接,優(yōu)秀員工的篩選表達(dá)式為“績效評估>=0.70OR工作年限>=4OR參與過的項目數(shù)>5”,篩選出來的優(yōu)秀員工有9772名,其中,2014組為離職員工數(shù)據(jù),7758組為非離職員工數(shù)據(jù),離職率為20.61%,與原始數(shù)據(jù)差別不大。2)劃分訓(xùn)練集和測試集使用“數(shù)據(jù)分割”節(jié)點將數(shù)據(jù)集分成二個互相排斥的子集:訓(xùn)練集和測試集。該節(jié)點有兩個輸出端口,一個是訓(xùn)練集,另一個是測試集。數(shù)據(jù)分割有兩種不同的分割方式:百分比和固定大小。每種分割方式又可以采用系統(tǒng)抽樣或者隨機抽樣進(jìn)行。如果需要在兩個子集中均保留目標(biāo)變量的各類別的原始分布,可在節(jié)點的參數(shù)設(shè)置中定義一列“分層列”,然后算法將根據(jù)分層列中各類別的樣本比例,對數(shù)據(jù)進(jìn)行分劃。本案例中,將“數(shù)據(jù)分割”節(jié)點與“過濾節(jié)點”通過端口相連接,“數(shù)據(jù)分割”節(jié)點的參數(shù)設(shè)置如圖6-8所示。數(shù)據(jù)分割后,訓(xùn)練集為6841組數(shù)據(jù),離職率為20.61%;測試集為2931,離職率為20.61%。因為采用了分層抽樣,因此兩個子集的目標(biāo)變量的類別分布均保留原始目標(biāo)變量的類別分布。3)模型構(gòu)建在訓(xùn)練集上,采用決策樹算法建立員工離職預(yù)測模型。將數(shù)據(jù)分割節(jié)點的訓(xùn)練集輸出端口與“決策樹”節(jié)點相連接,并設(shè)置決策樹節(jié)點的參數(shù)。決策樹節(jié)點的參數(shù)說明如表6-4所示。參數(shù)名稱描述預(yù)測變量從表中選擇若干列作為預(yù)測變量,可以接受數(shù)值或者字符型的列目標(biāo)變量從表中選擇一列作為目標(biāo)變量,只接受字符型的列權(quán)重用于平衡類別分布非常不均衡的數(shù)據(jù)集最小節(jié)點數(shù)目此參數(shù)是樹生長的停止條件,值越大樹生長越早停止,默認(rèn)值是2。最大樹深度此參數(shù)是樹生長的停止條件,值越小樹生長越早停止,默認(rèn)值是20。剪枝置信度此參數(shù)控制剪枝的水平,該值越低表示樹被剪枝得越簡化,默認(rèn)值是25%在本案例中,決策樹節(jié)點的參數(shù)設(shè)置為目標(biāo)變量為“是否離職”,預(yù)測變量選擇除
“是否離職”之外的所有列,最小節(jié)點數(shù)目設(shè)置為10,其余參數(shù)為默認(rèn)值。決策樹節(jié)點的輸出可以歸納出一組決策規(guī)則,并將預(yù)測模型保存到用戶空間,這個模型可以應(yīng)用到新數(shù)據(jù)集用于預(yù)測員工的離職概率。執(zhí)行決策樹節(jié)點,結(jié)果可以使用“決策樹瀏覽器”查看決策樹結(jié)構(gòu),如圖6-9所示。圖6-9使用“決策樹瀏覽器”查看決策樹結(jié)構(gòu)表6-4決策樹節(jié)點的參數(shù)說明
滿意度>0.11&工作年限<=4.0&平均每月工作時長<=276.0→不離職(置信度:97.16%)這條規(guī)則中的葉子結(jié)點有4304名員工,其中4182名是非離職員工,122名是離職員工,表示當(dāng)一名員工的特征符合這條規(guī)則時,則該員工不離職的概率是4182/4304=97.16%。滿意度>0.11&工作年限>4.0&績效評估<=0.81→不離職(置信度:95.31%)這條規(guī)則中的葉子結(jié)點有879名員工,其中834名是非離職員工,45名是離職員工,表示當(dāng)一名員工的特征符合這條規(guī)則時,則該員工不離職的概率是834/879=95.31%。以上兩條規(guī)則可以識別出訓(xùn)練集中(4182+834)/5431=92.35%的不離職員工。另外,從決策樹瀏覽器圖可以得到在構(gòu)建決策樹時每次的最佳劈劃屬性的排序,從而可以知道影響員工離職的關(guān)鍵性因素:對公司的滿意度、工作年限、績效評估和平均每月工作時長。4)模型評估構(gòu)建好決策樹模型之后,還需要使用測試集對決策樹算法的性能進(jìn)行評估。大數(shù)據(jù)應(yīng)用平臺提供“分類評估”節(jié)點對算法性能進(jìn)行評估,該節(jié)點有兩個輸入:模型和表格數(shù)據(jù),輸出包括錯誤率,混淆矩陣,ROC圖等評估結(jié)果。執(zhí)行“分類評估”節(jié)點,得到評估結(jié)果,可以查看分類評估報告,如圖6-10所示。決策樹算法構(gòu)建的離職預(yù)測模型,在測試集上總體錯誤率為2.9%,總體準(zhǔn)確率為97.1%。對于預(yù)測問題來說,往往關(guān)注的并不是模型的準(zhǔn)確率。更多地關(guān)注預(yù)測離職且實際離職的那部分員工所占的比率,即查準(zhǔn)率。從評估報告中見離職的查準(zhǔn)率等于97.09%,說明提供的預(yù)測可能離職的名單中最后有97.09%的員工真正離職了,離職預(yù)測的準(zhǔn)確性很高。另外,還需要關(guān)注提供的名單是不是盡可能地覆蓋了所有可能離職的員工名單,即查全率,也叫命中率。評估報告見離職查全率等于88.57%。提供的離職名單在準(zhǔn)確性和覆蓋度上都比較好。另外,點擊“ROC表”->“ROC圖”可以查看ROC曲線。ROC圖有兩條曲線,黑色的這條表示未離職類別的ROC曲線,紫色這條表示離職類別的ROC曲線,這兩條曲線都很陡峭的,曲線下的面積AUC都為0.94999,表示模型的預(yù)測效果很好,如圖6-11所示。圖6-11決策樹模型的ROC曲線(3)模型應(yīng)用訓(xùn)練好了員工離職決策樹模型后,可以使用“應(yīng)用”節(jié)點基于訓(xùn)練好的決策樹預(yù)測模型對公司其他未離職的員工進(jìn)行預(yù)測。預(yù)測的分析工作流如圖6-12所示?!皯?yīng)用”節(jié)點有兩個輸入端口:數(shù)據(jù)表和模型,將訓(xùn)練好的決策數(shù)據(jù)模型和新數(shù)據(jù)表與“應(yīng)用”節(jié)點相連接,執(zhí)行該節(jié)點,它會在原始數(shù)據(jù)的基礎(chǔ)上增加新的兩列,一列為目標(biāo)變量預(yù)測值(Predicted_Class),另一列為概率值(Confidence_Value),即可信度,如圖6-13所示。通過“過濾”節(jié)點可以將可能有離職傾向的員工篩選出來,提交給人力資源管理部門,留住優(yōu)秀人才。本案例通過決策樹算法構(gòu)建了針對優(yōu)秀的有經(jīng)驗的員工的離職預(yù)測模型,該模型可以對員工的離職進(jìn)行預(yù)測,能夠提前預(yù)判,在員工產(chǎn)生離職想法之前,及時提供解決方案,留住優(yōu)秀有經(jīng)驗的人才。同時識別出影響優(yōu)秀員工辭職的主要因素,如對公司的滿意度、員工的工作年限、績效評估以及平均每月工作時長。圖6-12員工離職預(yù)測分析工作流4.分析過程-基于Python(1)數(shù)據(jù)讀取與預(yù)處理首先讀取員工離職數(shù)據(jù)集,代碼如下:圖6-13應(yīng)用節(jié)點的預(yù)測結(jié)果第2行代碼用read_excel()函數(shù)讀取Excel文件數(shù)據(jù)賦給變量df。第3行代碼用df.head()查看表格的前5行,結(jié)果如下所示:“是否離職”列中的數(shù)字1代表離職,數(shù)字0代表未離職。第4行代碼用或“|”運算符來篩選優(yōu)秀員工,優(yōu)秀員工的定義請參考前面,并賦給變量df。使用df.shape可以查看篩選后的行數(shù)為9772行。第5行代碼用replace()函數(shù)對“薪資水平”列的內(nèi)容需要進(jìn)行數(shù)值化處理,將文本“l(fā)ow”、“medium”、“high”分別替換為數(shù)字0、1、2。第6行代碼用get_dummies()函數(shù)來創(chuàng)建啞特征,get_dummies默認(rèn)會對DataFrame中所有字符串類型的列進(jìn)行獨熱編碼。特征編碼后的數(shù)據(jù)結(jié)果如下所示:雖然決策樹算法本身是天然支持離散型變量的機器學(xué)習(xí)算法,但是Scikit-Learn中的決策樹算法只支持?jǐn)?shù)值型變量,因此需要對離散型變量先進(jìn)行特征編碼,將其轉(zhuǎn)換為數(shù)值型變量,在這個例子里對于“薪資水平”變量使用數(shù)字編碼,因為變量自身存在順序,是有序變量。對于“職位”變量使用獨熱編碼。(2)提取特征變量和目標(biāo)變量建模前,首先將特征變量和目標(biāo)變量分別提取出來,代碼如下:第1行代碼用drop()函數(shù)刪除“是否離職”列,將剩下的數(shù)據(jù)作為特征變量賦給變量X。第2行代碼用DataFrame使用列名提取具體列的方式提取“是否離職”列作為目標(biāo)變量,并賦給變量y。(3)劃分訓(xùn)練集和測試集提取完特征變量和目標(biāo)變量后,還需要將原始數(shù)據(jù)劃分為訓(xùn)練集和測試集。訓(xùn)練集用于進(jìn)行模型訓(xùn)練,測試集用于檢驗?zāi)P陀?xùn)練的結(jié)果,代碼如下:第1行代碼從Scikit-Learn庫中引入train_test_split()函數(shù)。第2行代碼用train_test_split()函數(shù)劃分?jǐn)?shù)據(jù)集為訓(xùn)練集和測試集,其中X_train、y_train為訓(xùn)練集數(shù)據(jù),X_test、y_test為測試集數(shù)據(jù),訓(xùn)練集數(shù)據(jù)有6840條,測試集數(shù)據(jù)有2932條。案例中,test_size設(shè)置為0.3,表示選取30%的數(shù)據(jù)用于測試。如果數(shù)據(jù)量較多,也可以將其設(shè)置為0.1,即分配更少比例的數(shù)據(jù)用于測試,分配更多比例的數(shù)據(jù)用于訓(xùn)練。因為train_test_split()函數(shù)每次劃分?jǐn)?shù)據(jù)都是隨機的,所以如果想讓每次劃分?jǐn)?shù)據(jù)的結(jié)果保持一致,可以設(shè)置random_state參數(shù),這里設(shè)置的數(shù)字123沒有特殊含義,它只是一個隨機數(shù)種子,也可以設(shè)置成其他數(shù)字。(4)模型構(gòu)建劃分好訓(xùn)練集和測試集之后,就可以從Scikit-Learn庫中引入決策樹模型進(jìn)行模型訓(xùn)練了,代碼如下:第1行代碼從Scikit-Learn庫中引入分類決策樹模型DecisionTreeClassifier。第2行代碼設(shè)置決策樹的參數(shù)max_depth(樹的最大深度)為5,并設(shè)置隨機狀態(tài)參數(shù)random_state為數(shù)字123,使每次程序運行的結(jié)果保持一致,最后將其賦給變量dt_model。第3行代碼用fit()函數(shù)進(jìn)行模型訓(xùn)練,傳入的參數(shù)就是前面劃分出的訓(xùn)練集數(shù)據(jù)。(5)模型評估與預(yù)測訓(xùn)練好模型后,需要使用測試集對模型進(jìn)行評估。直接預(yù)測是否離職這里把測試集中的數(shù)據(jù)導(dǎo)入模型中進(jìn)行預(yù)測,代碼如下,其中model就是前面訓(xùn)練好的決策樹模型:predict()函數(shù)將直接打印預(yù)測結(jié)果,其中0為預(yù)測不離職,1為預(yù)測離職。想要查看測試集的預(yù)測準(zhǔn)確度,可以使用accuracy_score()函數(shù),代碼如下:將score打印輸出,結(jié)果為0.9696,即模型對整個測試集的預(yù)測準(zhǔn)確度為96.96%。
上面是用accuracy_score()函數(shù)來獲取模型評分,其實Scikit-Learn庫的決策樹分類算法自帶模型評分功能,代碼如下:這里的dt_model為上面訓(xùn)練好的決策樹模型,score()函數(shù)會自動根據(jù)X_test的值計算出預(yù)測值,然后去和實際值進(jìn)行比對,從而計算出預(yù)測準(zhǔn)確度,最后同樣可以得到評分score為0.9696。2)預(yù)測不離職和離職的概率決策樹分類模型在本質(zhì)上預(yù)測的并不是精確的0或1的分類,而是預(yù)測屬于某一分類的概率。想要查看預(yù)測為各個分類的概率,可以通過如下代碼:第1行代碼獲得的y_pred_proba是一個二維數(shù)組,數(shù)組左列為分類=0的概率,右列為分類=1的概率。第2行代碼將其轉(zhuǎn)換為DataFrame格式以方便查看。前面直接預(yù)測是否離職,其實是看屬于哪種分類的概率更大。例如,第1行數(shù)據(jù)的不離職概率0.983850大于離職概率0.016150,所以預(yù)測結(jié)果為不離職。3)模型預(yù)測效果評估對于分類模型,不僅要關(guān)心整體的預(yù)測準(zhǔn)確度,也關(guān)心模型在每一類樣本里面的表現(xiàn),此時可以使用混淆矩陣來查看,python中使用confusion_matrix()函數(shù),代碼如下:第1行代碼引入confusion_matrix()函數(shù);第2行代碼為confusion_matrix傳入測試集的目標(biāo)變量真實值y_test和預(yù)測值y_pred。將混淆矩陣cf_mat打印輸出,結(jié)果如下所示:可以看到,實際離職的594(67+527)人中有527人被準(zhǔn)確預(yù)測,命中率(TPR)為527/594=88.72%;實際未離職的2338(2316+22)人中有22人被誤判為離職,假警報率(FPR)為22/2338=0.94%。需要注意的是,這里的TPR和FPR都是在閾值為50%的條件下計算的。Python還可以通過如下代碼計算命中率,無須手動計算:運行結(jié)果如下所示:其中recall對應(yīng)的就是命中率(又稱召回率和查全率),可以看到,對于分類為1的命中率為0.89,和之前手動計算的結(jié)果0.8872一致。accuracy表示整體準(zhǔn)確度,其值為0.97,和之前計算出的0.9696是一致的;support表示樣本數(shù),其中2338為實際類別是0的樣本數(shù),348為實際類別是1的樣本數(shù),2932為測試集的全部樣本數(shù)。此外,模型的
precision(精準(zhǔn)率)為0.96,因此,模型在測試集上的預(yù)測效果還不錯。對于分類模型,還可以繪制ROC曲線來評估模型。我們希望在閾值相同的情況下,假警報率盡可能小,命中率盡可能高,即ROC曲線盡可能陡峭,其對應(yīng)的AUC值(ROC曲線下方的面積)盡可能高。在Python中,通過如下代碼就可以求出不同閾值下的命中率(TPR)和假警報率(FPR)的值,從而繪制出ROC曲線:第1行代碼引入roc_curve()函數(shù);第2行代碼為roc_curve()函數(shù)傳入測試集的目標(biāo)變量y_test及預(yù)測的離職概率y_pred_proba[:,1],計算出不同閾值下的命中率和假警報率,并將三者分別賦給變量fpr(假警報率)、tpr(命中率)、thres(閾值)。此時獲得的fpr、tpr、thres為3個一維數(shù)組,通過第3~6代碼可以將三者合并成一個二維數(shù)據(jù)表。通過打印roc_table查看不同閾值下的假警報率和命中率,結(jié)果如下所示:可見隨著閾值的下降,命中率和假警報率都在上升。其中,第一個閾值無含義,常設(shè)置為最大閾值,保證無記錄被選中。表格第2行表示只有當(dāng)某員工被預(yù)測為離職的概率≥100%(因為概率不會超過100%,所以其實就是被預(yù)測為離職的概率等于100%),才判定其會離職,此時命中率為48.48%,即所有實際離職的員工中被預(yù)測為離職的員工占48.48%,在這種極端閾值條件下,該命中率已算很高了。第3行表示只有當(dāng)某員工被預(yù)測為離職的概率≥93.19%,才判定其會離職,此時命中率為88.72%,假警報率為0.94%,依此類推。已知不同閾值下的假警報率和命中率,可使用Matplotlib庫中的plot()函數(shù)繪制ROC曲線,代碼如下:第2行代碼是基于假警報率和命中率,用plot()函數(shù)繪制很陡峭的ROC曲線如圖6-14。圖6-14ROC曲線要求出ROC曲線下的AUC值,則可以通過如下代碼實現(xiàn):第1行代碼引入roc_auc_score()函數(shù);第2行代碼為roc_auc_score()函數(shù)傳入測試集的目標(biāo)變量y_test及預(yù)測的離職概率。使用print函數(shù)輸出AUC值為0.9664,預(yù)測效果還是不錯的。6.4K近鄰算法6.4.1K近鄰算法介紹
6.4.2
K近鄰算法實現(xiàn)K近鄰算法是一種lazy-learning算法,算法不需要使用訓(xùn)練集進(jìn)行訓(xùn)練。K近鄰分類算法的工作原理是:存在一個樣本數(shù)據(jù)集合,也稱作為訓(xùn)練樣本集,并且樣本集中每個數(shù)據(jù)都存在標(biāo)簽,即已知樣本集中每一個數(shù)據(jù)與所屬分類的對應(yīng)關(guān)系。輸入沒有標(biāo)簽的新數(shù)據(jù)后,將新數(shù)據(jù)的每個特征與樣本集中數(shù)據(jù)對應(yīng)的特征進(jìn)行比較,然后算法提取樣本最相似(最近鄰)數(shù)據(jù)的分類標(biāo)簽。一般來說,選擇樣本數(shù)據(jù)集中前K個最相似的數(shù)據(jù),這就是K近鄰算法中K的出處,通常K是不大于20的整數(shù)。最后,選擇K個最相似數(shù)據(jù)中出現(xiàn)次數(shù)最多的分類,作為新數(shù)據(jù)的分類。K近鄰分類算法的實現(xiàn)步驟如下:計算距離:計算新數(shù)據(jù)與訓(xùn)練集中每個樣本的距離,按照距離從小到大的順序排序。選擇近鄰:選取與新數(shù)據(jù)距離最小的前K個點。判定類別:計算前K個點所在類別的出現(xiàn)頻率,返回出現(xiàn)頻率最高的類別作為新數(shù)據(jù)的預(yù)測分類。
6.4.3
K近鄰算法應(yīng)用案例1.案例概述圖像識別是機器學(xué)習(xí)領(lǐng)域一個非常重要的應(yīng)用場景,本節(jié)通過一個較為經(jīng)典的手寫數(shù)字識別模型來講解如何在實戰(zhàn)中應(yīng)用K近鄰算法。。2.數(shù)據(jù)集手寫數(shù)字識別,或者說圖像識別的本質(zhì)就是把如圖6-15所示的圖片中的數(shù)字轉(zhuǎn)換成計算機能夠處理的數(shù)字形式。(1)圖像二值化通過圖像二值化可以將圖片大小為32×32的手寫數(shù)字“4”的圖片轉(zhuǎn)換成由0和1組成的“新的數(shù)字4”,如圖6-16所示。數(shù)字1代表有顏色的地方,數(shù)字0代表無顏色的地方,這樣就完成了手寫數(shù)字識別的第一步。圖6-16數(shù)字4的二值化表示(2)二維數(shù)組轉(zhuǎn)換為一維數(shù)組經(jīng)過圖像二值化處理獲得32×32的0-1矩陣,為了方便進(jìn)行機器學(xué)習(xí)建模,還需要對這個二維矩陣進(jìn)行簡單的處理:在第1行數(shù)字之后依次拼接第2~32行的數(shù)字,得到一個1×1024的一維數(shù)組。利用這種一維數(shù)組就可以計算不同手寫數(shù)字之間的距離,或者說這些手寫數(shù)字的相似度,從而進(jìn)行手寫數(shù)字識別。MNIST數(shù)據(jù)集是一個手寫體識別數(shù)據(jù)集,來自美國國家標(biāo)準(zhǔn)與技術(shù)研究所。它包含了各種手寫數(shù)字圖片以及每張圖片對應(yīng)的數(shù)字標(biāo)簽,圖片大小為28*28,且為黑白圖片。其中,60000張手寫數(shù)字圖片作為訓(xùn)練數(shù)據(jù),由來自250個不同人手寫的數(shù)字構(gòu)成,其中50%是高中學(xué)生,50%來自人口普查局的工作人員;10000張圖片作為測試數(shù)據(jù)。本案例使用的數(shù)據(jù)集共有1934個二值化處理好的手寫數(shù)字0~9,每一行是一個手寫數(shù)字的一維數(shù)組?!皩?yīng)數(shù)字”列是手寫數(shù)字,也是目標(biāo)變量;其余列為該手寫數(shù)字對應(yīng)的1024維特征值,也是預(yù)測變量。3.分析過程-大數(shù)據(jù)應(yīng)用平臺在大數(shù)據(jù)應(yīng)用平臺的工作流功能模塊中,使用分析組件構(gòu)建分析工作流,實現(xiàn)手寫數(shù)字預(yù)測模型的構(gòu)建和評估,模型構(gòu)建和評估的分析流程如圖6-17所示:(1)劃分訓(xùn)練集和測試集在進(jìn)行模型構(gòu)建和評估前,通過“數(shù)據(jù)分割”節(jié)點,將數(shù)據(jù)集劃分為訓(xùn)練集和測試集。本案例將原始數(shù)據(jù)集中的20%劃分為測試集,同時選擇“對應(yīng)數(shù)字”列為分層列,以避免少數(shù)類沒有參與訓(xùn)練建模的問題。數(shù)據(jù)分割后,訓(xùn)練集共1548條,用于進(jìn)行模型訓(xùn)練;測試集共386條,用于檢驗?zāi)P托阅艿膬?yōu)劣。(2)模型構(gòu)建本案例使用“K近鄰”節(jié)點計算新樣本與原始訓(xùn)練集中各個樣本的歐氏距離,取新樣本的K個近鄰點,并以大多數(shù)近鄰點所在的分類作為新樣本的分類。將“數(shù)據(jù)分割”節(jié)點的訓(xùn)練集輸出端口和“K近鄰”節(jié)點相連接,并對K近鄰節(jié)點的參數(shù)進(jìn)行設(shè)置,K近鄰節(jié)點的參數(shù)如下:預(yù)測變量:從表中選擇若干列作為預(yù)測變量,可以接受數(shù)值的列。這里選擇“對應(yīng)數(shù)字”列外的所有其他列。目標(biāo)變量:只能從表中選擇一列,且只接受字符型的列。這里選擇“對應(yīng)數(shù)字”列。近鄰數(shù):最近鄰居的數(shù)目,默認(rèn)值為1。這里設(shè)置為5,即選擇5個近鄰點來判定新樣本的分類。距離算法:用來計算數(shù)據(jù)點之間距離的方法,包括明氏距離、歐氏距離、曼氏距離和切比雪夫距離。這里選擇歐氏距離。(3)模型評估在測試集上,對“K近鄰”算法的性能進(jìn)行評估?!胺诸愒u估”節(jié)點可以實現(xiàn)分類模型的評估,點擊該節(jié)點可以查看分類評估報告,如圖6-18所示。圖6-17手寫數(shù)字預(yù)測模型構(gòu)建和評估的分析流程K-近鄰算法構(gòu)建的手寫數(shù)字預(yù)測模型,在測試集上總體錯誤率為9.326%,總體預(yù)測正確率達(dá)到了90%以上。從評估報告中,數(shù)字3的預(yù)測精準(zhǔn)率比較低,為81.25%,低于其他類別,而數(shù)字4、8和9的查全率比較低,分別為78.38%、77.78%和73.17%,有超過20%的手寫圖片被錯誤地預(yù)測為其他的數(shù)字。但總體上說,結(jié)果還比較好,可以保存該K-近鄰模型到用戶空間,便于在模型應(yīng)用階段在新數(shù)據(jù)集上預(yù)測手寫數(shù)字。另外,也可以利用ROC曲線來評估其預(yù)測效果,其評估方法與決策樹模型的評估方法是一樣的。(4)模型應(yīng)用根據(jù)評估結(jié)果,將“K近鄰”節(jié)點的模型輸出并保存到用戶空間,將得到的模型通過“應(yīng)用”節(jié)點,應(yīng)用到新數(shù)據(jù)上,即可預(yù)測新數(shù)據(jù)集的手寫圖形的數(shù)字類別。預(yù)測的分析工作流如圖6-19所示。圖6-19模型應(yīng)用工作流執(zhí)行“應(yīng)用”節(jié)點,在原始數(shù)據(jù)的基礎(chǔ)上增加新的兩列,一列為目標(biāo)變量的預(yù)測值(Predicted_Class),另一列為概率值(Confidence_Value),即可信度。
4.分析過程-基于Python(1)數(shù)據(jù)讀取首先通過pandas庫讀取數(shù)據(jù),代碼如下:通過打印df.head()查看表格的前5行,結(jié)果如下所示:其中第1列“對應(yīng)數(shù)字”為目標(biāo)變量y,其余1024列為特征變量X,接下來我們將利用這些數(shù)據(jù)搭建手寫數(shù)字識別模型。(2)提取特征變量和目標(biāo)變量在建模前,首先將特征變量和目標(biāo)變量分別提取出來,代碼如下:(3)劃分訓(xùn)練集和測試集提取完特征變量和目標(biāo)變量后,將數(shù)據(jù)劃分為訓(xùn)練集和測試集,代碼如下:這里將test_size設(shè)置為0.2,表示選取20%的數(shù)據(jù)用于測試。random_state設(shè)置為123,使每次運行程序得到的數(shù)據(jù)劃分結(jié)果保持一致。(4)模型構(gòu)建劃分好訓(xùn)練集和測試集之后,可以從Scikit-Learn庫中引入K近鄰算法進(jìn)行模型訓(xùn)練,代碼如下:第1行代碼從Scikit-Learn庫中引入K近鄰算法分類算法KNeighborsClassifier。第2行代碼設(shè)置參數(shù)n_neighbors為5來初始化KNN模型,并賦給變量knn_model,n_neighbors=5表示選擇5個近鄰點來決定新樣本的類別標(biāo)記。第3行代碼用fit()函數(shù)進(jìn)行模型訓(xùn)練,傳入的參數(shù)就是前面劃分出的訓(xùn)練集數(shù)據(jù)。(5)模型評估與預(yù)測通過如下代碼即可對測試集數(shù)據(jù)進(jìn)行預(yù)測,預(yù)測對應(yīng)的數(shù)字,同時可以使用accuracy_score()函數(shù),查看測試集所有數(shù)據(jù)的預(yù)測準(zhǔn)確度:將score打印輸出,結(jié)果為0.9793,也就是說,模型對整個測試集的預(yù)測準(zhǔn)確度為97.93%。對于分類模型,不僅關(guān)心整體的預(yù)測準(zhǔn)確度,也關(guān)心模型在每一類樣本里面的表現(xiàn),Python可以通過如下代碼計算每一個類別的精準(zhǔn)率和命中率:代碼運行結(jié)果如右表所示:可以看到,對于各個數(shù)字分類,模型的precision(精準(zhǔn)率)和recall(命中率)都比較高,超過90%。因此,模型在測試集上的預(yù)測效果還不錯。另外,也可以利用ROC曲線來評估其預(yù)測效果,其評估方法與決策樹模型的評估方法是一樣的。6.5
樸素貝葉斯算法6.5.1
貝葉斯定理貝葉斯定理由英國數(shù)學(xué)家托馬斯·貝葉斯(ThomasBayes)提出的,用來描述兩個條件概率之間的關(guān)系。通常,事件A在事件B發(fā)生的條件下與事件B在事件A發(fā)生的條件下,它們兩者的概率并不相同,但是它們兩者之間存在一定的相關(guān)性,并具有以下公式,稱之為貝葉斯公式:其中:P(A)表示事件A發(fā)生的概率,是事件A的先驗概率。比如在投擲骰子時,P(2)指的是骰子出現(xiàn)數(shù)字“2”的概率,這個概率是六分之一。P(B)表示事件B發(fā)生的概率,是事件B的先驗概率。P(B|A)是條件概率,表示在事件A
發(fā)生的條件下,事件B
發(fā)生的概率,條件概率是“貝葉斯公式”的關(guān)鍵所在,它也被稱為“似然概率”,
一般是通過歷史數(shù)據(jù)統(tǒng)計得到,一般不把它叫做先驗概率,但從定義上也符合先驗定義。P(A|B)是條件概率,表示在事件B
發(fā)生的條件下,事件A發(fā)生的概率,這個計算結(jié)果也被稱為“后驗概率”,是在條件B下,A的后驗概率。由上述描述可知,貝葉斯公式可以預(yù)測事件發(fā)生的概率,兩個本來相互獨立的事件,發(fā)生了某種“相關(guān)性”,此時就可以通過“貝葉斯公式”實現(xiàn)預(yù)測。6.5.2
樸素貝葉斯算法實現(xiàn)貝葉斯分類法是基于貝葉斯定理的統(tǒng)計學(xué)分類方法,是機器學(xué)習(xí)中應(yīng)用極為廣泛的分類算法之一。它通過預(yù)測一個給定的元組屬于一個特定類的概率,來進(jìn)行分類。樸素貝葉斯是貝葉斯模型當(dāng)中最簡單的一種,其算法核心為貝葉斯定理。所有事物之間的特征都是相互獨立的,彼此互不影響,這就時“樸素”定義的由來。樸素貝葉斯分類假定一個屬性值對給定類的影響?yīng)毩⒂谄渌鼘傩缘闹?,該假定稱作類條件獨立。
6.5.3
樸素貝葉斯算法應(yīng)用案例本節(jié)以腫瘤預(yù)測模型為例,應(yīng)用樸素貝葉斯模型來預(yù)測腫瘤為良性或是惡性腫瘤。1.案例概述腫瘤性質(zhì)的判斷影響著患者的治療方式和痊愈速度。傳統(tǒng)的做法是醫(yī)生根據(jù)數(shù)十個指標(biāo)來判斷腫瘤的性質(zhì),預(yù)測效果依賴于醫(yī)生的個人經(jīng)驗而且效率較低,而通過機器學(xué)習(xí)有望能快速預(yù)測腫瘤的性質(zhì)2.數(shù)據(jù)集本案例使用的數(shù)據(jù)集共有569組樣本。其中,良性腫瘤211例、惡性腫瘤358例。數(shù)據(jù)集中變量的詳細(xì)描述如表6-5所示,表格中的“腫瘤性質(zhì)”列為目標(biāo)變量,剩下的字段為特征變量,本案例只選取了6個特征變量,在醫(yī)療行業(yè)中實際用于判斷腫瘤性質(zhì)的特征變量要多得多。本案例的目的是根據(jù)這些數(shù)據(jù)搭建樸素貝葉斯模型,幫助醫(yī)生提高判斷效率,從而及早展開治療。表6-5腫瘤數(shù)據(jù)集字段含義說明3.分析過程-大數(shù)據(jù)應(yīng)用平臺在大數(shù)據(jù)應(yīng)用平臺的工作流功能模塊中,使用分析組件構(gòu)建分析工作流,如圖6-20所示,實現(xiàn)腫瘤類型預(yù)測模型的構(gòu)建、評估和應(yīng)用的分析。(1)目標(biāo)變量類型轉(zhuǎn)換由于“腫瘤數(shù)據(jù)”表中的“腫瘤性質(zhì)”列是數(shù)值型,而樸素貝葉斯節(jié)點的目標(biāo)變量只接受字符型列,因此需要使用“列類型轉(zhuǎn)換”節(jié)點將列的類型從數(shù)值型轉(zhuǎn)換成字符型。(2)特征分析在建模之前,可以探索哪些變量與區(qū)分腫瘤的性質(zhì)有密切的相關(guān)?在大數(shù)據(jù)應(yīng)用平臺的自助報告中,采用箱型圖探索連續(xù)型變量與腫瘤性質(zhì)的關(guān)系,如圖6-21所示。圖6-20腫瘤類型預(yù)測模型分析工作流程從箱型圖上可以看出,“最大周長”、“最大凹陷度”、“平均凹陷度”、“最大面積”、“最大半徑”和“平均灰度值”這六個變量在良性組中的中位數(shù)明顯高于惡性組,表現(xiàn)出了明顯的差異,說明這些特征變量與目標(biāo)變量可能都有比較密切的關(guān)系。(3)劃分訓(xùn)練集和測試集在進(jìn)行模型構(gòu)建和評估前,通過“數(shù)據(jù)分割”節(jié)點,將數(shù)據(jù)集劃分為訓(xùn)練集和測試集。本案例的569組數(shù)據(jù)并不算多,因此設(shè)定“測試集百分比”為20,即按8∶2的比例來劃分訓(xùn)練集和測試集。數(shù)據(jù)分割后,訓(xùn)練集共456條,用于進(jìn)行模型訓(xùn)練;測試集共113條,用于檢驗?zāi)P托阅艿膬?yōu)劣。(4)模型構(gòu)建在訓(xùn)練集上,采用“樸素貝葉斯”算法建立模型。如圖6-22所示。將“數(shù)據(jù)分割”節(jié)點的訓(xùn)練集輸出端口與“樸素貝葉斯”節(jié)點相連接,并對樸素貝葉斯節(jié)點的參數(shù)進(jìn)行設(shè)置:預(yù)測變量:從表中可選擇若干列作,接受數(shù)值型或者字符型的列。這里選擇“最大周長”、“最大凹陷度”、“平均凹陷度”、“最大面積”、“最大半徑”和“平均灰度值”。目標(biāo)變量:只能從表中選擇一列,且只接受字符型的列。這里選擇“腫瘤性質(zhì)”。先驗概率:采用數(shù)據(jù)集默認(rèn)的值。(5)模型評估樸素貝葉斯算法構(gòu)建的腫瘤預(yù)測模型,如圖6-23在測試集上總體錯誤率為4.425%,總體準(zhǔn)確率為98.23%。這里關(guān)注的并不是模型的總體準(zhǔn)確率,而更關(guān)注預(yù)測惡性腫瘤的準(zhǔn)確性。從評估報告中,見惡性腫瘤(類名=1)的查準(zhǔn)率等于94.94%,這說明提供的預(yù)測可能是惡性腫瘤的病人名單中最后有94.94%的病人真的被診斷位惡性腫瘤,惡性腫瘤預(yù)測的準(zhǔn)確性很高。另外,還需要關(guān)注提供的病人名單是不是盡可能地覆蓋了所有可能是惡性腫瘤的病人名單,即查全率??梢姁盒阅[瘤的查全率等于98.68%。因此,模型在測試集上的預(yù)測腫瘤性質(zhì)的效果不錯,提供的病人名單在準(zhǔn)確性和覆蓋度上都比較好,可以保存該樸素貝葉斯模型到用戶空間,便于在模型應(yīng)用階段在新的病人數(shù)據(jù)集上使用。另外,也可以利用ROC曲線來評估其預(yù)測效果。圖6-22樸素貝葉斯節(jié)點(6)模型應(yīng)用最后,將得到的腫瘤預(yù)測模型通過“應(yīng)用”節(jié)點,應(yīng)用到新數(shù)據(jù)上,得到預(yù)測結(jié)果。如圖6-24所示。圖6-23樸素貝葉斯模型的分類評估報告執(zhí)行該節(jié)點,它會在原始數(shù)據(jù)的基礎(chǔ)上增加新的兩列,一列為目標(biāo)變量的預(yù)測值(Predicted_Class),另一列為概率值(Confidence_Value),即可信度。通過“過濾”節(jié)點可以將可能有是惡性腫瘤的病人篩選出來,輔助醫(yī)生提高診斷效率,從而及早展開治療。圖6-24樸素貝葉斯模型應(yīng)用4.分析過程-基于Python(1)數(shù)據(jù)讀取首先通過pandas庫讀取數(shù)據(jù),代碼如下:通過打印df.head()查看表格的前5行,結(jié)果如右圖所示:其中
“腫瘤性質(zhì)”為目標(biāo)變量y,其余6列為特征變量X,接下來將利用這些數(shù)據(jù)搭建腫瘤性質(zhì)預(yù)測模型。(2)提取特征變量和目標(biāo)變量在建模前,首先將特征變量和目標(biāo)變量分別提取出來,代碼如下:第1行代碼用drop()函數(shù)刪除“腫瘤性質(zhì)”列,即目標(biāo)變量,其余的作為特征變量賦給變量X。第2行代碼提取“腫瘤性質(zhì)”列作為目標(biāo)變量賦給y。(3)劃分訓(xùn)練集和測試集提取完特征變量和目標(biāo)變量后,將數(shù)據(jù)劃分為訓(xùn)練集和測試集,代碼如下:這里將test_size設(shè)置為0.2,表示選取20%的數(shù)據(jù)用于測試。stratify=y,表示劃分后的訓(xùn)練集和測試集中的腫瘤性質(zhì)類別的比例與目標(biāo)變量y中腫瘤性質(zhì)類別的比例保持一致。random_state設(shè)置為123,使每次運行程序得到的數(shù)據(jù)劃分結(jié)果保持一致。劃分后的訓(xùn)練集有455組數(shù)據(jù),測試集有114組數(shù)據(jù)。(4)模型構(gòu)建劃分好訓(xùn)練集和測試集之后,可以從Scikit-Learn庫中引入K近鄰算法進(jìn)行模型訓(xùn)練,代碼如下:第1行代碼從Scikit-Learn庫中引入樸素貝葉斯模型(naive_bayes),并使用應(yīng)用場景最為廣泛的高斯樸素貝葉斯模型(GaussianNB),它適用于任何連續(xù)數(shù)值型的數(shù)據(jù)集。第2行代碼將模型賦給變量nb_model,這里沒有設(shè)置參數(shù),即使用默認(rèn)參數(shù)。第3行代碼用fit()函數(shù)訓(xùn)練模型,其中傳入的參數(shù)就是前面獲得的訓(xùn)練集數(shù)據(jù)X_train、y_train。至此,一個樸素貝葉斯模型便搭建完成了,之后就可以利用模型來進(jìn)行預(yù)測。(5)模型評估與預(yù)測通過如下代碼即可對測試集數(shù)據(jù)進(jìn)行預(yù)測,預(yù)測腫瘤的性質(zhì)。通過打印輸出y_pred[0:100]查看前100個預(yù)測結(jié)果。想要查看測試集的預(yù)測準(zhǔn)確度,可以使用accuracy_score()函數(shù),python代碼如下:將score打印輸出,結(jié)果為0.9824,也就是說,模型對整個測試集的預(yù)測準(zhǔn)確度為0.9824。說明114組測試集數(shù)據(jù)中,約112組數(shù)據(jù)預(yù)測正確,2組數(shù)據(jù)預(yù)測錯誤。對于分類模型,不僅要關(guān)心整體的預(yù)測準(zhǔn)確度,也要關(guān)心模型在每一類樣本里面的表現(xiàn),Python可以通過如下代碼計算每一個類別的精準(zhǔn)率和命中率:運行結(jié)果為:可以看到,對于惡性腫瘤的預(yù)測,模型的precision(精準(zhǔn)率)=0.99和recall(命中率)=0.99都比較高,因此,模型對于預(yù)測腫瘤性質(zhì)的效果還不錯。6.6
支持向量機算法6.6.1
支持向量機算法介紹支持向量機(SupportVectorMachine,SVM)是一種基于統(tǒng)計學(xué)習(xí)理論的模式識別方法,
屬于有監(jiān)督學(xué)習(xí)模型,主要用于解決數(shù)據(jù)分類問題。SVM將每個樣本數(shù)據(jù)表示為空間中的點,使不同類別的樣本點盡可能明顯地區(qū)分開。通過將樣本的向量映射到高維空間中,尋找最優(yōu)區(qū)分兩類數(shù)據(jù)的超平面,使各分類到超平面的距離最大化,距離越大表示SVM的分類誤差越小。通常SVM用于二元分類問題,對于多元分類可將其分解為多個二元分類問題,再進(jìn)行分類,主要的應(yīng)用場景有圖像分類、文本分類、面部識別、垃圾郵件檢測等領(lǐng)域。SVM的主要思想可以概括以下兩點:(1)高維映射:對于線性不可分的情況,通過使用非線性高維映射,將低維輸入空間線性不可分的樣本轉(zhuǎn)化到高維特征空間,如圖6-25所示,使其線性可分,從而使得高維特征空間采用線性算法對樣本的非線性特征進(jìn)行線性分析成為可能。這個非線性高維映射稱之為核函數(shù),選擇不同的核函數(shù),可以生成不同的SVM。(2)最佳超平面:基于結(jié)構(gòu)風(fēng)險最小化理論在特征空間中構(gòu)建最優(yōu)分割超平面,一個最優(yōu)超平面可以盡最大可能地把正負(fù)類樣本分開,使得學(xué)習(xí)器得到全局最優(yōu)化。圖6-25
經(jīng)過高維映射后,二維分布的樣本點變成了三維分布6.6.2
支持向量機算法實現(xiàn)支持向量機模型由簡單到復(fù)雜分為以下三種:線性可分支持向量機(LinearSupportVectorMachineInLinearlySeparableCase),樣本是線性可分,對應(yīng)的最大間隔類型為硬間隔最大化,即分類超平面要嚴(yán)格滿足每個樣本都分類正確。線性支持向量機(LinearSupportVectormachine),當(dāng)樣本近似線性可分,引入松弛因子,可以得到一個線性分類器,對應(yīng)的最大間隔類型為軟間隔最大化,即戰(zhàn)略性地將那些噪聲數(shù)據(jù)放棄,得到一個對于大部分樣本都可以正確分類的超平面。非線性支持向量機(Non-LinearSupportVectorMachine),當(dāng)樣本非線性可分時,即使引入松弛因子也不能得到一個近似線性可分的結(jié)果時,采用核技術(shù)進(jìn)行特征映射,在高維空間采用軟間隔最大化方法得到一個非線性模型,對應(yīng)的最大間隔類型為核映射+軟間隔最大化。在實際應(yīng)用中很少有線性問題,支持向量機模型應(yīng)用最多的是第三種模型。然而,復(fù)雜模型是簡單模型的改進(jìn),而且通過核函數(shù)映射就能將低維的非線性問題轉(zhuǎn)化為高維空間的線性問題。1.線性可分支持向量機首先假設(shè)有兩分類數(shù)據(jù),如圖6-26所示。圖6-26數(shù)據(jù)分布圖現(xiàn)在要找出一條最佳的分割線,將兩類數(shù)據(jù)分隔開。對于線性可分兩分類數(shù)據(jù),支持向量機就是條直線,對于高維數(shù)據(jù)點就是一個超平面,如圖6-27所示的三條直線都可以將上圖中的兩類數(shù)據(jù)分開來。當(dāng)然,除了a、b、c外還有無數(shù)條分割線,那么,在這些分割線中哪條是最完美的呢?目標(biāo)是選擇一條具有較強分類能力的直線,即較穩(wěn)定的分類結(jié)果和較強的抗噪聲能力。圖6-27多種分隔方法假如在上圖中又增加了一些數(shù)據(jù),如圖6-28所示。由于新增了樣本數(shù)據(jù),相對于直線b而言,直線a與c對樣本變化的適應(yīng)性變差,使用直線a進(jìn)行分類,標(biāo)記的圓形點會被分到三角形中,使用直線c進(jìn)行分類,標(biāo)記的三角形點會被分到圓形中。如何找到最優(yōu)分類數(shù)據(jù)的分割線,使得具有最優(yōu)的數(shù)據(jù)分類能力呢?這條分界線要盡可能地遠(yuǎn)離兩類數(shù)據(jù)點,即數(shù)據(jù)集的邊緣點到分界線的距離d最大,這里虛線穿過的邊緣點就叫作支持向量,分類間隔2d,如圖6-29所示。這里的數(shù)據(jù)點到超平面的距離就是間隔(margin),當(dāng)間隔越大,這條分割線(分類器)也就越健壯,當(dāng)有新的數(shù)據(jù)點的時候,使用這條分割線得到的分類結(jié)果也就越可信。圖6-29最優(yōu)分界線圖6-28增加樣本后的數(shù)據(jù)分布假設(shè)b為最優(yōu)分割線,那么此分割線方程為:現(xiàn)在將式(6-26)轉(zhuǎn)化成向量形式:式(6-27)只是在二維形式上的表示,如果擴(kuò)展到n維,那么式(6-27)將變成:所以可以根據(jù)式(6-28)將超平面方程寫成更一般的表達(dá)形式:現(xiàn)在已經(jīng)把超平面的函數(shù)表達(dá)式推導(dǎo)出來,用函數(shù)區(qū)分兩類數(shù)據(jù),為每個樣本點x設(shè)置一個類別標(biāo)簽yi:則:由于超平面距離兩類數(shù)據(jù)支持向量的距離相等,且最大值為d,那么:注:這里D(t)為向量t到超平面的距離。由式(6-31)和式(6-32)處理可得:
對于式(6-33)兩邊同乘yi進(jìn)行歸一化處理:那么此時的分類間隔為:所以這里便轉(zhuǎn)化成求:而最大化2/||w||等價于最小化||w||,當(dāng)然也等價于最小化||w||2。為了下面優(yōu)化過程中對函數(shù)求導(dǎo)的方便,將求min(‖w‖)轉(zhuǎn)化為求式(6-37),即線性SVM最優(yōu)化問題的數(shù)學(xué)描述:
其對偶形式為:
將式(6-38)帶入式(6-40)可得:將式(6-42)帶入式(6-39)可得最終優(yōu)化表達(dá)式:
其中,c為可選的常數(shù)。線性核函數(shù)是原始輸入空間的內(nèi)積,即特征空間和輸入空間的維度是一樣的,參數(shù)較少,運算速度較快。一般情況下,在特征數(shù)量相對于樣本數(shù)量非常多時,適合采用線性核函數(shù)。(2)多項式核函數(shù)多項式核函數(shù)(PolynomialKernel)的參數(shù)比較多,當(dāng)多項式階數(shù)高時,復(fù)雜度會很高,對于正交歸一化后的數(shù)據(jù),可優(yōu)先選此核函數(shù),其表達(dá)式如下:
(4)Sigmoid核函數(shù)Sigmoid核函數(shù)來源于感知機中的激活函數(shù),SVM使用Sigmoid相當(dāng)于一個兩層的感知機網(wǎng)絡(luò),Sigmoid核函數(shù)表達(dá)式如下:
3)使用SMO等算法得到最佳超平面得到最佳分類面的表達(dá)式。非線性支持向量機模型核函數(shù)的選擇非常關(guān)鍵,而選定核函數(shù)后,核函數(shù)中的參數(shù)也直接影響了模型性能。因此,在非線性支持向量機模型中,需要優(yōu)化的超參數(shù)有懲罰參數(shù)C及核函數(shù)的參數(shù),如多項式核函數(shù)的階次p、高斯核函數(shù)的核函數(shù)寬度σ。6.6.3支持向量機算法應(yīng)用案例1.案例概述信用卡盜刷一般發(fā)生在持卡人信息被不法分子竊取后,復(fù)制卡片進(jìn)行消費或信用卡被他人冒領(lǐng)后激活并消費等情況下。一旦發(fā)生信用卡盜刷,持卡人和銀行都會遭受一定的經(jīng)濟(jì)損失。本節(jié)要運用支持向量機分類算法搭建一個金融反欺詐模型。2.數(shù)據(jù)集本案例使用的數(shù)據(jù)集共有1000條客戶信用卡的交易數(shù)據(jù)。其中,有400個欺詐樣本,600個非欺詐樣本。數(shù)據(jù)集中變量的詳細(xì)描述如表6-6所示,表格中的“欺詐標(biāo)簽”列為目標(biāo)變量,若是盜刷信用卡產(chǎn)生的交易則標(biāo)記為1,代表欺詐,正常交易則標(biāo)記為0。剩下的字段為特征變量,本案例只選取了5個特征變量,在實際中使用的特征變量遠(yuǎn)比本案例多得多,根據(jù)這些數(shù)據(jù)搭建支持向量機模型。表6-6金融反欺詐數(shù)據(jù)集字段含義說明3.分析過程-大數(shù)據(jù)應(yīng)用平臺在大數(shù)據(jù)應(yīng)用平臺的工作流功能模塊中,使用分析組件構(gòu)建分析工作流,實現(xiàn)金融發(fā)欺詐模型的構(gòu)建和評估,模型構(gòu)建和評估的分析流程如圖6-30所示:圖6-30金融反欺詐模型構(gòu)建和評估的分析流程(1)劃分訓(xùn)練集和測試集在進(jìn)行模型構(gòu)建和評估前,通過“數(shù)據(jù)分割”節(jié)點,將數(shù)據(jù)集劃分為訓(xùn)練集和測試集。本案例將原始數(shù)據(jù)集中的20%劃分為測試集,同時選擇“欺詐標(biāo)簽”列為分層列,以避免少數(shù)類沒有參與訓(xùn)練建模的問題。數(shù)據(jù)分割后,訓(xùn)練集共800條,用于進(jìn)行模型訓(xùn)練;測試集共200條,用于檢驗?zāi)P托阅艿膬?yōu)劣。(2)模型構(gòu)建本案例使用“支持向量機”節(jié)點來構(gòu)建金融發(fā)欺詐模型。將“數(shù)據(jù)分割”節(jié)點的訓(xùn)練集輸出端口和“支持向量”節(jié)點相連接,并對支持向量機節(jié)點的參數(shù)進(jìn)行設(shè)置,支持向量機節(jié)點的參數(shù)說明如下:預(yù)測變量:從表中選擇若干列作為預(yù)測變量,可以接受數(shù)值的列。這里選擇除“欺詐標(biāo)簽”列之外的所有其他列。目標(biāo)變量:只能從表中選擇一列,且只接受字符型的列。這里選擇“欺詐標(biāo)簽”列。SVM類型:選擇SVM類型,有C-SVC、nu-SVC和one-classSVM三種分類方法,默認(rèn)為C-SVC。這里使用默認(rèn)值。成本參數(shù)C:若SVM類型為C-SVC,設(shè)置成本參數(shù)C,默認(rèn)值為1。這里設(shè)置為0.6。nu值:
若SVM類型為nu-SVC和one-classSVM時,設(shè)置nu值。默認(rèn)值為0.5。階數(shù):
若核函數(shù)為多項式時,需指定階數(shù),默認(rèn)值為3。Gamma:
除線性核函數(shù)外,其他三個核函數(shù)需要指定gamma,如果設(shè)為0,則使用1/樣本數(shù)。自動標(biāo)準(zhǔn)化:是否需要對預(yù)測變量進(jìn)行規(guī)范化,默認(rèn)值為False。(3)模型評估在測試集上,對“支持向量機”算法的性能進(jìn)行評估?!胺诸愒u估”節(jié)點可以說實現(xiàn)分類模型的評估,分類評估報告如圖6-31所示。支持向量機算法構(gòu)建的金融欺詐模型,在測試集上總體錯誤率為22%。除了模型的總體準(zhǔn)確率,更應(yīng)關(guān)注識別欺詐的查準(zhǔn)率和查全率。從評估報告中可以看到欺詐(類名=1)的查準(zhǔn)率等于73.08%,這說明提供的預(yù)測可能存在欺詐的客戶名單中最后有73.08%的客戶真的存在欺詐行為。另外,還需要關(guān)注提供的客戶名單是不是盡可能地覆蓋了所有可能有欺詐行為的客戶名單,即查全率。欺詐的查全率等于71.25%,即提供的預(yù)測可能存在欺詐的客戶名單占實際發(fā)生了欺詐的客戶的71.25%。因此,如果模型在測試集上的預(yù)測效果還不錯,可以保存該支持向量機模型到用戶空間,以便于在模型應(yīng)用階段在新的客戶數(shù)據(jù)集上使用。(4)模型應(yīng)用根據(jù)評估結(jié)果,將“支持向量機”節(jié)點的模型輸出并保存到用戶空間,將得到的模型通過“應(yīng)用”節(jié)點,應(yīng)用到新數(shù)據(jù)上,即可預(yù)測新數(shù)據(jù)集的欺詐。預(yù)測的分析工作流如圖6-32所示。執(zhí)行“應(yīng)用”節(jié)點,它會在原始數(shù)據(jù)的基礎(chǔ)上增加新的兩列,一列為目標(biāo)變量的預(yù)測值(Predicted_Class),另一列為概率值(Confidence_Value),即可信度。4.分析過程-基于Python(1)數(shù)據(jù)讀取首先通過pandas庫讀取數(shù)據(jù),代碼如下:通過打印df.head()查看表格的前5行,結(jié)果如下所示:其中第1列“欺詐標(biāo)簽”為目標(biāo)變量y,其余5列為特征變量X,接下來我們將利用這些數(shù)據(jù)搭建手寫數(shù)字識別模型。(2)提取特征變量和目標(biāo)變量首先將特征變量和目標(biāo)變量分別提取出來,代碼如下:第1行代碼用drop()函數(shù)刪除“欺詐標(biāo)簽”列,即目標(biāo)變量,其余的作為特征變量賦給變量X。第2行代碼提取“欺詐標(biāo)簽”列作為目標(biāo)變量賦給y。(3)劃分訓(xùn)練集和測試集提取完特征變量和目標(biāo)變量后,將數(shù)據(jù)劃分為訓(xùn)練集和測試集,代碼如下:這里將test_size設(shè)置為0.2,表示選取20%的數(shù)據(jù)用于測試。random_state設(shè)置為123,使每次運行程序得到的數(shù)據(jù)劃分結(jié)果保持一致。(4)模型構(gòu)建劃分好訓(xùn)練集和測試集之后,導(dǎo)入sklearn中的SVM工具包,核函數(shù)采用線性核函數(shù)進(jìn)行模型訓(xùn)練,代碼如下:第1行代碼從Scikit-Learn庫中引入支持向量機分類算法SVC;第2行代碼設(shè)置參數(shù)kernel為linear來初始SVC模型,并賦給變量svm_model。第3行代碼用fit()函數(shù)進(jìn)行模型訓(xùn)練,傳入的參數(shù)就是前面劃分出的訓(xùn)練集數(shù)據(jù)。(5)模型評估與預(yù)測想要查看測試集的預(yù)測準(zhǔn)確度,可以使用accuracy_score()函數(shù),如下代碼:將score打印輸出,結(jié)果為0.785,也就是說,模型對整個測試集的預(yù)測準(zhǔn)確度為78.5%。對于分類模型,需要關(guān)注查準(zhǔn)率和查全率,Python可以通過如下代碼計算每一個類別的查準(zhǔn)率和查全率:運行結(jié)果如下所示:可見對于判斷是否欺詐,模型的precision(查準(zhǔn)率)為0.82,查準(zhǔn)率比較高,但是recall(查全率)為0.59,命中率不夠高,表示有一些實際是欺詐的客戶模型沒能識別出來,遺漏了。因此,可以再調(diào)節(jié)模型的參數(shù),以獲得更優(yōu)的預(yù)測效果。
6.7
線性回歸
圖
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年順酐項目融資計劃書
- 《MLCC制程介紹》課件
- 機械制圖測試題含答案
- 養(yǎng)老院老人生活娛樂活動組織人員職業(yè)發(fā)展規(guī)劃制度
- 養(yǎng)老院老人健康監(jiān)測報告制度
- 投資金額變更協(xié)議書模板
- 報廢車轉(zhuǎn)讓合同(2篇)
- 2024年施工期間用電保障合同版B版
- 2024年新版撫養(yǎng)權(quán)撫養(yǎng)費私下和解協(xié)議3篇
- 《肩周相關(guān)疾病的診》課件
- NY/T 396-2000農(nóng)用水源環(huán)境質(zhì)量監(jiān)測技術(shù)規(guī)范
- GB/T 39901-2021乘用車自動緊急制動系統(tǒng)(AEBS)性能要求及試驗方法
- GB/T 36652-2018TFT混合液晶材料規(guī)范
- 國際商務(wù)談判 袁其剛課件 第四章-國際商務(wù)談判的結(jié)構(gòu)和過程
- 國際商法教案(20092新版)
- 江蘇開放大學(xué)漢語作為第二語言教學(xué)概論期末復(fù)習(xí)題
- 工作簡化方法改善與流程分析課件
- 國家開放大學(xué)《管理學(xué)基礎(chǔ)》形考任務(wù)1-4參考答案
- 道德與法治《健康看電視》優(yōu)秀課件
- 急性胰腺炎完整版課件
- 雙絞線鏈路測試報告
評論
0/150
提交評論