数据分析:随机森林的原理及matlab和python实现
随机森林(Random Forest)是一种常用的机器学习算法,属于集成学习(Ensemble Learning)的一种。它的基本原理是将多个决策树组合成一个强大的分类器或回归器。
随机森林的实现步骤如下:
- 随机选择一部分样本(有放回地抽样,即bootstrap采样),构成一个训练集。
- 随机选择一部分特征,构成一个候选特征集合。
- 用选定的特征和训练集训练一个决策树模型。
- 重复上述过程,构造多棵决策树。
- 针对分类问题,采用投票法来决定最终的分类结果,即让每个决策树投票,选择得票最多的类别作为最终结果。对于回归问题,采用平均法来确定最终的预测值。
随机森林的优点有:
- 随机森林在处理高维数据时表现良好。
- 随机森林对于异常值不敏感。
- 随机森林可以同时处理分类和回归问题。
随机森林的缺点有:
- 随机森林对于噪声数据敏感。
- 随机森林需要一定的计算资源和时间,训练时间比较长。
- 随机森林的结果不容易解释,很难说明哪些特征对结果的影响最大
python版本实现:
# 随机森林分类
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=10, max_depth=5)
rfc.fit(X_train, y_train)
y_pred = rfc.predict(X_test)
# 随机森林回归
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(n_estimators=10, max_depth=5)
rfr.fit(X_train, y_train)
y_pred = rfr.predict(X_test)
matlab版本实现
% 加载数据
load fisheriris
% 划分训练集和测试集
rng(1) % 设置随机数种子,保证结果可重复
cv = cvpartition(species,'HoldOut',0.3);
idxTrain = training(cv); % 训练集索引
idxTest = test(cv); % 测试集索引
Xtrain = meas(idxTrain,:);
Ytrain = species(idxTrain);
Xtest = meas(idxTest,:);
Ytest = species(idxTest);
% 训练随机森林
numTrees = 50;
b = TreeBagger(numTrees,Xtrain,Ytrain,'Method','classification','OOBPredictorImportance','on','OOBVarImp','on','MinLeafSize',5,'NumPredictorsToSample','all');
% 预测测试集
Ypred = predict(b,Xtest);
% 评估分类器性能
ConfMat = confusionmat(Ytest,Ypred);
accuracy = sum(diag(ConfMat))/sum(ConfMat(:));
THE END