【scikit-learn基础】--『监督学习』之 随机森林分类
1.【scikit-learn基础】--概述2.【scikit-learn基础】--『数据加载』之玩具数据集3.【scikit-learn基础】--『数据加载』之真实数据集4.【scikit-learn基础】--『数据加载』之样本生成器5.【scikit-learn基础】--『数据加载』之外部数据集6.【scikit-learn基础】--『预处理』之 标准化7.【scikit-learn基础】--『预处理』之 数据缩放8.【scikit-learn基础】--『预处理』之 正则化9.【scikit-learn基础】--『预处理』之 分类编码10.【scikit-learn基础】--『预处理』之 离散化11.【scikit-learn基础】--『预处理』之 缺失值处理12.【scikit-learn基础】--『监督学习』之 线性回归13.【scikit-learn基础】--『监督学习』之 岭回归14.【scikit-learn基础】--『监督学习』之 LASSO回归15.【scikit-learn基础】--『监督学习』之 支持向量机回归16.【scikit-learn基础】--『监督学习』之 决策树回归17.【scikit-learn基础】--『监督学习』之 随机森林回归18.【scikit-learn基础】--『监督学习』之 K-近邻分类19.【scikit-learn基础】--『监督学习』之 逻辑回归分类20.【scikit-learn基础】--『监督学习』之 贝叶斯分类21.【scikit-learn基础】--『监督学习』之 决策树分类
22.【scikit-learn基础】--『监督学习』之 随机森林分类
23.【scikit-learn基础】--『监督学习』之 支持向量机分类24.【scikit-learn基础】--『监督学习』之 均值聚类25.【scikit-learn基础】--『监督学习』之 层次聚类26.【scikit-learn基础】--『监督学习』之 谱聚类27.【scikit-learn基础】--『监督学习』之 空间聚类28.【scikit-learn基础】--『回归模型评估』之误差分析29.【scikit-learn基础】--『回归模型评估』之偏差分析30.【scikit-learn基础】--『回归模型评估』之可视化评估31.【scikit-learn基础】--『回归模型评估』之准确率分析32.【scikit-learn基础】--『回归模型评估』之损失分析33.【scikit-learn基础】--『分类模型评估』之系数分析34.【scikit-learn基础】--『分类模型评估』之评估报告35.【scikit-learn基础】--模型持久化36.神经网络极简入门37.神经网络中神经元的权重更新38.机器学习的数学基础--向量,矩阵39.机器学习的数学基础--微积分40.scikit-learn中的Pipeline:构建高效、可维护的机器学习流程随机森林分类算法是一种基于集成学习(ensemble learning)的机器学习算法,
它的基本原理是通过对多个决策树的预测结果进行平均或投票,以产生最终的分类结果。
随机森林算法可用于回归和分类问题。
关于随机森林算法在回归问题上的应用可参考:TODO
随机森林分类算法可以应用于各种需要进行分类或预测的问题,如垃圾邮件识别、信用卡欺诈检测、疾病预测等,
它也可以与其他机器学习算法进行结合,以进一步提高预测准确率。
1. 算法概述
随机森林的基本原理是构建多棵决策树,每棵树都是基于原始训练数据的一个随机子集进行训练。在构建每棵树时,算法会随机选择一部分特征进行考虑,而不是考虑所有的特征。
然后,对于一个新的输入样本,每棵树都会进行分类预测,并将预测结果提交给“森林”进行最终的分类决策。
一般来说,森林会选择出现次数最多的类别作为最终的分类结果。
理论上来看,随机森林分类应该比决策树分类有更加好的准确度,特别是在高维度的数据情况下。
2. 创建样本数据
为了后面比较随机森林分类算法和决策树算法的准确性,创建分类多一些(8个分类标签)的样本数据。
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
# 分类数据的样本生成器
X, y = make_classification(
n_samples=1000, n_classes=8, n_clusters_per_class=2, n_informative=6
)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)
plt.show()
3. 模型训练
首先,分割训练集和测试集。
from sklearn.model_selection import train_test_split
# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
这次按照9:1的比例来划分训练集和测试集。
用决策树分类模型来训练数据:
from sklearn.tree import DecisionTreeClassifier
reg_names = [
"ID3算法",
"C4.5算法",
"CART算法",
]
# 定义
regs = [
DecisionTreeClassifier(criterion="entropy"),
DecisionTreeClassifier(criterion="log_loss"),
DecisionTreeClassifier(criterion="gini"),
]
# 训练模型
for reg in regs:
reg.fit(X_train, y_train)
# 在测试集上进行预测
y_preds = []
for reg in regs:
y_pred = reg.predict(X_test)
y_preds.append(y_pred)
for i in range(len(y_preds)):
correct_pred = np.sum(y_preds[i] == y_test)
print("决策树【{}】 预测正确率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))
# 运行结果
决策树【ID3算法】 预测正确率:43.00%
决策树【C4.5算法】 预测正确率:42.00%
决策树【CART算法】 预测正确率:42.00%
用随机森林分类模型来训练数据:
from sklearn.ensemble import RandomForestClassifier
reg_names = [
"ID3算法",
"C4.5算法",
"CART算法",
]
# 定义
regs = [
RandomForestClassifier(criterion="entropy"),
RandomForestClassifier(criterion="log_loss"),
RandomForestClassifier(criterion="gini"),
]
# 训练模型
for reg in regs:
reg.fit(X_train, y_train)
# 在测试集上进行预测
y_preds = []
for reg in regs:
y_pred = reg.predict(X_test)
y_preds.append(y_pred)
for i in range(len(y_preds)):
correct_pred = np.sum(y_preds[i] == y_test)
print("随机森林【{}】 预测正确率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))
# 运行结果
随机森林【ID3算法】 预测正确率:64.00%
随机森林【C4.5算法】 预测正确率:63.00%
随机森林【CART算法】 预测正确率:69.00%
可以看出,随机森林分类的准确性确实比决策树分类提高了。
不过,运行过程中也可以发现,随机森林的训练时间会比决策树长一些。
4. 总结
随机森林分类算法的优势在于:
- 抗过拟合能力强:由于采用随机选择特征的方式,可以有效地避免过拟合问题。
- 泛化能力强:通过对多个决策树的结果进行投票或平均,可以获得更好的泛化性能。
- 对数据特征的选取具有指导性:在构建决策树时会对特征进行选择,这可以为后续的特征选择提供指导。
- 适用于大规模数据集:可以有效地处理大规模数据集,并且训练速度相对较快。
当然,随机森林分类算法也存在一些劣势:
- 需要大量的内存和计算资源:由于需要构建多个决策树,因此需要更多的内存和计算资源。
- 需要调整参数:性能很大程度上取决于参数的设置,如树的数量、每个节点的最小样本数等,这些参数的设置需要一定的经验和实验。
- 对新样本的预测性能不稳定:由于是通过投票或平均多个决策树的结果来进行预测,因此对新样本的预测性能可能会受到影响。
合集:
scikit-learn
分类:
databook
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库