掌握机器学习中基于树的模型:决策树、随机森林和 GBM 的实用指南
作者在Canva上创作的图片
????????有没有想过机器是如何做出复杂决策的?就像一棵树分叉一样,机器学习中基于树的模型也做了类似的事情。它们是人工智能决策过程的支柱。
????????在接下来的几节中,我们将探讨不同类型的基于树的模型。我们从基础开始:决策树。然后,我们扩展到随机森林和梯度提升机器。每个都有其独特的处理数据和决策的方式。
????????但是,这些模型如何应用于实际场景呢?从财务分析到医疗保健预测,基于树的模型具有重大影响。最后,我们还将看到障碍及其解决方案。让我们开始吧!
????????在本节中,我们将探讨机器学习中基于树的模型。我们从决策树开始,了解它们的基础知识和功能。接下来,我们将讨论随机森林及其相对于单个决策树的优势。
????????最后,我们研究了梯度提升机(GBMs),重点关注它们的独特之处以及与随机森林的比较。本概述将向您介绍基于树的关键模型。
????????机器学习中的决策树就像流程图,根据数据做出决策。它们在需要清晰、合乎逻辑的决策的场景中特别有用。
????????对于我们的 Python 示例,我们将使用 scikit-learn 中著名的鸢尾花数据集,其中包括鸢尾花及其物种的测量值。我们将根据这些测量结果预测物种。我们还将对树进行可视化,以了解决策是如何做出的。
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt
# Load the Iris dataset
iris = load_iris()
X = iris.data
y = iris.target
# Split the data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# Create and train the decision tree
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
# Visualize the decision tree
plt.figure(figsize=(20,10))
plot_tree(model, filled=True, feature_names=iris.feature_names, class_names=list(iris.target_names))
plt.show()
让我们看看输出。
你看我们画的决策树。
随机森林是一种集成学习方法,其中多个决策树聚集在一起以做出更准确的预测。
可以把它想象成一个专家团队,每个成员都提供自己的意见,最终决定是根据多数票做出的。此方法通常比单个决策树更准确。
以下是我们如何使用 scikit-learn 库在 Python 中实现随机森林:
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Load Iris dataset
iris = load_iris()
X = iris.data
y = iris.target
# Splitting dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# Creating and training the Random Forest model
random_forest_model = RandomForestClassifier(n_estimators=100)
random_forest_model.fit(X_train, y_train)
# Making predictions
predictions = random_forest_model.predict(X_test)
# Evaluating the model
print("Accuracy:", accuracy_score(y_test, predictions))
在此代码中,我们使用相同的鸢尾花数据集。但是,我们使用的不是单个决策树,而是使用 100 棵树的随机森林 (n_estimators=100)。
训练后,我们预测测试集中鸢尾花的种类。这些预测的准确性通常超过单个决策树的准确性,展示了随机森林在处理数据科学中复杂数据集方面的优势。
这是输出。
现在让我们想象一下。
# Visualize one of the trees in the forest
plt.figure(figsize=(20,10))
tree_index = 0 # Choose the index of the tree you want to visualize
plot_tree(random_forest_model.estimators_[tree_index], filled=True, feature_names=iris.feature_names, class_names=list(iris.target_names))
plt.show()
这是输出。
这是来自随机森林模型的单个决策树,特别是第一个树,假设tree_index设置为 0.,它成功地分离了鸢尾花物种,节点的基尼指数为 0,表示纯分类。
它首先根据花瓣宽度进行分类,然后根据花瓣长度进一步细化,展示了该模型区分物种的能力,尤其是 setosa 和 virginica。
????????梯度提升机 (GBM) 是另一种类型的集成学习技术,但它们的工作方式与随机森林不同。随机森林独立构建树木,而 GBM 则按顺序构建树木。
???????每棵新树都有助于纠正前一棵树所犯的错误。这就像序列中的每棵树都在从其前辈的错误中吸取教训,使整个模型更加准确。
让我们使用 Python 的 scikit-learn 库实现一个 GBM:
from sklearn.datasets import load_iris
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Load Iris dataset
iris = load_iris()
X = iris.data
y = iris.target
# Splitting the dataset
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# Creating and training the GBM model
gbm_model = GradientBoostingClassifier(n_estimators=100)
gbm_model.fit(X_train, y_train)
# Making predictions and evaluating the model
predictions = gbm_model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, predictions))
????????这是输出。
????????在此示例中,我们使用 GradientBoostingClassifier 来预测鸢尾花的种类。该模型构建了 100 棵树 (n_estimators=100),每棵树都从前一棵树的错误中学习。这种改进通常会导致高精度,使 GBM 成为数据科学中解决复杂问题的强大工具。
????????让我们想象一下。
# Plotting the Mean Squared Error
test_score = np.zeros((100,), dtype=np.float64)
for i, y_pred in enumerate(gbm_model.staged_predict(X_test)):
test_score[i] = mean_squared_error(y_test, y_pred)
plt.figure(figsize=(12, 6))
plt.title('Mean Squared Error Over Boosting Iterations')
plt.plot(np.arange(100) + 1, test_score, 'r-', label='Test Set MSE')
plt.legend(loc='upper right')
plt.xlabel('Boosting Iterations')
plt.ylabel('Mean Squared Error')
plt.show()
这是输出。
????????上图显示了梯度提升模型在测试集上预测的均方误差 (MSE),超过 100 次提升迭代。MSE 在初始迭代中急剧下降,表明模型性能有了显著提高。
????????经过大约 20 次迭代后,MSE 趋于稳定,这表明额外的迭代对进一步减少错误没有多大贡献。这可能意味着模型很早就达到了最佳性能,额外的迭代并没有增加价值,这是模型收敛的一个很好的迹象。
现在,让我们讨论决策树、随机森林和 GBM 之间的区别:
这些方法中的每一种都有其优点和缺点,它们之间的选择取决于您的数据和问题的具体要求。
作者在Canva上创作的图片
在机器学习中应用决策树时,可能会出现一些挑战或障碍。了解这些挑战是在数据科学项目中有效使用决策树的关键。
2. 处理连续变量:决策树可能会与连续变量作斗争。他们在不同的点拆分这些变量,但找到最佳拆分点可能很棘手,尤其是当连续变量没有清晰、离散的边界时。
3. 数据不平衡的偏向树:如果训练数据不平衡(即某些类的代表性不足),决策树可能会偏向主导类。这种偏见可能会扭曲预测,以牺牲少数阶级为代价,偏袒多数阶级。
4. 大型数据集的复杂性:虽然决策树可以有效地处理中小型数据集,但对于非常大的数据集,它们的性能可能会降低。训练树的时间显着增加,树结构可能变得过于复杂,使其更难解释。
5. 仅限于线性决策边界:决策树主要创建线性决策边界,在特征与目标变量之间的关系更复杂或非线性的情况下,线性决策边界可能会受到限制。
6. 对数据微小变化的敏感性:决策树对训练数据的微小变化可能非常敏感。微小的变化可能会导致树的结构明显不同。在数据频繁更改的动态环境中,这种缺乏稳定性可能是一个问题。
如果您想了解更多关于机器学习算法的信息,这里有一个很好的资源→您必须了解的机器学习算法。
????????我们研究了机器学习中基于树的模型的世界,揭示了决策树、随机森林和 GBM 的细微差别。 使用 Iris 数据集,我们看到了这些模型的运行情况,从简单的可视化到应对复杂的数据挑战。我们还克服了常见的障碍,提供了实用的解决方案来提高模型性能。
????????实践是数据科学的关键。试验这些模型,调整它们,看看它们在处理不同数据时的表现如何。您遇到和克服的每一个挑战都会进一步提高您的技能。
????????加入我们的平台,进一步学习。参与真实世界的数据项目,为您在数据科学领域的职业生涯做好准备。访问我们,应用您的知识,并继续成长为崭露头角的数据科学家。您的旅程才刚刚开始,还有很多东西等着你去探索和实现!