国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

sklearn機(jī)器學(xué)習(xí)庫(一)sklearn中的決策樹

這篇具有很好參考價(jià)值的文章主要介紹了sklearn機(jī)器學(xué)習(xí)庫(一)sklearn中的決策樹。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

sklearn機(jī)器學(xué)習(xí)庫(一)sklearn中的決策樹

sklearn中決策樹的類都在”tree“這個(gè)模塊之下。

tree.DecisionTreeClassifier 分類樹
tree.DecisionTreeRegressor 回歸樹
tree.export_graphviz 將生成的決策樹導(dǎo)出為DOT格式,畫圖專用
tree.export_text 以文字形式輸出樹
tree.ExtraTreeClassifier 高隨機(jī)版本的分類樹
tree.ExtraTreeRegressor 高隨機(jī)版本的回歸樹

1、DecisionTreeClassifier及其重要參數(shù)

1.1 重要參數(shù)

1.1.1 參數(shù)criterion

  • 決策樹需要找出最佳節(jié)點(diǎn)和最佳的分枝方法,對(duì)分類樹來說,衡量這個(gè)“最佳”的指標(biāo)叫做“不純度”。

  • 通常來說,不純度越低,決策樹對(duì)訓(xùn)練集的擬合越好。

  • 不純度基于節(jié)點(diǎn)來計(jì)算,樹中的每個(gè)節(jié)點(diǎn)都會(huì)有一個(gè)不純度,并且子節(jié)點(diǎn)的不純度一定是低于父節(jié)點(diǎn)的。

  • criterion這個(gè)參數(shù)正是用來決定不純度的計(jì)算方法的。sklearn提供了兩種選擇:

    • 輸入”entropy“,使用信息熵(Entropy)

    • 輸入”gini“,使用基尼系數(shù)(Gini Impurity)

在實(shí)際使用中,信息熵和基尼系數(shù)的效果基本相同。

信息熵的計(jì)算比基尼系數(shù)緩慢一些,因?yàn)榛嵯禂?shù)的計(jì)算不涉及對(duì)數(shù)。

因?yàn)樾畔㈧貙?duì)不純度更加敏感,所以信息熵作為指標(biāo)時(shí),決策樹的生長(zhǎng)會(huì)更加“精細(xì)”,因此對(duì)于高維數(shù)據(jù)或者噪音很多的數(shù)據(jù),信息熵很容易過擬合,基尼系數(shù)在這種情況下效果往往比較好。

當(dāng)模型擬合程度不足的時(shí)候,即當(dāng)模型在訓(xùn)練集和測(cè)試集上都表現(xiàn)不太好的時(shí)候,使用信息熵。當(dāng)然,這些不是絕對(duì)的。

from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_wine
import pandas as pd
# 紅酒數(shù)據(jù)集
wine = load_wine()

print(wine.keys())
dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names'])
print(wine.data.shape)
print(wine.target)
print(wine.feature_names)
print(wine.target_names)
(178, 13)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline']
['class_0' 'class_1' 'class_2']
pd.concat(
    # 在列上進(jìn)行拼接
    [pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1
)

# 劃分訓(xùn)練集和測(cè)試集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data, wine.target,test_size=0.3)

print(Xtrain.shape)
print(Xtest.shape)
(124, 13)
(54, 13)
# 模型創(chuàng)建與訓(xùn)練
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) # 返回預(yù)測(cè)的準(zhǔn)確度
print(score)
import graphviz

# 畫出決策樹
feature_name = ['酒精','蘋果酸','灰','灰的堿性','鎂','總酚','類黃酮','非黃烷類酚類','花青素','顏色強(qiáng)度','色調(diào)','od280/od315稀釋葡萄酒','脯氨酸']

dot = tree.export_graphviz(
    decision_tree=clf,
    out_file=None,
    feature_names=feature_name,
    class_names=["琴酒","雪莉","貝爾摩德"],
    filled=True,  # 填充顏色
    rounded=True  # 鈍化角
)

graph = graphviz.Source(dot)

