Python數(shù)據(jù)科學(xué):決策樹
決策樹呈樹形結(jié)構(gòu),是一種基本的回歸和分類方法。
決策樹模型的優(yōu)點(diǎn)在于可讀性強(qiáng)、分類速度快。
下面通過從「譯學(xué)館」搬運(yùn)的兩個(gè)視頻,來簡單了解下決策樹。
最后來實(shí)戰(zhàn)一波,建立一個(gè)簡單的決策樹模型。
/ 01 / 決策樹算法
本次主要涉及兩類決策樹,Quinlan系列決策樹和CART決策樹。
前者涉及的算法包括ID3算法、C4.5算法及C5.0算法,后者則是CART算法。
前者一系列算法的步驟總體可以概括為建樹和剪樹。
在建樹步驟中,首先選擇最有解釋力度的變量,接著對每個(gè)變量選擇最優(yōu)的分割點(diǎn)進(jìn)行剪樹。
剪樹,去掉決策樹中噪音或異常數(shù)據(jù),在損失一定預(yù)測精度的情況下,能夠控制決策樹的復(fù)雜度,提高其泛化能力。
在剪樹步驟中,分為前剪枝和后剪枝。
前剪枝用于控制樹的生成規(guī)模,常用方法有控制決策樹最大深度、控制樹中父結(jié)點(diǎn)和子結(jié)點(diǎn)的最少樣本量或比例。
后剪枝用于刪除沒有意義的分組,常用方法有計(jì)算結(jié)點(diǎn)中目標(biāo)變量預(yù)測精度或誤差、綜合考慮誤差與復(fù)雜度進(jìn)行剪樹。
此外在ID3算法中,使用信息增益挑選最有解釋力度的變量。
其中信息增益為信息熵減去條件熵得到,增益越大,則變量的影響越大。
C4.5算法則是使用信息增益率作為變量篩選的指標(biāo)。
CART算法可用于分類或數(shù)值預(yù)測,使用基尼系數(shù)(gini)作為選擇最優(yōu)分割變量的指標(biāo)。
/ 02/ Python實(shí)現(xiàn)
慣例,繼續(xù)使用書中提供的數(shù)據(jù)。
一份汽車違約貸款數(shù)據(jù)集。
讀取數(shù)據(jù),并對數(shù)據(jù)進(jìn)行清洗處理。
import os
import pydotplus
import numpy as np
import pandas as pd
import sklearn.tree as tree
import matplotlib.pyplot as plt
from IPython.display import Image
import sklearn.metrics as metrics
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split, ParameterGrid, GridSearchCV
# 消除pandas輸出省略號情況
pd.set_option('display.max_columns', None)
# 設(shè)置顯示寬度為1000,這樣就不會(huì)在IDE中換行了
pd.set_option('display.width', 1000)
# 讀取數(shù)據(jù),skipinitialspace:忽略分隔符后的空白
accepts = pd.read_csv('accepts.csv', skipinitialspace=True)
# dropna:對缺失的數(shù)據(jù)進(jìn)行刪除
accepts = accepts.dropna(axis=0, how='any')
# 因變量,是否違約
target = accepts['bad_ind']
# 自變量
data = accepts.ix[:, 'bankruptcy_ind':'used_ind']
# 業(yè)務(wù)處理,loan_amt:貸款金額,tot_income:月均收入
data['lti_temp'] = data['loan_amt'] / data['tot_income']
data['lti_temp'] = data['lti_temp'].map(lambda x: 10 if x >= 10 else x)
# 刪除貸款金額列
del data['loan_amt']
# 替換曾經(jīng)破產(chǎn)標(biāo)識(shí)列
data['bankruptcy_ind'] = data['bankruptcy_ind'].replace({'N': 0, 'Y': 1})
接下來使用scikit-learn將數(shù)據(jù)集劃分為訓(xùn)練集和測試集。
# 使用scikit-learn將數(shù)據(jù)集劃分為訓(xùn)練集和測試集
train_data, test_data, train_target, test_target = train_test_split(data, target, test_size=0.2, train_size=0.8, random_state=1234)
初始化一個(gè)決策樹模型,使用訓(xùn)練集進(jìn)行訓(xùn)練。
采用基尼系數(shù)作為樹的生長依據(jù),樹的最大深度為3,每一類標(biāo)簽的權(quán)重一樣。
# 初始化一個(gè)決策樹模型
clf = DecisionTreeClassifier(criterion='gini', max_depth=3, class_weight=None, random_state=1234)
# 輸出決策樹模型信息
print(clf.fit(train_data, train_target))
輸出的模型信息如下。
對生成的決策樹模型進(jìn)行評估。
# 輸出決策樹模型的決策類評估指標(biāo)
print(metrics.classification_report(test_target, clf.predict(test_data)))
# 對不同的因變量進(jìn)行權(quán)重設(shè)置
clf.set_params(**{'class_weight': {0: 1, 1: 3}})
clf.fit(train_data, train_target)
# 輸出決策樹模型的決策類評估指標(biāo)
print(metrics.classification_report(test_target, clf.predict(test_data)))
# 輸出決策樹模型的變量重要性排序
print(list(zip(data.columns, clf.feature_importances_)))
輸出如下。
可以看出對因變量標(biāo)簽進(jìn)行權(quán)重設(shè)置后,模型對違約用戶的f1-score(精確率和召回率的調(diào)和平均數(shù))提高了,為0.46。
違約用戶被識(shí)別的靈敏度也從0.24提高到了0.46。
此外決策樹模型的變量重要性排序?yàn)椤窮ICO打分」、「信用卡授權(quán)額度」、「貸款金額/建議售價(jià)*100」。

