sklearn調包俠之決策樹演算法

2021-09-11 16:30:16 字數 4145 閱讀 1145

之前我們詳細講解過決策樹的原理,詳細內容可以參考該鏈結(

改進演算法

但使用資訊增益作為特徵選擇指標(id3演算法)容易造成過擬合。舉乙個簡單例子,每個類別如果都有乙個唯一id,通過id這個特徵就可以簡單分類,但這並不是有效的。為了解決這個問題,有了c4.5和cart演算法,其區別如下所示:

資料匯入與預處理

首先,對於一些不重要的資訊進行刪除(例如name);我們都知道,機器學習是沒法對字串進行計算的,這裡需要把***、embarked轉換為整數型別。

# 刪除列

df.drop(['name', 'ticket', 'cabin'], axis=1, inplace=true)

# ***轉換

def f1(x):

if x == 'male':

return 1

else:

return 0

然後,embarked有缺失值,我們通過seaborn進行視覺化,發現s值最多,所以通過s值進行缺失值填充。

年齡欄位也有缺失值,我們通過繪製直方圖,發現基本呈正態分佈,於是使用平均值來填充缺失值。

處理完成後的資料如下:

切分資料集

from sklearn.model_selection import train_test_split

x = df.iloc[:, 1:]

y = df['survived']

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=22)

模型訓練與評估

決策樹演算法使用sklearn.tree模組中的decisiontreeclassifier方法。該方法有一系列引數來控制決策樹生成過程,從而解決過擬合問題(具體可看sklearn的官方文件)。常用的引數如下:

首先,我們不對引數進行調整。

from sklearn.tree import decisiontreeclassifier

clf = decisiontreeclassifier()

clf.fit(x_train, y_train)

clf.score(x_test, y_test)

# result

# 0.82122905027932958

我們用交叉驗證檢視模型的準確度,發現模型的精度並不是很高。

from sklearn.model_selection import cross_val_score

result = cross_val_score(clf, x, y, cv=10)

print(result.mean())

# result

# 0.772279536942

模型調優

我們可以設定不同的引數,對模型進行調優,這裡以max_depth為例,定義函式,求出最好的引數。

網格搜尋

但這種方法存在這兩個問題:

為了解決這些問題,sklearn提供gridsearchcv方法。

from sklearn.model_selection import gridsearchcv

threshholds = np.linspace(0, 0.5, 50)

param_grid =

clf = gridsearchcv(decisiontreeclassifier(), param_grid, cv=5)

clf.fit(x, y)

print("best param: \nbest score: ".format(clf.best_params_,

clf.best_score_))

# result

# best param:

best score: 0.8204264870931538

SKlearn之決策樹

決策樹是一種非引數的監督學習方法。模組 sklearn.tree sklearn建模的步驟 1 選擇並建立模型 例 clf tree.decisiontreeclassifier 2 提供資料訓練模型 例 clf clf.fit x train,y train 3 獲取需要的資訊 例 result ...

sklearn調包俠之KNN演算法

天下武功,唯快不破。今天就正式講解如何通過 sklearn小抄 武林秘籍,成為一代宗師調包俠。欲練此功,必先自宮 就算自宮,未必成功 若不自宮,也能成功。傳說江湖 機器學習領域 有兩大派別 一是學術派,該派資歷高,家境好,多為名門世家 學歷高,數學好 重基礎 數學推導和理論知識 一是實踐派,以找人切...

sklearn調包俠之邏輯回歸

傳送門 機器學習實戰之logistic回歸 正則化這裡補充下正則化的知識。當乙個模型太複雜時,就容易過擬合,解決的辦法是減少輸入特徵的個數,或者獲取更多的訓練樣本。正則化也是用來解決模型過擬合的一種方法。常用的有l1和l2範數做為正則化項。資料匯入 本次實戰依舊是使用sklearn中的資料集,如圖所...