graph
# 特征重要性
sorted([*zip(feature_name,clf.feature_importances_)],key=lambda x:x[1],reverse=True)
[('od280/od315稀釋葡萄酒', 0.4258755013151412),
 ('脯氨酸', 0.34593013978074255),
 ('酒精', 0.08094994077047969),
 ('顏色強(qiáng)度', 0.07600214535710607),
 ('色調(diào)', 0.03483435693073402),
 ('蘋果酸', 0.02210497552631582),
 ('花青素', 0.014302940319480591),
 ('灰', 0.0),
 ('灰的堿性', 0.0),
 ('鎂', 0.0),
 ('總酚', 0.0),
 ('類黃酮', 0.0),
 ('非黃烷類酚類', 0.0)]

總結(jié)如下:

  • 通常就使用基尼系數(shù)

  • 數(shù)據(jù)維度很大,噪音很大時(shí)使用基尼系數(shù)

  • 維度低,數(shù)據(jù)比較清晰的時(shí)候,信息熵和基尼系數(shù)沒區(qū)別

  • 當(dāng)決策樹的擬合程度不夠的時(shí)候,使用信息熵

  • 總之,兩個(gè)都試試,不好就換另外一個(gè)

決策樹在建樹時(shí),是靠?jī)?yōu)化節(jié)點(diǎn)來追求一棵優(yōu)化的樹,但最優(yōu)的節(jié)點(diǎn)能夠保證最優(yōu)的樹嗎?

集成算法被用來解決這個(gè)問題:既然一棵樹不能保證最優(yōu),那就建更多的不同的樹,然后從中取最好的。

怎樣從一組數(shù)據(jù)集中建不同的樹?在每次分枝時(shí),不從使用全部特征,而是隨機(jī)選取一部分特征,從中選取不純度相關(guān)指標(biāo)最優(yōu)的作為分枝用的節(jié)點(diǎn)。這樣,每次生成的樹也就不同了。

1.1.2 random_state & splitter

  • random_state隨機(jī)模式參數(shù),默認(rèn)None,在高維度時(shí)隨機(jī)性會(huì)表現(xiàn)更明顯,低維度的數(shù)據(jù)(比如鳶尾花數(shù)據(jù)集),隨機(jī)性幾乎不會(huì)顯現(xiàn)。輸入任意整數(shù),會(huì)一直長(zhǎng)出同一棵樹,讓模型穩(wěn)定下來。

  • splitter也是用來控制決策樹中的隨機(jī)選項(xiàng)的,有兩種輸入值

    • 輸入”best",決策樹在分枝時(shí)雖然隨機(jī),但是還是會(huì)優(yōu)先選擇更重要的特征進(jìn)行分枝
    • 輸入“random",決策樹在分枝時(shí)會(huì)更加隨機(jī),樹會(huì)因?yàn)楹?code>更多的不必要信息而更深更大。這也是防止過擬合的一種方式。當(dāng)然,我們經(jīng)常會(huì)使用剪枝參數(shù)來防止過擬合。
clf = tree.DecisionTreeClassifier(
    criterion='entropy',
    random_state=30,
    splitter='random'
)

clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) # 返回預(yù)測(cè)的準(zhǔn)確度
print(score)

1.1.3 剪枝參數(shù)

決策樹往往會(huì)過擬合,它會(huì)在訓(xùn)練集上表現(xiàn)很好,在測(cè)試集上卻表現(xiàn)糟糕。 我們收集的樣本數(shù)據(jù)不可能和整體的狀況完全一致,因此當(dāng)一棵決策樹對(duì)訓(xùn)練數(shù)據(jù)有了過于優(yōu)秀的解釋性,它找出的規(guī)則必然包含了訓(xùn)練樣本中的噪聲,并使它對(duì)未知數(shù)據(jù)的擬合程度不足。

剪枝策略對(duì)決策樹的影響巨大,正確的剪枝策略是優(yōu)化決策樹算法的核心。

sklearn為我們提供了不同的剪枝策略:

1.1.3.1 max_depth

限制樹的最大深度,超過設(shè)定深度的樹枝全部剪掉,這是用得最廣泛的剪枝參數(shù),在高維度低樣本量時(shí)非常有效。

決策樹多生長(zhǎng)一層,對(duì)樣本量的需求會(huì)增加一倍,所以限制樹深度能夠有效地限制過擬合。

在集成算法中也非常實(shí)用。

實(shí)際使用時(shí),建議從=3開始嘗試,看看擬合的效果再?zèng)Q定是否增加設(shè)定深度。

1.1.3.2 min_samples_leaf & min_samples_split