發(fā)表評論
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個(gè)字
最新活動(dòng)更多
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開發(fā)者大會(huì)深圳站
-
10月24日立即參評>> 【評選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評選
-
即日-11.25立即下載>>> 費(fèi)斯托白皮書《柔性:汽車生產(chǎn)未來的關(guān)鍵》
-
11月27日立即報(bào)名>> 【工程師系列】汽車電子技術(shù)在線大會(huì)
-
12月18日立即報(bào)名>> 【線下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專題
-
9 每日AI全球觀察
- 1 特斯拉工人被故障機(jī)器人打成重傷,索賠3.6億
- 2 【行業(yè)深度研究】退居幕后四年后,張一鳴終于把算法公司變成AI公司?
- 3 AI 時(shí)代,阿里云想當(dāng)“安卓” ,那誰是“蘋果”?
- 4 拐點(diǎn)已至!匯川領(lǐng)跑工控、埃斯頓份額第一、新時(shí)達(dá)海爾賦能扭虧為盈
- 5 硬剛英偉達(dá)!華為發(fā)布全球最強(qiáng)算力超節(jié)點(diǎn)和集群
- 6 隱退4年后,張一鳴久違現(xiàn)身!互聯(lián)網(wǎng)大佬正集體殺回
- 7 00后華裔女生靠兩部AI電影狂賺7.8億人民幣,AI正式進(jìn)軍好萊塢
- 8 谷歌“香蕉”爆火啟示:國產(chǎn)垂類AI的危機(jī)還是轉(zhuǎn)機(jī)?
- 9 機(jī)器人9月大事件|3家國產(chǎn)機(jī)器人沖刺IPO,行業(yè)交付與融資再創(chuàng)新高!
- 10 美光:AI Capex瘋投不止,終于要拉起存儲(chǔ)超級周期了?
- 生產(chǎn)部總監(jiān) 廣東省/廣州市
- 資深管理人員 廣東省/江門市
- Regional Sales Manager 廣東省/深圳市
- 銷售總監(jiān) 廣東省/深圳市
- 結(jié)構(gòu)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 自動(dòng)化高級工程師 廣東省/深圳市
- 技術(shù)專家 廣東省/江門市
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 封裝工程師 北京市/海淀區(qū)