99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
2020-08-26 閱讀量: 1049
機(jī)器學(xué)習(xí)——決策樹

決策樹

決策樹(decision tree)是一種基本的分類與回歸方法

決策樹由結(jié)點(diǎn)(node)和有向邊(directed edge)組成

結(jié)點(diǎn)類型:根結(jié)點(diǎn)(root node),內(nèi)部結(jié)點(diǎn)(internal node)和葉結(jié) 點(diǎn)(leaf node)

決策樹:可以把決策樹看成一個(gè)if-else規(guī)則的集合

由決策樹的根結(jié)點(diǎn)到葉結(jié)點(diǎn)的每一條路徑構(gòu)建一條規(guī)則

路徑上內(nèi)部結(jié)點(diǎn)的特征對應(yīng)著規(guī)則的條件,而葉結(jié)點(diǎn)的類對應(yīng)著規(guī)則的結(jié)論

規(guī)則集合性質(zhì):互斥并且完備(每一個(gè)實(shí)例都被一條路徑或一條規(guī) 則所覆蓋,而且只被一條路徑或一條規(guī)則所覆蓋)

使用決策樹做預(yù)測的過程:

收集數(shù)據(jù)

準(zhǔn)備數(shù)據(jù):將收集的信息按照一定規(guī)則整理出來,方便后續(xù)處理

分析數(shù)據(jù)

訓(xùn)練算法:構(gòu)造決策樹,也可以說是決策樹學(xué)習(xí)

測試算法:使用經(jīng)驗(yàn)樹計(jì)算錯(cuò)誤率。當(dāng)錯(cuò)誤率達(dá)到了可接收范圍, 這個(gè)決策樹就可以投放使用了

使用算法:決策樹可以更好地理解數(shù)據(jù)的內(nèi)在含義

使用決策樹做預(yù)測的每一步驟都很重要,數(shù)據(jù)收集不到位,將會(huì)導(dǎo)致沒有足夠的特征讓我們構(gòu)建錯(cuò)誤率低的決策樹

數(shù)據(jù)特征充足,但是不知道用哪些特征好,將會(huì)導(dǎo)致無法構(gòu)建出分類效果好的決策樹模型。從算法方面看,決策樹的構(gòu)建是我們的核心內(nèi)容

決策樹的構(gòu)建:

特征選擇:

特征選擇在于選取對訓(xùn)練數(shù)據(jù)具有分類能力的特征

特征選擇的標(biāo)準(zhǔn)是信息增益(information gain):

在劃分?jǐn)?shù)據(jù)集之后信息發(fā)生的變化稱為信息增益

通過計(jì)算每個(gè)特征值劃分?jǐn)?shù)據(jù)集獲得的信息增益,獲得信息增益最高的特征就是最好的選擇

決策樹的生成:

第一次劃分之后,數(shù)據(jù)集被向下傳遞到樹的分支的下一 個(gè)結(jié)點(diǎn)。在這個(gè)結(jié)點(diǎn)上,我們可以再次劃分?jǐn)?shù)據(jù)。因此 我們可以采用遞歸的原則處理數(shù)據(jù)集

構(gòu)建決策樹的方法:ID3、C4.5和CART

ID3:解決分類問題,要求特征離散,信息增益最大選擇特征,無減枝策略,不能處理缺失值

C4.5:解決分類問題,特征可以離散或連續(xù)(二分裂處理),信息增益率最大選擇特征,剪枝策略,可以處理缺失值

CART(主要用):特征可以離散可以連續(xù),剪枝策略,可以處理缺失值。分類問題:基尼系數(shù)最小選擇特征;回歸問題:平方誤差最小選擇特征

使用決策樹執(zhí)行分類:

依靠訓(xùn)練數(shù)據(jù)構(gòu)造了決策樹之后,我們可以將它用于實(shí) 際數(shù)據(jù)的分類。在執(zhí)行數(shù)據(jù)分類時(shí),需要決策樹以及用 于構(gòu)造樹的標(biāo)簽向量。然后,程序比較測試數(shù)據(jù)與決策樹上的數(shù)值,遞歸執(zhí)行該過程直到進(jìn)入葉子結(jié)點(diǎn);最后將測試數(shù)據(jù)定義為葉子結(jié)點(diǎn)所屬的類型

決策樹的修剪(C4.5

決策樹的總結(jié)

優(yōu)點(diǎn):

白盒模型,易于理解和解釋

模型建立所需數(shù)據(jù)量較少

可同時(shí)用于分類和回歸

缺點(diǎn):

容易過擬合,需要多參數(shù)調(diào)節(jié)

對數(shù)據(jù)敏感,可通過集成算法進(jìn)行優(yōu)化

優(yōu)化過程是局部優(yōu)化,未必能到全局最優(yōu)

代碼實(shí)現(xiàn):

分類:

from sklearn.datasets import load_iris

from sklearn import tree

import graphviz

import os

#引入數(shù)據(jù)

iris=load_iris()

X=iris.data

y=iris.target

clf=tree.DecisionTreeClassifier(max_depth=3,random_state=10)

clf=clf.fit(X,y)

#引入graphviz模塊用來導(dǎo)出圖,結(jié)果圖如下所示

import graphviz

dot_data=tree.export_graphviz(clf,out_file=None,

feature_names=iris.feature_names,

class_names=iris.target_names,

filled=True,rounded=True,

special_characters=True)

os.chdir(r'G:\graphviz-2.38\release\bin')

graph=graphviz.Source(dot_data)

graph.view()


回歸:

from sklearn.datasets import load_boston

import graphviz

import numpy as np

from sklearn import tree

# 加載boston數(shù)據(jù)函數(shù)

boston = load_boston()

X = boston.data

y = boston.target

from sklearn.model_selection import train_test_split

data_train, data_test, target_train, target_test =train_test_split(X, y, test_size = 0.2, random_state = 42)

dtr = tree.DecisionTreeRegressor()

dtr.fit(data_train, target_train)

dtr.score(data_test, target_test)

參數(shù)調(diào)優(yōu)

from sklearn.model_selection import GridSearchCV

# 加載調(diào)優(yōu)函數(shù)

# 設(shè)置參數(shù)可取值

data_train, data_test, target_train, target_test =train_test_split(X, y, test_size = 0.2, random_state = 42)

gini_impure = np.linspace(0,0.01,10)

param_grid = {"min_impurity_decrease":gini_impure,"max_depth":range(6,15),"min_samples_split":range(2,50,2)}

# 設(shè)置參數(shù)網(wǎng)格

reg = GridSearchCV(tree.DecisionTreeRegressor(),param_grid=param_grid,cv=10,verbose=2,n_jobs=-1)

# 建模

reg.fit(data_train,target_train)

# 擬合訓(xùn)練集數(shù)據(jù)

print(reg.best_params_)

#print(reg.score(X,y))

# 打印結(jié)果

reg.score(data_test,target_test)#模型的得分

重新建模

reg = tree.DecisionTreeRegressor(min_impurity_decrease=0,max_depth=8,min_samples_split=28,random_state=10)

# 加載模型

reg.fit(data_train,target_train)

reg.score(data_test,target_test)


47.4768
0
關(guān)注作者
收藏
評論(0)

發(fā)表評論

暫無數(shù)據(jù)
推薦帖子