譯者 | 朱先忠
審校 | 孫淑娟
# #現代機器學習演算法正在改變我們的日常生活。例如,像BERT這樣的大型語言模型正在為谷歌搜尋提供支持,GPT-3正在為許多高級語言應用程式提供支援。
另一方面,今天建立複雜的機器學習演算法比以往任何時候都容易得多。然而,無論機器學習演算法有多複雜,都屬於把它們歸納為以下學習類別之一:
#監督學習
無監督學習
半監督學習
強化學習
其實,決策樹算是最古老的有監督的機器學習演算法之一,可以解決廣泛的現實問題。研究表明,決策樹演算法的最早發明可以追溯到1963年。
#決策樹演算法的目標是預測輸入資料集的結果。樹的資料集共劃分為三種形式:屬性、屬性的值和要預測的種類。與任何監督學習演算法一樣,資料集被劃分為訓練集和測試集兩種類型。其中,訓練集定義了演算法學習並應用於測試集的決策規則。
葉節點:葉節點是表示目標預測的終端節點。這些節點不會進一步分裂。
#########以下是決策樹及其上述元件的視覺化表示,決策樹演算法經過以下步驟以達到所需的預測:########## #####演算法從具有所有屬性值的根節點開始。 ############根節點根據演算法從訓練集學習到的決策規則分成決策節點。 ############基於問題及其答案路徑,透過分支/邊緣傳遞內部決策節點。 ############繼續前面的步驟,直到到達葉節點或使用了所有屬性。 ###############為了在每個節點上選擇最佳屬性,將根據以下兩個屬性選擇度量之一進行拆分:#######在了解了上述基礎知識後,接下來讓我們著手實現一個應用案例。在本文中,我們將使用Scikit學習庫在Python中實作決策樹分類模型。
本教學的資料集是一個鳶尾花資料集。 Scikit開源庫中已經內建了這個資料集,所以不需要開發人員再從外部載入它。此資料集共包括四個鳶尾屬性及對應的屬性值,這些屬性將輸入到模型中,以便預測三種類型的鳶尾花之一。
接下來,將給出決策樹分類器基於python語言實作的逐步程式碼說明。
首先,透過下面的一段程式碼匯入執行決策樹實作所需的函式庫。
import pandas as pd import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier
#以下程式碼展示了使用load_iris函數載入儲存到data_set變數中的sklearn.dataset庫中的鳶尾花數據集。接下來的兩行程式碼將實現列印鳶尾花類型和特徵資訊。
data_set = load_iris() print('Iris plant classes to predict: ', data_set.target_names) print('Four features of iris plant: ', data_set.feature_names)
#下面的程式碼行實現了將花的特性和類型資訊分開來,並將它們儲存在相應的變數中。其中,shape[0]函數負責決定儲存在X_att變數中的屬性數;資料集中的屬性值總數為150。
#提取花的特性和类型信息 X_att = data_set.data y_label = data_set.target print('数据集中总的样本数:', X_att.shape[0])
其實,我們也可以建立一個視覺化表格來展示資料集中的一部分屬性值,方法是將X_att變數中的值加入panda函式庫中的DataFrame函數中即可。
data_view=pd.DataFrame({ 'sepal length':X_att[:,0], 'sepal width':X_att[:,1], 'petal length':X_att[:,2], 'petal width':X_att[:,3], 'species':y_label }) data_view.head()
以下程式碼展示了使用train_test_split函數將資料集拆分為訓練集和測試集兩部分。其中,此函數中的random_state參數用於為函數提供隨機種子,以便在每次執行時為給定資料集提供相同的結果;test_size表示測試集的大小;0.25表示拆分後測試資料佔25%而訓練資料佔75%。
#数据集拆分为训练集和测试集两部分 X_att_train, X_att_test, y_label_train, y_label_test = train_test_split(X_att, y_label, random_state = 42, test_size = 0.25)
下面的程式碼透過使用DecisionTreeClassifier函數來建立一個#分類模型#來實作一棵決策樹,分類標準設定為「entropy」方式。此標準能夠將屬性選擇度量設定為資訊增益(Information gain)。然後,程式碼將模型與我們的屬性和標籤訓練集相符。
#应用决策树分类器 clf_dt = DecisionTreeClassifier(criterion = 'entropy') clf_dt.fit(X_att_train, y_label_train)
下面的代码负责计算并打印决策树分类模型在训练集和测试集上的准确性。为了计算准确度分数,我们使用了predict函数。测试结果是:训练集和测试集的准确率分别为100%和94.7%。
print('Training data accuracy: ', accuracy_score(y_true=y_label_train, y_pred=clf_dt.predict(X_att_train))) print('Test data accuracy: ', accuracy_score(y_true=y_label_test, y_pred=clf_dt.predict(X_att_test)))
当今社会,机器学习决策树在许多行业的决策过程中都得到广泛应用。其中,决策树的最常见应用首先是在金融和营销部门,例如可用于如下一些子领域:
作为本文决策树主题讨论的总结,我们有充分的理由安全地假设:决策树的可解释性仍然很受欢迎。决策树之所以容易理解,是因为它们可以被人类以可视化方式展现并便于解释。因此,它们是解决机器学习问题的直观方法,同时也能够确保结果是可解释的。机器学习中的可解释性是我们过去讨论过的一个小话题,它也与即将到来的人工智能伦理主题存在密切联系。
与任何其他机器学习算法一样,决策树自然也可以加以改进,以避免过度拟合和出现过于偏向于优势预测类别。剪枝和ensembling技术是克服决策树算法缺点方案最常采用的方法。决策树尽管存在这些缺点,但仍然是决策分析算法的基础,并将在机器学习领域始终保持重要位置。
朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。
原文标题:An Introduction to Decision Trees for Machine Learning,作者:Stylianos Kampakis
以上是機器學習決策樹實戰演練的詳細內容。更多資訊請關注PHP中文網其他相關文章!