min_samples_leaf,限定一個(gè)節(jié)點(diǎn)在分枝后的每個(gè)子節(jié)點(diǎn)都必須包含至少min_samples_leaf個(gè)訓(xùn)練樣本,否則分枝就不會(huì)發(fā)生 。

  • 一般搭配max_depth使用,可以讓模型變得更加平滑。

  • 這個(gè)參數(shù)的數(shù)量設(shè)置得太小會(huì)引起過擬合,設(shè)置得太大就會(huì)阻止模型學(xué)習(xí)數(shù)據(jù)。

  • 一般來說,建議從=5開始使用。如果葉節(jié)點(diǎn)中含有的樣本量變化很大,建議輸入浮點(diǎn)數(shù)作為樣本量的百分比來使用。

  • 同時(shí),這個(gè)參數(shù)可以保證每個(gè)葉子的最小尺寸,可以在回歸問題中避免低方差,過擬合的葉子節(jié)點(diǎn)出現(xiàn)。

  • 對(duì)于類別不多的分類問題,=1通常就是最佳選擇。

min_samples_split,限定一個(gè)節(jié)點(diǎn)必須要包含至少min_samples_split個(gè)訓(xùn)練樣本,這個(gè)節(jié)點(diǎn)才允許被分枝,否則分枝就不會(huì)發(fā)生。

clf = tree.DecisionTreeClassifier(criterion="entropy"
                                    ,random_state=30
                                    ,splitter="random"
                                    ,max_depth=3
                                    ,min_samples_leaf=10
                                    ,min_samples_split=10
                                 )

clf = clf.fit(Xtrain, Ytrain)

dot_data = tree.export_graphviz(clf
                                ,feature_names= feature_name
                                ,class_names=["琴酒","雪莉","貝爾摩德"]
                                ,filled=True
                                ,rounded=True
                                )

graph = graphviz.Source(dot_data)

graph
print(clf.score(Xtrain,Ytrain))
print(clf.score(Xtest,Ytest))
0.8951612903225806
0.8888888888888888
1.1.3.3 max_features & min_impurity_decrease

max_features限制分枝時(shí)考慮的特征個(gè)數(shù),超過限制個(gè)數(shù)的特征都會(huì)被舍棄。

max_features是用來限制高維度數(shù)據(jù)的過擬合的剪枝參數(shù),但其方法比較暴力,是直接限制可以使用的特征數(shù)量而強(qiáng)行使決策樹停下的參數(shù),在不知道決策樹中的各個(gè)特征的重要性的情況下,強(qiáng)行設(shè)定這個(gè)參數(shù)可能會(huì)導(dǎo)致模型學(xué)習(xí)不足。如果希望通過降維的方式防止過擬合,建議使用PCA,ICA或者特征選擇模塊中的降維算法。

min_impurity_decrease限制信息增益的大小,信息增益小于設(shè)定數(shù)值的分枝不會(huì)發(fā)生。

1.1.3.4 確認(rèn)最優(yōu)的剪枝參數(shù)

超參數(shù)的學(xué)習(xí)曲線,是一條以超參數(shù)的取值為橫坐標(biāo),模型的度量指標(biāo)為縱坐標(biāo)的曲線,它是用來衡量不同超參數(shù)取值下模型的表現(xiàn)的線。 我們可以通過學(xué)習(xí)曲線,來確定最優(yōu)的剪枝參數(shù)。

import matplotlib.pyplot as plt

test = []

for i in range(10):
    clf = tree.DecisionTreeClassifier(
        max_depth= i + 1,
        criterion='entropy',
        random_state=30,
        splitter='random'
    )
    clf = clf.fit(Xtrain, Ytrain)
    score = clf.score(Xtest, Ytest)
    test.append(score)

plt.plot(range(1,11), test,color='green', label='max_depth')
plt.legend()
plt.show()

sklearn機(jī)器學(xué)習(xí)庫(一)sklearn中的決策樹,# 數(shù)據(jù)分析,機(jī)器學(xué)習(xí),sklearn,決策樹

這么多參數(shù),需要一個(gè)個(gè)畫學(xué)習(xí)曲線嗎?我們?cè)谙旅姘咐?,使用網(wǎng)格搜索來進(jìn)行多個(gè)參數(shù)的調(diào)參。

