決策樹是解決分類問題的一種常用方法,它是一種樹形結構,其中每個內部節點表示乙個屬性上的測試,每個分支代表乙個測試輸出,每個葉節點代表一種類別。
決策樹的建立可以簡單的分為2個過程:
1、決策樹的生長
(1)如何從眾多的輸入變數中找到當前最佳分組變數
(2)如何從分組變數中的眾多值中找到乙個最佳分割點
2、決策樹的剪枝
先剪枝:在建立樹模型的時候就開始限制樹的長大
後剪枝:先建立乙個完整的樹,之後在對該樹進行修剪
不同的決策樹演算法對於上述問題的處理方式不同,下面簡單的列舉了其中3種演算法之間的區別:
接下來,我們介紹一下如何使用r軟體建立c5.0決策樹
r軟體有乙個專門做c5.0的包c50,這裡我們使用的是電信流失使用者的資料。
1、載入資料
由於結果太長,上圖只擷取了部分。由上圖可知,該資料集有1000條記錄,42個變數。
2、資料探索
檢視資料集是否有缺失值和異常值,這裡使用的是summary函式,**如下,
summary(telco)
對於分型別變數,summary輸出的結果是各個變數類別和取值個數;
對於數值型變數,summary輸出的結果是最小值、最小值、均值和三個四分位數;
如果有缺失值的話,summary還會顯示缺失值的個數。
我們擷取了含有缺失值的變數的結果
由上圖可知,telco資料集中,logtoll 有525個缺失值,logequi有614個缺失值 ,logcard有 322個缺失值, logwire 有704 個缺失值。
3、資料預處理
對於缺失值,我們可以採用刪除法、替換法、插補法(回歸插補法、多重插補法等)進行處理,由於上述缺失值比重較大,我們這裡採用刪除法進行處理:
telco2=telco[,-c(35,36,37,38)]
對於異常值,我們的處理方法有(1)刪除含有異常值的記錄
(2)視為缺失值,利用缺失值的處理方法進行處理
(3)平均值修正:用前後兩個觀測值的平均值修正該異常值
(4)不處理,將其看為正常值
具體該如何處理缺失值和異常值,我們應該結合實際情況,選擇合適的處理方法。
4、建模
先把資料拆分為訓練集和測試集
train.indeces
telco2.train
telco2.test
再對訓練集資料建立c5.0決策樹
c5.0tree=c5.0(churn~.,data=tree.train,trials=5,control=c5.0control(winnow = true,cf=0.25))
【trials:模型的迭代次數 winnow :在建模之前是否對變數進行特徵選擇 cf:剪枝時的置信度】
檢視模型結果:summary(c5.0tree)
可知19個變數已經被剔除掉了,還剩19個變數用於模型的構建
5、模型評估
訓練集 測試集
正確率 86.4% 74.5% 正確率:被分對的樣本數除以所有的樣本數;
tpr(召回率)56.2% 40% 召回率:所有正例中被分對的比例,衡量了分類器對正例的識別能力
準確率 82% 55% 準確率:分子是**該類別正確的數量,分母是**為該類別的全部資料的數量。
fpr 4.6% 12.4% fpr:實際為負例,被分類器錯誤判斷為正例的比例。
提公升度 3 2 提公升度:準確率/正例比例
對於具體的某個分類器而言,我們不可能同時提高上面的所有指標,例如,很多時候,尤其是資料分類難度較大的情況下,準確率和召回率往往是矛盾的,我們應該根據實際應用場景,在建模的時候,在保證其他指標一定的條件之下,盡量提高我們看重的指標。
在本案例中,我們**流失使用者的目的是為了防止使用者流失減少我們的收益,所以我們應該盡量找出流失使用者,即盡量增大召回率(tpr),同時減少誤判的比例(fpr),那麼tpr和fpr是多少才行呢?
假設我們對**出來的流失使用者進行挽留的成本是a元,成功挽留住給我們帶來的收益是b元,則
訓練集的收益=123*b-(123+27)*a
測試集的收益=22*b-(18+22)*a
對不同的決策樹模型進行評估是,我們可以用收益的值來評估模型。
如何使用Rstudio建立帶c 程式的R語言包
1.環境 安裝rtools 請預設安裝,否則後續會報錯 檢查path是否有2個rtools相關路徑 2.入門1 hello world step 1 在rstudio介面,files new project new directory r package 注意 type一定選擇 package w ...
C 如何呼叫R
1.現在r中安裝rscproxy庫 install.packages rscproxy library rscproxy 2.到這個 statconndcom3.5 1b2 noncommercial.exe 和 rexcelinst3.2.7 noncommercial.exe 按照順序安裝一下 ...
如何使用R的apply
x 是乙個陣列 array 也就是說輸入必須都是相同型別的資料,要麼都是數值型,要麼都是字元型。如果是乙個混合資料型別的data.frame,那麼就會嘗試用as.matrix強制轉換資料 margin 表示對行 1 或者是對列 2 應用函式。fun 可是r自帶函式,如mean,sum等。也可以是自己...