選單
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Python 教程

Python 主頁 Python 簡介 Python 入門 Python 語法 Python 註釋 Python 變數 Python 資料型別 Python 數字 Python 型別轉換 Python 字串 Python 布林值 Python 運算子 Python 列表 Python 元組 Python 集合 Python 字典 Python If...Else Python While 迴圈 Python For 迴圈 Python 函式 Python Lambda Python 陣列 Python 類/物件 Python 繼承 Python 迭代器 Python 多型 Python 作用域 Python 模組 Python 日期 Python 數學 Python JSON Python 正則表示式 Python PIP Python Try...Except Python 使用者輸入 Python 字串格式化

檔案處理

Python 檔案處理 Python 讀取檔案 Python 寫入/建立檔案 Python 刪除檔案

Python 模組

NumPy 教程 Pandas 教程 SciPy 教程 Django 教程

Python Matplotlib

Matplotlib 簡介 Matplotlib 入門 Matplotlib Pyplot Matplotlib 繪圖 Matplotlib 標記 Matplotlib 線條 Matplotlib 標籤 Matplotlib 網格 Matplotlib 子圖 Matplotlib 散點圖 Matplotlib 條形圖 Matplotlib 直方圖 Matplotlib 餅圖

機器學習

入門 均值、中位數、眾數 標準差 百分位數 資料分佈 正態資料分佈 散點圖 線性迴歸 多項式迴歸 多元迴歸 縮放 訓練/測試 決策樹 混淆矩陣 層次聚類 邏輯迴歸 網格搜尋 分類資料 K-means Bootstrap Aggregation (裝袋法) 交叉驗證 AUC - ROC 曲線 K-近鄰

Python MySQL

MySQL 入門 MySQL 建立資料庫 MySQL 建立表 MySQL 插入 MySQL 選擇 MySQL Where MySQL Order By MySQL 刪除 MySQL 刪除表 MySQL 更新 MySQL Limit MySQL Join

Python MongoDB

MongoDB 入門 MongoDB 建立資料庫 MongoDB 集合 MongoDB 插入 MongoDB Find MongoDB Query MongoDB Sort MongoDB 刪除 MongoDB 刪除集合 MongoDB 更新 MongoDB Limit

Python 參考

Python 概述 Python 內建函式 Python 字串方法 Python 列表方法 Python 字典方法 Python 元組方法 Python 集合方法 Python 檔案方法 Python 關鍵字 Python 異常 Python 詞彙表

模組參考

Random 模組 Requests 模組 Statistics 模組 Math 模組 cMath 模組

Python 如何操作

刪除列表重複項 反轉字串 兩個數字相加

Python 示例

Python 示例 Python 編譯器 Python 練習 Python 測驗 Python 伺服器 Python 面試問答 Python 訓練營 Python 證書

機器學習 - 決策樹



決策樹

在本章中,我們將向您展示如何製作一個“決策樹”。決策樹是一個流程圖,可以幫助您根據過去的經驗做出決策。

在示例中,一個人將嘗試決定他/她是否應該去看喜劇表演。

幸運的是,我們示例中的這個人記錄了每次有喜劇表演時的情況,並記錄了一些關於喜劇演員的資訊,還記錄了他們是否去看了。

Age 經驗 排名 國籍 Go
36 10 9 UK 不推薦
42 12 4 USA 不推薦
23 4 6 N 不推薦
52 4 4 USA 不推薦
43 21 8 USA 推薦
44 14 5 UK 不推薦
66 3 7 N 推薦
35 14 9 UK 推薦
52 13 7 N 推薦
35 5 9 N 推薦
24 3 5 USA 不推薦
18 3 7 UK 推薦
45 9 9 UK 推薦

現在,基於這個資料集,Python 可以建立一個決策樹,用於決定是否有新的表演值得參加。



它是如何工作的?

首先,使用 pandas 讀取資料集

示例

讀取並列印資料集

import pandas

df = pandas.read_csv("data.csv")

print(df)

執行示例 »

要製作決策樹,所有資料都必須是數值的。

我們需要將非數值列 'Nationality' 和 'Go' 轉換為數值。

Pandas 有一個 map() 方法,它接受一個字典,其中包含有關如何轉換值的資訊。

{'UK': 0, 'USA': 1, 'N': 2}

表示將值 'UK' 轉換為 0,'USA' 轉換為 1,'N' 轉換為 2。

示例

將字串值更改為數值

d = {'UK': 0, 'USA': 1, 'N': 2}
df['Nationality'] = df['Nationality'].map(d)
d = {'YES': 1, 'NO': 0}
df['Go'] = df['Go'].map(d)

print(df)

執行示例 »

然後,我們必須將特徵列與目標列分開。

特徵列是我們嘗試從中預測的列,目標列是我們嘗試預測其值的列。

示例

X 是特徵列,y 是目標列

features = ['Age', 'Experience', 'Rank', 'Nationality']

X = df[features]
y = df['Go']

print(X)
print(y)

執行示例 »

現在我們可以建立實際的決策樹,並用我們的詳細資訊對其進行擬合。首先匯入我們需要的模組

示例

建立並顯示決策樹

import pandas
from sklearn import tree
來自 sklearn.tree 匯入 DecisionTreeClassifier
import matplotlib.pyplot as plt

df = pandas.read_csv("data.csv")

d = {'UK': 0, 'USA': 1, 'N': 2}
df['Nationality'] = df['Nationality'].map(d)
d = {'YES': 1, 'NO': 0}
df['Go'] = df['Go'].map(d)

