日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习之决策树的原理及sklearn实现

發布時間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习之决策树的原理及sklearn实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.概述

1.1 決策樹是如何工作的?

決策樹(Decision Tree)是一種非參數的有監督學習方法,它能夠從一系列有特征和標簽的數據中總結出決策規則,并用樹狀圖的結構來呈現這些規則,以解決分類和回歸問題。決策樹算法容易理解,適用各種數據,在解決各種問題時都有良好表現,尤其是以樹模型為核心的各種集成算法,在各個行業和領域都有廣泛的應用。
決策樹算法的本質是一種圖結構,我們只需要問一系列問題就可以對數據進行分類了。比如說,來看看下面這組數據集,這是一系列已知物種以及所屬類別的數據:

目標是,將動物們分為哺乳類和非哺乳類。那根據已經收集到的數據,決策樹算法為我們算出了下面的這棵決策樹:

假如我們現在發現了一種新物種Python,它是冷血動物,體表帶鱗片,并且不是胎生,我們就可以通過這棵決策樹來判斷它的所屬類別。

決策樹算法的核心是要解決兩個問題:
1)如何從數據表中找出最佳節點和最佳分枝?
2)如何讓決策樹停止生長,防止過擬合?

1.2 sklearn中的決策樹

sklearn中決策樹的類都包含在tree這個模塊下,這個模塊一共包括五個類:

主要講解:DecisionTreeClassifier

sklearn的建模過程:

對應的代碼如下所示:

from sklearn import tree #導入需要的模塊 clf = tree.DecisionTreeClassifier() #實例化 clf = clf.fit(X_train,y_train) #用訓練集數據訓練模型 result = clf.score(X_test,y_test)

2.DecisionTreeClassifier

class sklearn.tree.DecisionTreeClassifier (criterion=’gini’, splitter=’best’, max_depth=None,min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,random_state=None, max_leaf_nodes=None,min_impurity_decrease=0.0, min_impurity_split=None,class_weight=None, presort=False )

重要參數:criterion

為了要將表格轉化為一棵樹,決策樹需要找出最佳節點和最佳的分枝方法,對分類樹來說,衡量這個“最佳”的指標叫做“不純度”。通常來說,不純度越低,決策樹對訓練集的擬合越好。現在使用的決策樹算法在分枝方法上的核心大多是圍繞在對某個不純度相關指標的最優化上。
不純度基于節點來計算,樹中的每個節點都會有一個不純度,并且子節點的不純度一定是低于父節點的,也就是說,在同一棵決策樹上,葉子節點的不純度一定是最低的。
Criterion這個參數正是用來決定不純度的計算方法的。sklearn提供了兩種選擇:

  • 輸入“entropy”,使用信息熵(Entropy)
  • 輸入”gini“,使用基尼系數(Gini Impurity)

    利用sklearn實現決策樹:
    1.導入所需要的算法庫和模塊
  • from sklearn import tree from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split

    2.探索數據

    #載入數據 wine = load_wine() x = pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1) wine.feature_names ['alcohol','malic_acid','ash','alcalinity_of_ash','magnesium','total_phenols','flavanoids','nonflavanoid_phenols','proanthocyanins','color_intensity','hue','od280/od315_of_diluted_wines','proline']

    3.劃分訓練集和測試集

    #. 分訓練集和測試集 x_train,x_test,y_train,y_test = train_test_split(wine.data,wine.target,test_size=0.3) #建立模型 clf = tree.DecisionTreeClassifier(criterion="entropy") clf = clf.fit(x_train,y_train) score = clf.score(x_test,y_test)

    經過測試,模型的準確率如下所示:

    0.9629629629629629

    4.查看重要的特征以及對應的權重

    clf.feature_importances_ [*zip(wine.feature_names,clf.feature_importances_)] [('alcohol', 0.018448661796409117),('malic_acid', 0.0),('ash', 0.0),('alcalinity_of_ash', 0.0),('magnesium', 0.0),('total_phenols', 0.0),('flavanoids', 0.43259590886482413),('nonflavanoid_phenols', 0.0),('proanthocyanins', 0.0),('color_intensity', 0.20507049195022564),('hue', 0.016757599408700523),('od280/od315_of_diluted_wines', 0.0),('proline', 0.32712733797984056)]

    5.設置好criterion=“entropy”random_state=30splitter=“random”,改變max_depth,觀察準確率的變化

    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(x_train, y_train)score = clf.score(x_test, y_test)test.append(score) plt.plot(range(1,11),test,color="red",label="max_depth") plt.legend() plt.show()


    關于決策樹剪枝的相關知識,參考如下文檔:
    鏈接:https://pan.baidu.com/s/1kL8S5r55ozqyZgdV6U6fKg
    提取碼:1b3r

    努力加油a啊

    總結

    以上是生活随笔為你收集整理的机器学习之决策树的原理及sklearn实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。