决策树和随机森林是常用的机器学习算法,尤其在分类和回归任务中应用广泛。以下详细介绍它们的用法,并提供相应的代码实例。
决策树
决策树是基于树结构的模型,逐步细化决策,最终形成对目标变量的预测。
用法
- 分类:用于分类任务,目标变量是类别。
- 回归:用于回归任务,目标变量是连续值。
优点
- 易于理解和解释。
- 处理类别特征和数值特征。
- 不需要大量数据预处理。
缺点
- 容易过拟合,尤其在树深度较大时。
- 对噪声数据敏感。
代码实例
以下是使用 scikit-learn
实现决策树分类和回归的代码示例。
from sklearn.datasets import load_iris, load_boston
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from sklearn.metrics import accuracy_score, mean_squared_error
# 分类任务
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(f"Classification Accuracy: {accuracy_score(y_test, y_pred)}")
# 回归任务
boston = load_boston()
X, y = boston.data, boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
reg = DecisionTreeRegressor()
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)
print(f"Regression MSE: {mean_squared_error(y_test, y_pred)}")
随机森林
随机森林是集成学习方法的一种,通过生成多个决策树,并结合它们的预测结果来提高模型的性能和稳定性。
用法
- 分类:用于分类任务,通过多个决策树的投票来确定类别。
- 回归:用于回归任务,通过多个决策树的平均值来预测连续值。
优点
- 减少过拟合的风险。
- 更高的预测准确性。
- 能处理高维数据和缺失值。
缺点
- 计算开销较大,尤其是树的数量较多时。
- 模型复杂性较高,不易解释。
代码实例
以下是使用 scikit-learn
实现随机森林分类和回归的代码示例。
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor
# 分类任务
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(f"Random Forest Classification Accuracy: {accuracy_score(y_test, y_pred)}")
# 回归任务
reg = RandomForestRegressor(n_estimators=100, random_state=42)
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)
print(f"Random Forest Regression MSE: {mean_squared_error(y_test, y_pred)}")
进阶用法和参数调整
决策树参数
criterion
: 分裂的评价标准(gini
或entropy
用于分类;mse
或mae
用于回归)。max_depth
: 树的最大深度,防止过拟合。min_samples_split
: 分裂内部节点所需的最小样本数。min_samples_leaf
: 叶节点的最小样本数。
随机森林参数
n_estimators
: 决策树的数量。max_features
: 每次分裂时考虑的特征数量。bootstrap
: 是否在构建树时使用自助法采样。oob_score
: 是否使用袋外样本评估模型性能。
# 调整决策树参数
clf = DecisionTreeClassifier(max_depth=5, min_samples_split=10, criterion='entropy')
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(f"Tuned Decision Tree Classification Accuracy: {accuracy_score(y_test, y_pred)}")
# 调整随机森林参数
reg = RandomForestRegressor(n_estimators=200, max_features='sqrt', oob_score=True, random_state=42)
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)
print(f"Tuned Random Forest Regression MSE: {mean_squared_error(y_test, y_pred)}")
print(f"Out-of-Bag Score: {reg.oob_score_}")
可视化决策树
可以使用 graphviz
库可视化决策树,以便更好地理解其结构。
from sklearn.tree import export_graphviz
import graphviz
# 导出决策树图像
dot_data = export_graphviz(clf, out_file=None, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True)
graph = graphviz.Source(dot_data)
graph.render("decision_tree")
通过这些实例,展示了决策树和随机森林在分类和回归任务中的应用。可以根据具体问题调整参数,提升模型的性能和稳定性。
标签:机器,pred,clf,train,随机,test,reg,决策树 From: https://blog.csdn.net/a6181816/article/details/139301464