目录
人工智能领域在当今可谓炙手可热,在人工智能与机器学习领域,随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树来进行分类或回归预测。随机森林的核心思想是“集思广益”,即通过组合多个模型来提高预测的准确性和鲁棒性。以最终达到以弱博强的目的。
算法引入:
俗话说“三个臭皮匠顶个诸葛亮”,有一天班里要进行考试,班里有一名学霸,科目有语数外三门学科,学霸呢,每一科语数外都能考到95+,班里还有三名偏科学渣A、B、C,学生A呢语文能考100分,学生B呢,数学能考100分,学生C呢,英语能考100分,但是学生A、B、C的其他两门学科都不及格,学霸说:你们三个垃圾,你们都是战五渣,学生A、B、C很不服,想挫一挫学霸的锐气,但是他们每一个人成绩都没有学霸的成绩高,于是学生A、B、C想了一个办法,如果让学生A去做语文卷子、学生B去做数学卷子、学生C去做英语卷子,这样可以直接碾压学霸,毫无悬念的A、B、C以总成绩300分拿下学霸,这种以弱博强的算法思想就是随机森林算法。
算法介绍:
随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树来进行分类或回归预测。随机森林的核心思想是“集思广益”,即通过组合多个模型来提高预测的准确性和鲁棒性。从算法的名字来看,随机就是随机选取,这个具有不确定性,可能是在一个群体里面选一部分,森林则是由很多树构成,树呢在机器学习领域有一种叫决策树,随机森林就是通过很多决策树构成,决策树可以看一下我的这一篇博客:【机器学习】决策树算法-CSDN博客
1. 集成学习:
随机森林是一种集成学习方法,它结合了多个决策树的预测结果。首先我们要有很多决策树组成的随机森林,根据这个随机森林的结果,我们去预测一个新决策树的结果。
2. 训练过程:
自助采样:在构建每棵树时,随机森林使用自助采样(bootstrap sampling)从原始数据集中抽取样本,这意味着同一样本可能被多次抽取,而某些样本可能一次也不被抽取,这些自助采样都是随机选取的,带有不确定性。比如在下图中,我们有星星、云朵、星球、棒棒糖、猫咪、爱心图标,我们这些是随机选取、自助采样,可能会有重合的比如下图中(2,4)坐标,那么有一个新的事物我们可以根据选取的这样事物进行预测新事物的结果。
特征选择:在每个决策节点,随机森林不是考虑所有特征,而是随机选择一部分特征进行最佳分割点的搜索,例如:下图中每一个事物不是以整体作为单位去考虑的,而是随机选取了一部分。
3. 分类和回归:
分类:对于分类问题,每棵树会给出分类结果,随机森林通过多数投票法决定最终的分类。
回归:对于回归问题,每棵树会给出预测值,随机森林通过取这些预测值的平均值作为最终预测。
算法优点:
- 模型随机性强,不易overfit,抗噪性强,表示对异常点outlier不敏感,具有很高的准确率。
- 处理高维数据相对较快。
- 树状结构,模型可解释度高,可以告诉你每个特征的重要性。
算法缺点:
- 模型往往过于general,不具备正确处理过于困难的样本的能力。
- 模型起点高,但是天花板低。
参数:
- n_estimators:森林中树的数量。
- max_features:寻找最佳分割时要考虑的特征数量。
- max_depth:树的最大深度。
- min_samples_split:分裂内部节点所需的最小样本数。
- min_samples_leaf:叶节点所需的最小样本数。
算法实现:
随机森林算法的具体实现涉及到多个步骤,包括数据准备、模型训练、预测以及评估。下面我将详细介绍这些步骤,并提供一个完整的Python代码示例,使用scikit-learn库来实现随机森林算法。
1. 数据准备
首先,我们需要准备数据集。这里我们使用鸢尾花数据集(Iris dataset),这是一个常用的分类数据集。
2. 划分数据集
将数据集划分为训练集和测试集,以便在训练集上训练模型,并在测试集上评估模型的性能。
3. 创建随机森林模型
使用scikit-learn库中的RandomForestClassifier或RandomForestRegressor来创建随机森林模型。
4. 训练模型
使用训练集数据训练模型。
5. 预测
使用训练好的模型对测试集进行预测。
6. 评估模型
计算模型的准确率或其他评估指标,如均方误差。
完整代码示例
下面是一个按照上面所说的步骤,进行写完整的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 import numpy as np # 加载数据集 使用load_iris函数加载鸢尾花数据集 iris = load_iris() X, y = iris.data, iris.target # 划分训练集和测试集 使用train_test_split函数将数据集划分为训练集和测试集,测试集占30% X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 创建随机森林分类器 实例化RandomForestClassifier,设置树的数量为100 rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42) # 训练模型 使用训练集数据训练模型 rf_classifier.fit(X_train, y_train) # 预测测试集 使用训练好的模型对测试集进行预测 y_pred = rf_classifier.predict(X_test) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy:.2f}") # 打印特征重要性 feature_importances = rf_classifier.feature_importances_ print("Feature importances:") for feature, importance in zip(iris.feature_names, feature_importances): print(f"{feature}: {importance:.2f}") # 可视化特征重要性 使用Matplotlib库绘制特征重要性的条形图 import matplotlib.pyplot as plt features = iris.feature_names indices = np.argsort(feature_importances) plt.title("Feature Importances") plt.barh(range(len(indices)), feature_importances[indices], color="r", align="center") plt.yticks(range(len(indices)), [features[i] for i in indices]) plt.xlabel("Relative Importance") plt.show()
这个示例展示了如何使用随机森林算法进行分类任务,并评估模型的性能。你可以根据具体需求调整数据集、模型参数和评估指标。
随机森林是一种非常强大的机器学习算法,适用于处理各种复杂的数据集和预测任务。随机森林算法因其准确性和易用性而受到广泛应用,在·分类问题、回归问题、特征选择、数据降维等方面应用很广泛。执笔至此,感触彼多,全文将至,落笔为终,感谢各位的支持。
标签:训练,模型,feature,算法,随机,博强,以弱,森林 From: https://blog.csdn.net/m0_73633807/article/details/142685504