剪枝參數(shù)的默認(rèn)值會(huì)讓樹無盡地生長(zhǎng),這些樹在某些數(shù)據(jù)集上可能非常巨大,對(duì)內(nèi)存的消耗也非常巨大。所以如果你手中的數(shù)據(jù)集非常巨大,你已經(jīng)預(yù)測(cè)到無論如何你都是要剪枝的,那提前設(shè)定這些參數(shù)來控制樹的復(fù)雜性和大小會(huì)比較好。

1.1.3.5 class_weight & min_weight_fraction_leaf

樣本不平衡是指在一組數(shù)據(jù)集中,標(biāo)簽的一類天生占有很大的比例。比如說,在銀行要判斷“一個(gè)辦了信用卡的人是否會(huì)違約”,是vs否(1%:99%)的比例。這種分類狀況下,即便模型什么也不做,全把結(jié)果預(yù)測(cè)成“否”,正確率也能有99%。

因此我們要使用class_weight參數(shù)對(duì)樣本標(biāo)簽進(jìn)行一定的均衡,給少量的標(biāo)簽更多的權(quán)重,讓模型更偏向少數(shù)類,向捕獲少數(shù)類的方向建模。該參數(shù)默認(rèn)None,此模式表示自動(dòng)給與數(shù)據(jù)集中的所有標(biāo)簽相同的權(quán)重。

有了權(quán)重之后,樣本量就不再是單純地記錄數(shù)目,而是受輸入的權(quán)重影響了,因此這時(shí)候剪枝,就需要搭配min_weight_fraction_leaf這個(gè)基于權(quán)重的剪枝參數(shù)來使用。

1.2 重要的屬性和接口

決策樹來說,最重要的屬性是feature_importances_,能夠查看各個(gè)特征對(duì)模型的重要性。

sklearn中許多算法的接口都是相似的,比如說我們之前已經(jīng)用到的fit和score,幾乎對(duì)每個(gè)算法都可以使用。

除了這兩個(gè)接口之外,決策樹最常用的接口還有apply和predict。apply中輸入測(cè)試集返回每個(gè)測(cè)試樣本所在的葉子節(jié)點(diǎn)的索引,predict輸入測(cè)試集返回每個(gè)測(cè)試樣本的標(biāo)簽。

#apply返回每個(gè)測(cè)試樣本所在的葉子節(jié)點(diǎn)的索引
clf.apply(Xtest)

#predict返回每個(gè)測(cè)試樣本的分類/回歸結(jié)果
clf.predict(Xtest)

所有接口中要求輸入X_train和X_test的部分,輸入的特征矩陣必須至少是一個(gè)二維矩陣。sklearn不接受任何一維矩陣作為特征矩陣被輸入。

2、DecisionTreeRegressor及其重要參數(shù)

DecisionTreeRegressor幾乎所有參數(shù),屬性及接口都和分類樹一模一樣。

需要注意的是,在回歸樹中,沒有標(biāo)簽分布是否均衡的問題,因此沒有class_weight這樣的參數(shù) 。

2.1 criterion

回歸樹衡量分枝質(zhì)量的指標(biāo),支持的標(biāo)準(zhǔn)有三種:

  • 輸入"mse"使用均方誤差mean squared error(MSE),父節(jié)點(diǎn)和葉子節(jié)點(diǎn)之間的均方誤差的差額將被用來作為特征選擇的標(biāo)準(zhǔn),這種方法通過使用葉子節(jié)點(diǎn)的均值來最小化L2損失。

  • 輸入“friedman_mse”使用費(fèi)爾德曼均方誤差,這種指標(biāo)使用弗里德曼針對(duì)潛在分枝中的問題改進(jìn)后的均方誤差

  • 輸入"mae"使用絕對(duì)平均誤差MAE(mean absolute error)

屬性中最重要的依然是feature_importances_,接口依然是apply, fit, predict, score最核心 。

回歸樹中,MSE不只是我們的分枝質(zhì)量衡量指標(biāo),也是我們最常用的衡量回歸樹回歸質(zhì)量的指標(biāo) 。

當(dāng)我們?cè)谑褂媒徊骝?yàn)證,或者其他方式獲取回歸樹的結(jié)果時(shí),我們往往選擇均方誤差作為我們的評(píng)估(在分類樹中這個(gè)指標(biāo)是score代表的預(yù)測(cè)準(zhǔn)確率)。在回歸中,我們追求的是,MSE越小越好。