features = ['Age', 'Experience', 'Rank', 'Nationality']

X = df[features]
y = df['Go']

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)

tree.plot_tree(dtree, feature_names=features)

執行示例 »


結果解釋

決策樹使用您先前的決策來計算您想去看喜劇演員表演的可能性。

讓我們來解讀決策樹的各個方面

排名

Rank <= 6.5 意味著所有排名為 6.5 或更低的喜劇演員將沿著 True 箭頭(左側)前進,其餘的將沿著 False 箭頭(右側)前進。

gini = 0.497 指的是劃分的質量,並且始終是一個介於 0.0 和 0.5 之間的數字,其中 0.0 意味著所有樣本都得到了相同的結果,而 0.5 意味著劃分恰好在中間。

samples = 13 意味著在決策的這一點上還有 13 位喜劇演員,因為這是第一步,所以就是所有演員。

value = [6, 7] 意味著在這 13 位喜劇演員中,6 位會得到“否”,7 位會得到“是”。

基尼指數

劃分樣本有很多方法,在本教程中我們使用基尼指數法。

基尼指數法使用此公式

Gini = 1 - (x/n)2 - (y/n)2

其中 x 是正面答案(“是”)的數量,n 是樣本總數,y 是負面答案(“否”)的數量,這使我們得到以下計算

1 - (7 / 13)2 - (6 / 13)2 = 0.497

下一步包含兩個框,一個框用於排名為 6.5 或更低的喜劇演員,另一個框用於其餘的。

True - 5 位喜劇演員在此結束

gini = 0.0 意味著所有樣本都得到了相同的結果。

samples = 5 意味著在此分支中還有 5 位喜劇演員(排名為 6.5 或更低的 5 位喜劇演員)。

value = [5, 0] 意味著 5 位得到“否”,0 位得到“是”。

False - 8 位喜劇演員繼續

國籍

Nationality <= 0.5 意味著國籍值為 0.5 或更低的喜劇演員將沿著左側箭頭前進(這意味著所有來自英國的喜劇演員),其餘的將沿著右側箭頭前進。

gini = 0.219 意味著大約 22% 的樣本會走向一個方向。

samples = 8 意味著在此分支中還有 8 位喜劇演員(排名高於 6.5 的 8 位喜劇演員)。

value = [1, 7] 意味著在這 8 位喜劇演員中,1 位會得到“否”,7 位會得到“是”。




True - 4 位喜劇演員繼續

Age

Age <= 35.5 意味著年齡在 35.5 歲或以下的喜劇演員將沿著左側箭頭前進,其餘的將沿著右側箭頭前進。

gini = 0.375 意味著大約 37.5% 的樣本會走向一個方向。

samples = 4 意味著在此分支中還有 4 位喜劇演員(4 位來自英國的喜劇演員)。

value = [1, 3] 意味著在這 4 位喜劇演員中,1 位會得到“否”,3 位會得到“是”。

False - 4 位喜劇演員在此結束

gini = 0.0 意味著所有樣本都得到了相同的結果。

samples = 4 意味著在此分支中還有 4 位喜劇演員(4 位不是來自英國的喜劇演員)。

value = [0, 4] 意味著在這 4 位喜劇演員中,0 位會得到“否”,4 位會得到“是”。




True - 2 位喜劇演員在此結束

gini = 0.0 意味著所有樣本都得到了相同的結果。

samples = 2 意味著在此分支中還有 2 位喜劇演員(年齡在 35.5 歲或以下的 2 位喜劇演員)。

value = [0, 2] 意味著在這 2 位喜劇演員中,0 位會得到“否”,2 位會得到“是”。

False - 2 位喜劇演員繼續

經驗

Experience <= 9.5 意味著擁有 9.5 年或更少經驗的喜劇演員將沿著左側箭頭前進,其餘的將沿著右側箭頭前進。

gini = 0.5 意味著 50% 的樣本會走向一個方向。

samples = 2 意味著在此分支中還有 2 位喜劇演員(年齡大於 35.5 歲的 2 位喜劇演員)。

value = [1, 1] 意味著在這 2 位喜劇演員中,1 位會得到“否”,1 位會得到“是”。




True - 1 位喜劇演員在此結束

gini = 0.0 意味著所有樣本都得到了相同的結果。

samples = 1 意味著在此分支中還有 1 位喜劇演員(擁有 9.5 年或更少經驗的 1 位喜劇演員)。

value = [0, 1] 意味著 0 位會得到“否”,1 位會得到“是”。

False - 1 位喜劇演員在此結束

gini = 0.0 意味著所有樣本都得到了相同的結果。

samples = 1 意味著在此分支中還有 1 位喜劇演員(擁有超過 9.5 年經驗的 1 位喜劇演員)。

value = [1, 0] 意味著 1 位會得到“否”,0 位會得到“是”。


預測值

我們可以使用決策樹來預測新值。

例如:我應該去看一位 40 歲、美國籍、有 10 年經驗、喜劇排名為 7 的喜劇演員的表演嗎?

示例

使用 predict() 方法預測新值

print(dtree.predict([[40, 10, 7, 1]]))

執行示例 »

示例

如果喜劇排名是 6,答案會是什麼?

print(dtree.predict([[40, 10, 6, 1]]))

執行示例 »


不同結果

您會發現,如果您多次執行決策樹,即使輸入相同的資料,它也會給出不同的結果。

這是因為決策樹不能給出 100% 確定的答案。它是基於結果的機率,答案會有所不同。


×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援