基于matlab中随机森林模型处理分类问题实战

一、数据介绍

这是关于意大利一个地区的葡萄酒数据,该数据是对该地区的三种不同培育品种的葡萄所酿造的酒的13种要素的化学分析结果,一共有178个观测值。我们希望用这些数据来建立一个模型,利用这些要素的特性来判断是那个品种的葡萄所酿造的酒。因变量是Class (葡萄的品种),有1、2、3个取值,而13个自变量为:Alcohol (酒精)、 Malic.acid (苹果酸)、Ash (灰分)、Alcalinity of ash (灰的碱性)、Magnesium (镁)、 Total phenols (苯酚总量)、Flavanoids[2]、Nonflavanoid phenols(非flavanoid苯酚)、Proanthocyanins[3]、Color intensity(颜色强度)、Hue(色调)、OD280/OD315 of diluted wines (稀释的酒的蛋白质浓度的光谱度量)、Proline(脯氨酸)。这些化学成份不认识也无所谓,最后我们的目标是判断一杯葡萄酒是由三种葡萄中的哪一种酿制的。

分类变量:1 2 3

输入变量:Alcohol (酒精)、 Malic.acid (苹果酸)、Ash (灰分)、Alcalinity of ash (灰的碱性)、Magnesium (镁)、 Total phenols (苯酚总量)、Flavanoids[2]、Nonflavanoid phenols(非flavanoid苯酚)、Proanthocyanins[3]、Color intensity(颜色强度)、Hue(色调)、OD280/OD315 of diluted wines (稀释的酒的蛋白质浓度的光谱度量)、Proline(脯氨酸)。

二、数据导入

将数据导入进matlab中,将数据分为训练集和测试集,训练集为已知的分类变量和各输入变量,测试集内应仅有输入变量,没有分类变量,

data1如图所示

data2如图所示

三、调用matlab工具箱中的随机森林模型

将工具箱调用出来之后 选择装袋树模型,点击训练,训练结束后,点击导出代码

trainingData=data1
inputTable = trainingData;
predictorNames = {'Alcohol', 'Malicacid', 'Ash', 'Alcalinityofash', 'Magnesium', 'Totalphenols', 'Flavanoids', 'Nonflavanoidphenols', 'Proanthocyanins', 'Colorintensity', 'Hue', 'OD280OD315ofdilutedwines', 'Proline'};
predictors = inputTable(:, predictorNames);
response = inputTable.Class;
isCategoricalPredictor = [false, false, false, false, false, false, false, false, false, false, false, false, false];

% 训练分类器
% 以下代码指定所有分类器选项并训练分类器。
template = templateTree(...
    'MaxNumSplits', 177);
classificationEnsemble = fitcensemble(...
    predictors, ...
    response, ...
    'Method', 'Bag', ...
    'NumLearningCycles', 30, ...
    'Learners', template, ...
    'ClassNames', categorical({'1'; '2'; '3'}));

% 使用预测函数创建结果结构体
predictorExtractionFcn = @(t) t(:, predictorNames);
ensemblePredictFcn = @(x) predict(classificationEnsemble, x);
trainedClassifier.predictFcn = @(x) ensemblePredictFcn(predictorExtractionFcn(x));

% 向结果结构体中添加字段
trainedClassifier.RequiredVariables = {'Alcalinityofash', 'Alcohol', 'Ash', 'Colorintensity', 'Flavanoids', 'Hue', 'Magnesium', 'Malicacid', 'Nonflavanoidphenols', 'OD280OD315ofdilutedwines', 'Proanthocyanins', 'Proline', 'Totalphenols'};
trainedClassifier.ClassificationEnsemble = classificationEnsemble;
trainedClassifier.About = '此结构体是从分类学习器 R2021a 导出的训练模型。';
trainedClassifier.HowToPredict = sprintf('要对新表 T 进行预测,请使用: \n yfit = c.predictFcn(T) \n将 ''c'' 替换为作为此结构体的变量的名称,例如 ''trainedModel''。\n \n表 T 必须包含由以下内容返回的变量: \n c.RequiredVariables \n变量格式(例如矩阵/向量、数据类型)必须与原始训练数据匹配。\n忽略其他变量。\n \n有关详细信息,请参阅 <a href="matlab:helpview(fullfile(docroot, ''stats'', ''stats.map''), ''appclassification_exportmodeltoworkspace'')">How to predict using an exported model</a>。');

% 提取预测变量和响应
% 以下代码将数据处理为合适的形状以训练模型。
%
inputTable = trainingData;
predictorNames = {'Alcohol', 'Malicacid', 'Ash', 'Alcalinityofash', 'Magnesium', 'Totalphenols', 'Flavanoids', 'Nonflavanoidphenols', 'Proanthocyanins', 'Colorintensity', 'Hue', 'OD280OD315ofdilutedwines', 'Proline'};
predictors = inputTable(:, predictorNames);
response = inputTable.Class;
isCategoricalPredictor = [false, false, false, false, false, false, false, false, false, false, false, false, false];

% 执行交叉验证
partitionedModel = crossval(trainedClassifier.ClassificationEnsemble, 'KFold', 5);

% 计算验证预测
[validationPredictions, validationScores] = kfoldPredict(partitionedModel);

% 计算验证准确度
validationAccuracy = 1 - kfoldLoss(partitionedModel, 'LossFun', 'ClassifError');

再这之后,如果只是想预测出分类结果,输入这一行代码即可

 yfit = trainedModel1.predictFcn(data2) 

效果如图所示

至此,利用随机森林模型对于分类模型的求解已完毕,但还有很多细节没有说明,如F1分数,混淆矩阵,ROC曲线,网格调参,随机森林模型网格搜索最大决策分裂数目热力图绘制,后续应该会更新

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值