回歸樹的接口score返回的是R平方,并不是MSE。 R平方可以為正為負(fù)(如果模型的殘差平方和遠(yuǎn)遠(yuǎn)大于模型的總平方和,模型非常糟糕,R平方就會(huì)為負(fù)),而均方誤差永遠(yuǎn)為正。

sklearn機(jī)器學(xué)習(xí)庫(一)sklearn中的決策樹,# 數(shù)據(jù)分析,機(jī)器學(xué)習(xí),sklearn,決策樹

其中: u是殘差平方和(MSE * N),v是總平方和,N是樣本數(shù)量,i是每一個(gè)數(shù)據(jù)樣本,fi是模型回歸出的數(shù)值,yi是樣本點(diǎn)i實(shí)際的數(shù)值標(biāo)簽。y帽是真實(shí)數(shù)值標(biāo)簽的平均數(shù)。

注意:

雖然均方誤差永遠(yuǎn)為正,但是sklearn當(dāng)中使用均方誤差作為評(píng)判標(biāo)準(zhǔn)時(shí),卻是計(jì)算負(fù)均方誤差(neg_mean_squared_error)。

這是因?yàn)閟klearn在計(jì)算模型評(píng)估指標(biāo)的時(shí)候,會(huì)考慮指標(biāo)本身的性質(zhì),均方誤差本身是一種誤差,所以被sklearn劃分為模型的一種損失(loss),因此在sklearn當(dāng)中,都以負(fù)數(shù)表示。

真正的均方誤差MSE的數(shù)值,其實(shí)就是neg_mean_squared_error去掉負(fù)號(hào)的數(shù)字。

import pandas as pd
from sklearn import tree
from sklearn.model_selection import cross_val_score

# 1、讀取波士頓數(shù)據(jù)集,注意:新版本的sklearn中自帶的已經(jīng)刪除
data = pd.read_csv("boston_housing.data", sep='\s+', header=None)

x = data.iloc[:, :-1]
y = data.iloc[:, -1]

# 2、交叉驗(yàn)證
regressor = tree.DecisionTreeRegressor(random_state=420)
cross_val_score(
    regressor,
    x,
    y,
    cv=10, # 10折交叉驗(yàn)證
    scoring='neg_mean_squared_error' # 負(fù)均方誤差
).mean()

交叉驗(yàn)證是用來觀察模型的穩(wěn)定性的一種方法,我們將數(shù)據(jù)劃分為n份,依次使用其中一份作為測(cè)試集,其他n-1份作為訓(xùn)練集,多次計(jì)算模型的精確性來評(píng)估模型的平均準(zhǔn)確程度。訓(xùn)練集和測(cè)試集的劃分會(huì)干擾模型的結(jié)果,因此用交叉驗(yàn)證n次的結(jié)果求出的平均值,是對(duì)模型效果的一個(gè)更好的度量。

2.2 一維回歸的圖像繪制小案例

我們用回歸樹來擬合正弦曲線,并添加一些噪聲來觀察回歸樹的表現(xiàn)。

import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt


'''
我們的基本思路是,先創(chuàng)建一組隨機(jī)的,分布在0~5上的橫坐標(biāo)軸的取值(x),然后將這一組值放到sin函
數(shù)中去生成縱坐標(biāo)的值(y),接著再到y(tǒng)上去添加噪聲。
'''
rng = np.random.RandomState(1)


X = np.sort(5 * rng.rand(80,1), axis=0)
y = np.sin(X).ravel() # ravel()降維
y[::5] += 3 * (0.5 - rng.rand(16)) # 每隔5個(gè),添加一個(gè)噪聲數(shù)據(jù)

# 訓(xùn)練模型
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(X, y)
regr_2.fit(X, y)

# 測(cè)試數(shù)據(jù)
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis] # np.newaxis 升緯
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)

