成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Python構(gòu)建和可視化決策樹(shù)

開(kāi)發(fā) 后端 數(shù)據(jù)可視化
決策樹(shù)的目標(biāo)是將數(shù)據(jù)分成多個(gè)組,這樣一個(gè)組中的每個(gè)元素都屬于同一個(gè)類(lèi)別。決策樹(shù)也可以用來(lái)近似連續(xù)的目標(biāo)變量。在這種情況下,樹(shù)將進(jìn)行拆分,使每個(gè)組的均方誤差最小。

決策樹(shù)

決策樹(shù)是當(dāng)今最強(qiáng)大的監(jiān)督學(xué)習(xí)方法的組成部分。決策樹(shù)基本上是一個(gè)二叉樹(shù)的流程圖,其中每個(gè)節(jié)點(diǎn)根據(jù)某個(gè)特征變量將一組觀測(cè)值拆分。

決策樹(shù)的目標(biāo)是將數(shù)據(jù)分成多個(gè)組,這樣一個(gè)組中的每個(gè)元素都屬于同一個(gè)類(lèi)別。決策樹(shù)也可以用來(lái)近似連續(xù)的目標(biāo)變量。在這種情況下,樹(shù)將進(jìn)行拆分,使每個(gè)組的均方誤差最小。

決策樹(shù)的一個(gè)重要特性是它們很容易被解釋。你根本不需要熟悉機(jī)器學(xué)習(xí)技術(shù)就可以理解決策樹(shù)在做什么。決策樹(shù)圖很容易解釋。

利弊

決策樹(shù)方法的優(yōu)點(diǎn)是:

  • 決策樹(shù)能夠生成可理解的規(guī)則。
  • 決策樹(shù)在不需要大量計(jì)算的情況下進(jìn)行分類(lèi)。
  • 決策樹(shù)能夠處理連續(xù)變量和分類(lèi)變量。
  • 決策樹(shù)提供了一個(gè)明確的指示,哪些字段是最重要的。

決策樹(shù)方法的缺點(diǎn)是:

  • 決策樹(shù)不太適合于目標(biāo)是預(yù)測(cè)連續(xù)屬性值的估計(jì)任務(wù)。
  • 決策樹(shù)在類(lèi)多、訓(xùn)練樣本少的分類(lèi)問(wèn)題中容易出錯(cuò)。
  • 決策樹(shù)的訓(xùn)練在計(jì)算上可能很昂貴。生成決策樹(shù)的過(guò)程在計(jì)算上非常昂貴。在每個(gè)節(jié)點(diǎn)上,每個(gè)候選拆分字段都必須進(jìn)行排序,才能找到其最佳拆分。在某些算法中,使用字段組合,必須搜索最佳組合權(quán)重。剪枝算法也可能是昂貴的,因?yàn)樵S多候選子樹(shù)必須形成和比較。

Python決策樹(shù)

Python是一種通用編程語(yǔ)言,它為數(shù)據(jù)科學(xué)家提供了強(qiáng)大的機(jī)器學(xué)習(xí)包和工具。在本文中,我們將使用python最著名的機(jī)器學(xué)習(xí)包scikit-learn來(lái)構(gòu)建決策樹(shù)模型。我們將使用scikit learn提供的“DecisionTreeClassifier”算法創(chuàng)建模型,然后使用“plot_tree”函數(shù)可視化模型。

步驟1:導(dǎo)入包

我們構(gòu)建模型的主要軟件包是pandas、scikit learn和NumPy。按照代碼在python中導(dǎo)入所需的包。 

  1. import pandas as pd # 數(shù)據(jù)處理 
  2. import numpy as np # 使用數(shù)組 
  3. import matplotlib.pyplot as plt # 可視化 
  4. from matplotlib import rcParams # 圖大小 
  5. from termcolor import colored as cl # 文本自定義 
  6.  
  7. from sklearn.tree import DecisionTreeClassifier as dtc # 樹(shù)算法 
  8. from sklearn.model_selection import train_test_split # 拆分?jǐn)?shù)據(jù) 
  9. from sklearn.metrics import accuracy_score # 模型準(zhǔn)確度 
  10. from sklearn.tree import plot_tree # 樹(shù)圖 
  11.  
  12. rcParams['figure.figsize'] = (25, 20) 

在導(dǎo)入構(gòu)建我們的模型所需的所有包之后,是時(shí)候?qū)霐?shù)據(jù)并對(duì)其進(jìn)行一些EDA了。

