matlab基于支持向量机,完成鸢尾花数据集三分类
时间: 2023-06-15 21:02:08 浏览: 264
基于MATLAB的鸢尾花数据集分类
5星 · 资源好评率100%
前言
鸢尾花是机器学习中常用的数据集,它有三个类别:山鸢尾、杂色鸢尾和维吉尼亚鸢尾。本文将使用Matlab基于支持向量机完成鸢尾花数据集三分类,并对整个过程进行详细的解释。
步骤
1、数据准备
首先,我们下载鸢尾花数据集,可以是自己手动下载,也可以使用Matlab自带的数据集导入工具下载。
代码如下:
>> data = load('fisheriris.mat')
运行完毕后,我们可以看到data变量里面存储了鸢尾花数据集中所有样本的特征值及其对应的类别标签。
2、数据预处理
在模型训练之前,我们需要对数据进行处理。首先我们将数据集分割成训练集和测试集。假设取20%的数据作为测试集,80%的数据作为训练集。同时我们也需要将类别标签转化为数值型数据。
代码如下:
>> x = data.meas;
>> y = cell2mat({data.species}');
>> cv = cvpartition(y,'HoldOut',0.2);
>> idxTrain = training(cv);
>> idxTest = test(cv);
>> xTrain = x(idxTrain,:);
>> yTrain = y(idxTrain,:);
>> xTest = x(idxTest,:);
>> yTest = y(idxTest,:);
>> yTrain(yTrain=='setosa') = 1;
>> yTrain(yTrain=='versicolor') = 2;
>> yTrain(yTrain=='virginica') = 3;
>> yTrain = str2double(yTrain);
>> yTest(yTest=='setosa') = 1;
>> yTest(yTest=='versicolor') = 2;
>> yTest(yTest=='virginica') = 3;
>> yTest = str2double(yTest);
在上述代码中我们使用了Matlab中的cvpartition函数,将数据分成了训练集和测试集,其中'HoldOut'表示我们选择了“留出法”作为数据集划分方法。
3、模型训练
支持向量机(SVM)是一种常用的统计学习方法,它通过最大化分类器的间隔来分割数据集,从而达到分类的目的。在Matlab中,我们可以使用fitcsvm函数来实现。
代码如下:
>> SVMModel = fitcsvm(xTrain,yTrain,'ClassNames',{'1','2','3'},'KernelFunction','rbf','BoxConstraint',1);
在fitcsvm函数中,'ClassNames'指定分类的类别标签,'KernelFunction'指定核函数(常用的有线性核函数、多项式核函数、径向基核函数等),'BoxConstraint'指定分类器的惩罚参数(值越大则惩罚越大,分类界面的波动性越小)。
4、模型预测
训练完成后,我们需要对测试集进行预测,看看分类器的效果如何。使用predict函数对测试集进行预测,并计算预测的准确率。
代码如下:
>> yTestPredict = predict(SVMModel,xTest);
>> accuracy = sum(yTestPredict==yTest)/length(yTest)
其中,sum(yTestPredict==yTest)计算的是分类正确的样本个数,length(yTest)表示测试集样本总数,这两者的比值即为分类器的准确率。
5、模型优化
如果我们的分类效果并不令人满意,可以调整模型的参数,比如选择不同的核函数和惩罚参数。Matlab提供了优化函数fitcsvm自动调整参数,我们只需要将调参任务交给它就可以了。
代码如下:
>> SVMModel = fitcsvm(xTrain,yTrain,'ClassNames',{'1','2','3'},'OptimizeHyperparameters','auto')
其中,'OptimizeHyperparameters'指示fitcsvm函数是否自动寻找最优的超参数,'auto'表示我们交给函数自动优化即可,'bayesopt'表示使用贝叶斯优化算法来寻找最优超参数。
总结
本文我们基于支持向量机完成了鸢尾花数据集的三分类任务,包含数据准备、数据预处理、模型训练和模型优化等步骤。对于初学者来说,Matlab提供了非常简便的工具箱,既可以深入学习机器学习算法,又能够进行实际的应用开发。
阅读全文