決策樹演算法 擬合優化

2021-10-10 11:54:00 字數 3020 閱讀 4112

常用的演算法是:cart 和 id3 演算法。

cart 演算法採用gini係數最小的來決定使用哪種特徵來進行**;

id3演算法採用資訊增益最大的特徵來決定使用哪種特徵來進行**;

這次的資料集使用稍微複雜一點的鐵達尼號**生死的資料。

重複的**不囉嗦,直接上

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

data=pd.read_csv(r'data.csv'

,index_col=0)

data.drop(

['cabin'

,'name'

,'ticket'

,'embarked'

],inplace=

true

,axis=1)

data[

'age'

]=data[

'age'

].fillna(data[

'age'

].mean())

data=data.dropna(

)data[

'***'

]=data[

'***'

].replace(to_replace=

['female'

,'male'

],value=[1

,0])

初步完成了缺失值的填充和刪除處理,以及將性別替換成啞變數。

接下來,將資料集分成特徵值和標籤值。

x=data.iloc[:,

1:]y=data.iloc[:,

0]

切分訓練集和測試集

from sklearn.model_selection import train_test_split

from sklearn.tree import decisiontreeclassifier

xtrain,xtest,ytrain,ytest=train_test_split(x,y,test_size=

0.3,random_state=

25)

這裡有兩種方式找到最優引數,一種是自己寫**,找到最優引數。

還有一種是呼叫別人寫好的函式。

1、自己寫**找最優引數

計算不同深度下決策樹的訓練集和測試集的得分

xs=np.arange(1,

11)depth_no=

for x in xs:

clf=decisiontreeclassifier(max_depth=x,random_state=25)

clf.fit(xtrain,ytrain)

cte=clf.score(xtest,ytest)

ctr=clf.score(xtrain,ytrain)

[x,cte,ctr]

)

使用matplotlib畫出正確率的曲線圖

depth_no=pd.dataframe(data=depth_no)

plt.plot(depth_no[0]

,depth_no[1]

,label=

'test_score'

)plt.plot(depth_no[0]

,depth_no[2]

,label=

'train_score'

)plt.legend(

)plt.show(

)

決策樹最容易出現的就是過擬合問題,隨著樹的深度越來越深,訓練集的正確率越來越高,但是測試集的效果反而下降。

由圖可以看出,樹的深度在3的時候,擬合效果較好。

2、呼叫別人寫好的函式

導包

from sklearn.model_selection import gridsearchcv
給引數

para=

給定決策樹演算法,填入訓練集,自動給出最優引數。

clf=decisiontreeclassifier(criterion=

'entropy'

)gs=gridsearchcv(clf,para,cv=10)

gs=gs.fit(xtrain,ytrain)

gs.best_params_

這裡給出的最優深度是3,和作圖得到的結果是一致的。

最後就是將得到的最優引數帶入到演算法中

clf=decisiontreeclassifier(max_depth=

3,min_impurity_decrease=

0,min_samples_leaf=

1,random_state=25)

clf.fit(xtrain,ytrain)

想看決策樹的樣子,和之前的一樣

import graphviz

from sklearn import tree

dot_data=tree.export_graphviz(clf,out_file=

none

,feature_names=x.columns,class_names=

['死亡'

,'生存'

決策樹演算法

決策樹是一種樹型結構,其中每個內部結點表示在乙個屬性上的測試,每個分支代表乙個測試輸出,每個葉結點代表一種類別。決策樹學習是以例項為基礎的歸納學習,採用的是自頂向下的遞迴方法,其基本思想是以資訊熵為度量構造一棵熵值下降最快的樹,到葉子結點處的熵值為零,此時每個葉節點中的例項都屬於同一類。決策樹學習演...

決策樹演算法

本文主要介紹id3 c4.5和cart演算法 決策樹起源於概念學習系統 cls 概念學習模型 是乙個事先定義的範疇集合和一些有關例子是否落入給定範疇的判定 概念學習的主要任務 是判斷所給定事物的屬性或特性,並且正確地區分這些事物,將其劃分到某乙個範疇 對於如下決策樹模型 我們首先考慮他的屬性outl...

決策樹演算法

引 最近老師布置了課堂展示的作業,主題是決策樹,老師還舉了買西瓜的決策例子,感覺貼近生活也很有意思。在這之前沒有了解過這個概念,通過幾個禮拜的學習收穫不少。一 首先,什麼是決策樹?個人而言,決策樹就是將人在做決策時的思維脈絡以樹的形式展示出來的產物,即決策的過程模型。這是一棵去不去打高爾夫球的決策樹...