步驟2:導(dǎo)入數(shù)據(jù)和EDA

在這一步中,我們將使用python中提供的“Pandas”包來(lái)導(dǎo)入并在其上進(jìn)行一些EDA。我們將建立我們的決策樹(shù)模型,數(shù)據(jù)集是一個(gè)藥物數(shù)據(jù)集,它是基于特定的標(biāo)準(zhǔn)給病人開(kāi)的處方。讓我們用python導(dǎo)入數(shù)據(jù)!

Python實(shí)現(xiàn): 

  1. df = pd.read_csv('drug.csv'
  2. df.drop('Unnamed: 0', axis = 1, inplace = True
  3.  
  4. print(cl(df.head(), attrs = ['bold'])) 

輸出: 

  1.    Age Sex      BP Cholesterol  Na_to_K   Drug 
  2. 0   23   F    HIGH        HIGH   25.355  drugY 
  3. 1   47   M     LOW        HIGH   13.093  drugC 
  4. 2   47   M     LOW        HIGH   10.114  drugC 
  5. 3   28   F  NORMAL        HIGH    7.798  drugX 
  6. 4   61   F     LOW        HIGH   18.043  drugY 

現(xiàn)在我們對(duì)數(shù)據(jù)集有了一個(gè)清晰的概念。導(dǎo)入數(shù)據(jù)后,讓我們使用“info”函數(shù)獲取有關(guān)數(shù)據(jù)的一些基本信息。此函數(shù)提供的信息包括條目數(shù)、索引號(hào)、列名、非空值計(jì)數(shù)、屬性類(lèi)型等。

Python實(shí)現(xiàn):

  1. df.info() 

輸出: 

  1. <class 'pandas.core.frame.DataFrame'
  2. RangeIndex: 200 entries, 0 to 199 
  3. Data columns (total 6 columns): 
  4.  #   Column       Non-Null Count  Dtype   
  5. ---  ------       --------------  -----   
  6.  0   Age          200 non-null    int64   
  7.  1   Sex          200 non-null    object  
  8.  2   BP           200 non-null    object  
  9.  3   Cholesterol  200 non-null    object  
  10.  4   Na_to_K      200 non-null    float64 
  11.  5   Drug         200 non-null    object  
  12. dtypes: float64(1), int64(1), object(4) 
  13. memory usage: 9.5+ KB 

步驟3:數(shù)據(jù)處理

我們可以看到像Sex, BP和Cholesterol這樣的屬性在本質(zhì)上是分類(lèi)的和對(duì)象類(lèi)型的。問(wèn)題是,scikit-learn中的決策樹(shù)算法本質(zhì)上不支持X變量(特征)是“對(duì)象”類(lèi)型。因此,有必要將這些“object”值轉(zhuǎn)換為“binary”值。讓我們用python來(lái)實(shí)現(xiàn)

Python實(shí)現(xiàn): 

  1. for i in df.Sex.values
  2.     if i  == 'M'
  3.         df.Sex.replace(i, 0, inplace = True
  4.     else
  5.         df.Sex.replace(i, 1, inplace = True
  6.  
  7. for i in df.BP.values
  8.     if i == 'LOW'
  9.         df.BP.replace(i, 0, inplace = True
  10.     elif i == 'NORMAL'
  11.         df.BP.replace(i, 1, inplace = True
  12.     elif i == 'HIGH'
  13.         df.BP.replace(i, 2, inplace = True
  14.  
  15. for i in df.Cholesterol.values
  16.     if i == 'LOW'
  17.         df.Cholesterol.replace(i, 0, inplace = True
  18.     else
  19.         df.Cholesterol.replace(i, 1, inplace = True
  20.  
  21. print(cl(df, attrs = ['bold'])) 

輸出: 

  1.      Age  Sex  BP  Cholesterol  Na_to_K   Drug 
  2. 0     23    1   2            1   25.355  drugY 
  3. 1     47    1   0            1   13.093  drugC 
  4. 2     47    1   0            1   10.114  drugC 
  5. 3     28    1   1            1    7.798  drugX 
  6. 4     61    1   0            1   18.043  drugY 
  7. ..   ...  ...  ..          ...      ...    ... 
  8. 195   56    1   0            1   11.567  drugC 
  9. 196   16    1   0            1   12.006  drugC 
  10. 197   52    1   1            1    9.894  drugX 
  11. 198   23    1   1            1   14.020  drugX 
  12. 199   40    1   0            1   11.349  drugX 
  13.  
  14. [200 rows x 6 columns] 

我們可以觀察到所有的“object”值都被處理成“binary”值來(lái)表示分類(lèi)數(shù)據(jù)。例如,在膽固醇屬性中,顯示“低”的值被處理為0,“高”則被處理為1。現(xiàn)在我們準(zhǔn)備好從數(shù)據(jù)中創(chuàng)建因變量和自變量。

步驟4:拆分?jǐn)?shù)據(jù)

在將我們的數(shù)據(jù)處理為正確的結(jié)構(gòu)之后,我們現(xiàn)在設(shè)置“X”變量(自變量),“Y”變量(因變量)。讓我們用python來(lái)實(shí)現(xiàn)

Python實(shí)現(xiàn): 

  1. X_var = df[['Sex''BP''Age''Cholesterol''Na_to_K']].values # 自變量 
  2. y_var = df['Drug'].values # 因變量 
  3.  
  4. print(cl('X variable samples : {}'.format(X_var[:5]), attrs = ['bold'])) 
  5. print(cl('Y variable samples : {}'.format(y_var[:5]), attrs = ['bold'])) 

輸出: 

  1. X variable samples : [[ 1.     2.    23.     1.    25.355] 
  2.  [ 1.     0.    47.     1.    13.093] 
  3.  [ 1.     0.    47.     1.    10.114] 
  4.  [ 1.     1.    28.     1.     7.798] 
  5.  [ 1.     0.    61.     1.    18.043]] 
  6. Y variable samples : ['drugY' 'drugC' 'drugC' 'drugX' 'drugY'

我們現(xiàn)在可以使用scikit learn中的“train_test_split”算法將數(shù)據(jù)分成訓(xùn)練集和測(cè)試集,其中包含我們定義的X和Y變量。按照代碼在python中拆分?jǐn)?shù)據(jù)。

Python實(shí)現(xiàn): 

  1. X_train, X_test, y_train, y_test = train_test_split(X_var, y_var, test_size = 0.2, random_state = 0) 
  2.  
  3. print(cl('X_train shape : {}'.format(X_train.shape), attrs = ['bold'], color = 'black')) 
  4. print(cl('X_test shape : {}'.format(X_test.shape), attrs = ['bold'], color = 'black')) 
  5. print(cl('y_train shape : {}'.format(y_train.shape), attrs = ['bold'], color = 'black')) 
  6. print(cl('y_test shape : {}'.format(y_test.shape), attrs = ['bold'], color = 'black')) 

輸出: 

  1. X_train shape : (160, 5) 
  2. X_test shape : (40, 5) 
  3. y_train shape : (160,) 
  4. y_test shape : (40,) 

現(xiàn)在我們有了構(gòu)建決策樹(shù)模型的所有組件。所以,讓我們繼續(xù)用python構(gòu)建我們的模型。

步驟5:建立模型和預(yù)測(cè)

在scikit學(xué)習(xí)包提供的“DecisionTreeClassifier”算法的幫助下,構(gòu)建決策樹(shù)是可行的。之后,我們可以使用我們訓(xùn)練過(guò)的模型來(lái)預(yù)測(cè)我們的數(shù)據(jù)。最后,我們的預(yù)測(cè)結(jié)果的精度可以用“準(zhǔn)確度”評(píng)估指標(biāo)來(lái)計(jì)算。讓我們用python來(lái)完成這個(gè)過(guò)程!

Python實(shí)現(xiàn): 

  1. model = dtc(criterion = 'entropy', max_depth = 4) 
  2. model.fit(X_train, y_train) 
  3.  
  4. pred_model = model.predict(X_test) 
  5.  
  6. print(cl('Accuracy of the model is {:.0%}'.format(accuracy_score(y_test, pred_model)), attrs = ['bold'])) 

輸出:

  1. Accuracy of the model is 88% 

在代碼的第一步中,我們定義了一個(gè)名為“model”變量的變量,我們?cè)谄渲写鎯?chǔ)DecisionTreeClassifier模型。接下來(lái),我們將使用我們的訓(xùn)練集對(duì)模型進(jìn)行擬合和訓(xùn)練。之后,我們定義了一個(gè)變量,稱(chēng)為“pred_model”變量,其中我們將模型預(yù)測(cè)的所有值存儲(chǔ)在數(shù)據(jù)上。最后,我們計(jì)算了我們的預(yù)測(cè)值與實(shí)際值的精度,其準(zhǔn)確率為88%。

步驟6:可視化模型

現(xiàn)在我們有了決策樹(shù)模型,讓我們利用python中scikit learn包提供的“plot_tree”函數(shù)來(lái)可視化它。按照代碼從python中的決策樹(shù)模型生成一個(gè)漂亮的樹(shù)圖。

Python實(shí)現(xiàn): 

  1. feature_names = df.columns[:5] 
  2. target_names = df['Drug'].unique().tolist() 
  3.  
  4. plot_tree(model,  
  5.           feature_names = feature_names,  
  6.           class_names = target_names,  
  7.           filled = True,  
  8.           rounded = True
  9.  
  10. plt.savefig('tree_visualization.png'

輸出: 

用Python構(gòu)建和可視化決策樹(shù)

結(jié)論

有很多技術(shù)和其他算法用于優(yōu)化決策樹(shù)和避免過(guò)擬合,比如剪枝。雖然決策樹(shù)通常是不穩(wěn)定的,這意味著數(shù)據(jù)的微小變化會(huì)導(dǎo)致最優(yōu)樹(shù)結(jié)構(gòu)的巨大變化,但其簡(jiǎn)單性使其成為廣泛應(yīng)用的有力候選。在神經(jīng)網(wǎng)絡(luò)流行之前,決策樹(shù)是機(jī)器學(xué)習(xí)中最先進(jìn)的算法。其他一些集成模型,比如隨機(jī)森林模型,比普通決策樹(shù)模型更強(qiáng)大。

決策樹(shù)由于其簡(jiǎn)單性和可解釋性而非常強(qiáng)大。決策樹(shù)和隨機(jī)森林在用戶(hù)注冊(cè)建模、信用評(píng)分、故障預(yù)測(cè)、醫(yī)療診斷等領(lǐng)域有著廣泛的應(yīng)用。我為本文提供了完整的代碼。

完整代碼: 

  1. import pandas as pd # 數(shù)據(jù)處理 
  2. import numpy as np # 使用數(shù)組 
  3. import matplotlib.pyplot as plt # 可視化 
  4. from matplotlib import rcParams # 圖大小 
  5. from termcolor import colored as cl # 文本自定義 
  6.  
  7. from sklearn.tree import DecisionTreeClassifier as dtc # 樹(shù)算法 
  8. from sklearn.model_selection import train_test_split # 拆分?jǐn)?shù)據(jù) 
  9. from sklearn.metrics import accuracy_score # 模型準(zhǔn)確度 
  10. from sklearn.tree import plot_tree # 樹(shù)圖 
  11.  
  12. rcParams['figure.figsize'] = (25, 20) 
  13.  
  14. df = pd.read_csv('drug.csv'
  15. df.drop('Unnamed: 0', axis = 1, inplace = True
  16.  
  17. print(cl(df.head(), attrs = ['bold'])) 
  18.  
  19. df.info() 
  20.  
  21. for i in df.Sex.values
  22.     if i  == 'M'
  23.         df.Sex.replace(i, 0, inplace = True
  24.     else
  25.         df.Sex.replace(i, 1, inplace = True
  26.  
  27. for i in df.BP.values
  28.     if i == 'LOW'
  29.         df.BP.replace(i, 0, inplace = True
  30.     elif i == 'NORMAL'
  31.         df.BP.replace(i, 1, inplace = True
  32.     elif i == 'HIGH'
  33.         df.BP.replace(i, 2, inplace = True
  34.  
  35. for i in df.Cholesterol.values
  36.     if i == 'LOW'
  37.         df.Cholesterol.replace(i, 0, inplace = True
  38.     else
  39.         df.Cholesterol.replace(i, 1, inplace = True
  40.  
  41. print(cl(df, attrs = ['bold'])) 
  42.  
  43. X_var = df[['Sex''BP''Age''Cholesterol''Na_to_K']].values # 自變量 
  44. y_var = df['Drug'].values # 因變量 
  45.  
  46. print(cl('X variable samples : {}'.format(X_var[:5]), attrs = ['bold'])) 
  47. print(cl('Y variable samples : {}'.format(y_var[:5]), attrs = ['bold'])) 
  48.  
  49. X_train, X_test, y_train, y_test = train_test_split(X_var, y_var, test_size = 0.2, random_state = 0) 
  50.  
  51. print(cl('X_train shape : {}'.format(X_train.shape), attrs = ['bold'], color = 'red')) 
  52. print(cl('X_test shape : {}'.format(X_test.shape), attrs = ['bold'], color = 'red')) 
  53. print(cl('y_train shape : {}'.format(y_train.shape), attrs = ['bold'], color = 'green')) 
  54. print(cl('y_test shape : {}'.format(y_test.shape), attrs = ['bold'], color = 'green')) 
  55.  
  56. model = dtc(criterion = 'entropy', max_depth = 4) 
  57. model.fit(X_train, y_train) 
  58.  
  59. pred_model = model.predict(X_test) 
  60.  
  61. print(cl('Accuracy of the model is {:.0%}'.format(accuracy_score(y_test, pred_model)), attrs = ['bold'])) 
  62.  
  63. feature_names = df.columns[:5] 
  64. target_names = df['Drug'].unique().tolist() 
  65.  
  66. plot_tree(model,  
  67.           feature_names = feature_names,  
  68.           class_names = target_names,  
  69.           filled = True,  
  70.           rounded = True
  71.  
  72. plt.savefig('tree_visualization.png'

 

 

責(zé)任編輯:未麗燕 來(lái)源: 今日頭條
相關(guān)推薦

2017-09-11 13:33:44

大數(shù)據(jù)數(shù)據(jù)可視化決策樹(shù)

2023-08-11 17:30:54

決策樹(shù)機(jī)器學(xué)習(xí)算法

2017-12-12 12:24:39

Python決策樹(shù)

2017-02-23 08:45:36

Python決策樹(shù)數(shù)據(jù)集

2022-09-21 23:29:15

Python點(diǎn)云數(shù)據(jù)

2025-05-16 10:00:00

Python數(shù)據(jù)可視化

2022-11-11 08:00:00

決策樹(shù)機(jī)器學(xué)習(xí)監(jiān)督學(xué)習(xí)

2017-11-21 13:00:20

機(jī)器學(xué)習(xí)決策樹(shù)可視化

2012-11-28 09:55:35

2016-09-30 16:12:47

GBDT算法決策樹(shù)

2022-08-26 09:15:58

Python可視化plotly

2019-05-15 09:00:00

決策樹(shù)機(jī)器學(xué)習(xí)人工智能

2018-02-02 15:50:07

決策樹(shù)Apache Spar數(shù)據(jù)

2022-12-21 14:39:35

機(jī)器學(xué)習(xí)案發(fā)決策樹(shù)

2020-03-11 14:39:26

數(shù)據(jù)可視化地圖可視化地理信息

2023-12-27 10:47:45

Flask數(shù)據(jù)可視化開(kāi)發(fā)

2023-03-06 16:07:19

梯度提升算法機(jī)器學(xué)習(xí)

2022-10-19 11:33:07

決策樹(shù)策略搜索

2022-08-23 12:32:37

Python可視化圖表

2012-08-06 09:04:01

決策樹(shù)建模
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲欧美国产毛片在线 | 国产一级在线 | 国产精品自产拍 | 欧美成人一区二区三区 | 欧美成人a | 国产精品污www一区二区三区 | 超碰成人免费 | 欧美三级成人理伦 | 99久久电影 | 一级毛片视频在线观看 | 久久丁香| 美女天天操 | 久久er99热精品一区二区 | 国产又色又爽又黄又免费 | 视频一区 国产精品 | 欧美久久不卡 | 国产一伦一伦一伦 | 在线视频一区二区三区 | 日韩精品激情 | 亚洲少妇综合网 | 欧美激情综合色综合啪啪五月 | 日韩一区二区三区在线观看 | 国产精品美女久久久久久久网站 | 久久久国产一区二区三区 | 日韩在线国产精品 | 高清国产一区二区 | 日韩欧美久久 | 久久一区二区三区免费 | 午夜视频精品 | 日韩一区二区av | 欧美福利视频一区 | 欧美一区二区三区,视频 | 国产精品久久久久久久久久免费看 | 国产精品久久久久久久久久久久久久 | xxxxx免费视频 | 毛片一级片| 黄色av一区 | 欧美成人一级 | 99久久精品免费看国产小宝寻花 | 欧美日韩午夜精品 | 在线一区二区三区 |