# 畫圖展示
plt.figure()
plt.figure(figsize=(8,6))
plt.scatter(X, y, s=20, edgecolor="black",c="darkorange", label="data")
plt.plot(X_test, y_1, color="cornflowerblue",label="max_depth=2", linewidth=2)
plt.plot(X_test, y_2, color="yellowgreen", label="max_depth=5", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.show()

sklearn機(jī)器學(xué)習(xí)庫(一)sklearn中的決策樹,# 數(shù)據(jù)分析,機(jī)器學(xué)習(xí),sklearn,決策樹

回歸樹學(xué)習(xí)了近似正弦曲線的局部線性回歸。

我們可以看到,如果樹的最大深度(由max_depth參數(shù)控制)設(shè)置得太高,則決策樹學(xué)習(xí)得太精細(xì),它從訓(xùn)練數(shù)據(jù)中學(xué)了很多細(xì)節(jié),包括噪聲得呈現(xiàn),從而使模型偏離真實(shí)的正弦曲線,形成過擬合。

3、實(shí)例:泰坦尼克號(hào)幸存者的預(yù)測(cè)

3.1 數(shù)據(jù)預(yù)處理和特征工程

import pandas as pd
from sklearn.model_selection import cross_val_score,train_test_split,GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from matplotlib import pyplot as plt
data = pd.read_csv(r'data.csv')

data.head()

sklearn機(jī)器學(xué)習(xí)庫(一)sklearn中的決策樹,# 數(shù)據(jù)分析,機(jī)器學(xué)習(xí),sklearn,決策樹

# 數(shù)據(jù)預(yù)處理

# 刪除缺失值過多的列、以及和y沒有關(guān)系的列
data.drop(['Cabin','Name','Ticket'], inplace=True,axis=1)
# 填充缺失值

# 缺失值較少的填充均值
data['Age'] = data['Age'].fillna(data['Age'].mean())
# 缺失值較多的,直接刪除
data = data.dropna()



# 將分類變量轉(zhuǎn)換為數(shù)值變量

# 性別是2分類變量
print(data['Sex'].unique().tolist())
# 性別轉(zhuǎn)換為 male = 1 female = 0
data['Sex'] = (data['Sex'] == 'male').astype(int)

# Embarked是3分類變量
print(data['Embarked'].unique().tolist())

# 直接轉(zhuǎn)換為list的下標(biāo)
labels = data['Embarked'].unique().tolist()
data['Embarked'] = data['Embarked'].apply(lambda x: labels.index(x))

3.2 模型訓(xùn)練

# 劃分訓(xùn)練集和測(cè)試集
X = data.iloc[:, 2:]
y = data.iloc[:, 1]


Xtrain, Xtest, Ytrain, Ytest = train_test_split(X, y, test_size=0.3)
# 導(dǎo)入模型,粗略跑一下,查看結(jié)果
clf = DecisionTreeClassifier(random_state=25)
clf = clf.fit(Xtrain, Ytrain)
score_ = clf.score(Xtest, Ytest)

print(score_)
# 通過學(xué)習(xí)曲線,觀察在不同深度下模型擬合的狀況
train_score = []
test_score = []


for i in range(10):
    clf = DecisionTreeClassifier(random_state=25, max_depth=(i + 1),criterion='entropy')
    clf = clf.fit(Xtrain, Ytrain)
    score_train = clf.score(Xtest, Ytest)
    # 使用全量的數(shù)據(jù)集求取交叉驗(yàn)證的均值
    score_test = cross_val_score(clf, X, y, cv=10).mean()
    train_score.append(score_train)
    test_score.append(score_test)

# 打印最大的測(cè)試分?jǐn)?shù),以及所在的索引
print(max(test_score),test_score.index(max(test_score)))
# 畫圖
plt.plot(range(1,11),train_score,color='orange',label='train')
plt.plot(range(1,11),test_score,color='green',label='test')
plt.xticks(range(1,11))
plt.legend()
plt.show()

sklearn機(jī)器學(xué)習(xí)庫(一)sklearn中的決策樹,# 數(shù)據(jù)分析,機(jī)器學(xué)習(xí),sklearn,決策樹文章來源地址http://www.zghlxwxcb.cn/news/detail-645327.html

# 使用網(wǎng)格搜搜調(diào)整多個(gè)參數(shù)
import numpy as np


gini_thresholds = np.linspace(0,0.5,20)
parameters = {'splitter':('best','random')
                ,'criterion':("gini","entropy")
                ,"max_depth":[*range(1,10)]
                ,'min_samples_leaf':[*range(1,50,5)]
                ,'min_impurity_decrease':[*np.linspace(0,0.5,20)]
                }


clf = DecisionTreeClassifier(random_state=25)

gs = GridSearchCV(clf,parameters, cv=10)

gs.fit(Xtrain, Ytrain)

print(gs.best_params_)
print(gs.best_score_)
{'criterion': 'entropy', 'max_depth': 4, 'min_impurity_decrease': 0.0, 'min_samples_leaf': 11, 'splitter': 'random'}
0.8087301587301587

到了這里,關(guān)于sklearn機(jī)器學(xué)習(xí)庫(一)sklearn中的決策樹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 機(jī)器學(xué)習(xí)--sklearn(決策樹)

    機(jī)器學(xué)習(xí)--sklearn(決策樹)

    決策樹(Decision Tree)是一種非參數(shù)的有監(jiān)督學(xué)習(xí)方法,它能夠從一系列有特征和標(biāo)簽的數(shù)據(jù)中總結(jié)出決策規(guī)則,并用樹狀圖的結(jié)構(gòu)來呈現(xiàn)這些規(guī)則,以解決分類和回歸問題。 節(jié)點(diǎn) 根節(jié)點(diǎn):沒有進(jìn)邊,有出邊。包含最初的,針對(duì)特征的提問。 中間節(jié)點(diǎn):既有進(jìn)邊也有出邊,進(jìn)

    2023年04月18日
    瀏覽(22)
  • 神經(jīng)決策樹在物聯(lián)網(wǎng)數(shù)據(jù)分析中的應(yīng)用與優(yōu)化

    物聯(lián)網(wǎng)(Internet of Things,簡(jiǎn)稱IoT)是指通過互聯(lián)網(wǎng)將物體和日常生活中的各種設(shè)備連接起來,使得物體和設(shè)備能夠互相傳遞信息,協(xié)同工作。隨著物聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,我們的生活、工作、交通等各個(gè)方面都受到了其影響。 在物聯(lián)網(wǎng)中,數(shù)據(jù)是非常寶貴的。物聯(lián)網(wǎng)設(shè)備會(huì)產(chǎn)生

    2024年02月19日
    瀏覽(23)
  • 【python庫學(xué)習(xí)】 sklearn中的決策樹Decision Trees

    【python庫學(xué)習(xí)】 sklearn中的決策樹Decision Trees

    一棵決策樹包含一個(gè)根結(jié)點(diǎn)、若干個(gè)內(nèi)部結(jié)點(diǎn)和若干個(gè)葉結(jié)點(diǎn);葉結(jié)點(diǎn)對(duì)應(yīng)于決策結(jié)果,其他每個(gè)結(jié)點(diǎn)則對(duì)應(yīng)于一個(gè)屬性測(cè)試;每個(gè)結(jié)點(diǎn)包含的樣本集合根據(jù)屬性測(cè)試的結(jié)果被劃分到子結(jié)點(diǎn)中;根結(jié)點(diǎn)包含樣本全集.從根結(jié)點(diǎn)到每個(gè)葉結(jié)點(diǎn)的路徑對(duì)應(yīng)了一個(gè)判定測(cè)試序列. 劃分準(zhǔn)則

    2024年04月28日
    瀏覽(23)
  • 機(jī)器學(xué)習(xí)與數(shù)據(jù)分析

    機(jī)器學(xué)習(xí)與數(shù)據(jù)分析

    孤立森林(Isolation Forest)從原理到實(shí)踐 效果評(píng)估:F-score 【1】 保護(hù)隱私的時(shí)間序列異常檢測(cè)架構(gòu) 概率后綴樹 PST – (異常檢測(cè)) 【1】 UEBA架構(gòu)設(shè)計(jì)之路5: 概率后綴樹模型 【2】 基于深度模型的日志序列異常檢測(cè) 【3】 史上最全異常檢測(cè)算法概述 后綴樹 – (最長(zhǎng)公共子串

    2024年02月10日
    瀏覽(75)
  • 機(jī)器學(xué)習(xí)和大數(shù)據(jù):如何利用機(jī)器學(xué)習(xí)算法分析和預(yù)測(cè)大數(shù)據(jù)

    機(jī)器學(xué)習(xí)和大數(shù)據(jù):如何利用機(jī)器學(xué)習(xí)算法分析和預(yù)測(cè)大數(shù)據(jù)

    ? 近年來,隨著科技的迅速發(fā)展和數(shù)據(jù)的爆炸式增長(zhǎng),大數(shù)據(jù)已經(jīng)成為我們生活中無法忽視的一部分。大數(shù)據(jù)不僅包含著海量的信息,而且蘊(yùn)含著無數(shù)的商機(jī)和挑戰(zhàn)。然而,如何從這些海量的數(shù)據(jù)中提取有價(jià)值的信息并做出準(zhǔn)確的預(yù)測(cè)成為了許多企業(yè)和研究機(jī)構(gòu)亟需解決的問

    2024年02月06日
    瀏覽(19)
  • 機(jī)器學(xué)習(xí) 探索性數(shù)據(jù)分析

    機(jī)器學(xué)習(xí) 探索性數(shù)據(jù)分析

    數(shù)據(jù)探索性分析(EDA)目的主要是了解整個(gè)數(shù)據(jù)集的基本情況(多少行、多少列、均值、方差、缺失值、異常值等);通過查看特征的分布、特征與標(biāo)簽之間的分布了解變量之間的相互關(guān)系、變量與預(yù)測(cè)值之間的存在關(guān)系;為特征工程做準(zhǔn)備。 使用的數(shù)據(jù)是廣告點(diǎn)擊率預(yù)估挑

    2023年04月15日
    瀏覽(24)
  • Python數(shù)據(jù)分析—基于機(jī)器學(xué)習(xí)的UCI心臟病數(shù)據(jù)分析(源碼+數(shù)據(jù)+分析設(shè)計(jì))

    Python數(shù)據(jù)分析—基于機(jī)器學(xué)習(xí)的UCI心臟病數(shù)據(jù)分析(源碼+數(shù)據(jù)+分析設(shè)計(jì))

    下載鏈接:https://pan.baidu.com/s/1ys2F6ZH4EgnFdVP2mkTcsA?pwd=LCFZ 提取碼:LCFZ 心臟病是一類比較常見的循環(huán)系統(tǒng)疾病。循環(huán)系統(tǒng)由心臟、血管和調(diào)節(jié)血液循環(huán)的神經(jīng)體液組織構(gòu)成,循環(huán)系統(tǒng)疾病也稱為心血管病,包括上述所有組織器官的疾病,在內(nèi)科疾病中屬于常見病,其中以心臟病

    2024年02月07日
    瀏覽(27)
  • Python機(jī)器學(xué)習(xí)實(shí)驗(yàn) Python 數(shù)據(jù)分析

    Python機(jī)器學(xué)習(xí)實(shí)驗(yàn) Python 數(shù)據(jù)分析

    掌握常見數(shù)據(jù)預(yù)處理方法,熟練運(yùn)用數(shù)據(jù)分析方法,并掌握?Python?中的?Numpy、 Pandas?模塊提供的數(shù)據(jù)分析方法。 1. ? P a nd a s ? 基本數(shù)據(jù)處理 使用 Pandas?模塊,完成以下操作。 (1)創(chuàng)建一個(gè)由?0?到?50?之間的整數(shù)組成的 10?行 5?列的?dataframe。如下: (2)匯總每一列的

    2024年04月09日
    瀏覽(24)
  • 畢業(yè)設(shè)計(jì) 英雄聯(lián)盟數(shù)據(jù)分析與預(yù)測(cè) -大數(shù)據(jù)分析 可視化 機(jī)器學(xué)習(xí)

    畢業(yè)設(shè)計(jì) 英雄聯(lián)盟數(shù)據(jù)分析與預(yù)測(cè) -大數(shù)據(jù)分析 可視化 機(jī)器學(xué)習(xí)

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月05日
    瀏覽(29)
  • python數(shù)據(jù)分析與應(yīng)用:第六章課后實(shí)訓(xùn)--應(yīng)用sklearn分析競(jìng)標(biāo)數(shù)據(jù)(全)

    python數(shù)據(jù)分析與應(yīng)用:第六章課后實(shí)訓(xùn)--應(yīng)用sklearn分析競(jìng)標(biāo)數(shù)據(jù)(全)

    實(shí)驗(yàn)時(shí)間 2023-04-26 (gcc的同學(xué)不要抄襲呀!) 一、實(shí)驗(yàn)?zāi)康?1、掌握skleam轉(zhuǎn)換器的用法。 2、掌握訓(xùn)練集、測(cè)試集劃分的方法。 3、掌握使用sklearm進(jìn)行PCA降維的方法。 4、掌握 sklearn 估計(jì)器的用法。 5、掌握聚類模型的構(gòu)建與評(píng)價(jià)方法。 6、掌握分類模型的構(gòu)建與評(píng)價(jià)方法。

    2024年02月08日
    瀏覽(66)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包