利用逻辑回归分类模型,针对鸢尾花属性中的花瓣长和花瓣宽,实现鸢尾花数据集中山鸢尾和变色鸢尾的分类,使用matlab进行编程
时间: 2024-05-10 16:20:14 浏览: 115
首先,需要加载鸢尾花数据集,可以使用matlab内置的load函数:
```matlab
load fisheriris;
```
该函数会加载鸢尾花数据集,包含4个属性:花萼长度、花萼宽度、花瓣长度和花瓣宽度,以及对应的分类标签:setosa、versicolor和virginica。为了方便起见,我们只使用花瓣长和花瓣宽两个属性来训练分类模型,同时只考虑山鸢尾和变色鸢尾这两个分类,即将其他分类的数据剔除:
```matlab
X = meas(51:end, 3:4);
Y = (strcmp('versicolor', species(51:end)) | strcmp('virginica', species(51:end))) + 1;
```
其中,meas(51:end, 3:4)表示取出第51个样本到最后一个样本的花瓣长和花瓣宽两个属性,species(51:end)表示取出第51个样本到最后一个样本的分类标签。strcmp('versicolor', species(51:end)) | strcmp('virginica', species(51:end))表示将分类标签为versicolor或virginica的样本标记为1,其他样本标记为0。最后再加上1,是为了将标签从0/1转换为1/2。
接下来,可以将数据集划分为训练集和测试集,使用训练集来训练逻辑回归模型,然后在测试集上进行验证:
```matlab
% 划分训练集和测试集
idx = randperm(size(X, 1));
train_idx = idx(1:floor(0.7 * length(idx)));
test_idx = idx(floor(0.7 * length(idx))+1:end);
X_train = X(train_idx, :);
Y_train = Y(train_idx);
X_test = X(test_idx, :);
Y_test = Y(test_idx);
% 训练逻辑回归模型
[B, dev, stats] = mnrfit(X_train, Y_train);
% 在测试集上进行验证
Y_pred = mnrval(B, X_test);
[~, Y_pred] = max(Y_pred, [], 2);
accuracy = sum(Y_pred == Y_test) / length(Y_test);
fprintf('Accuracy = %.2f%%\n', accuracy * 100);
```
其中,randperm函数可以随机生成1到样本数量之间的不重复整数序列,用于将数据集划分为训练集和测试集。mnrfit函数用于训练逻辑回归模型,mnrval函数用于在测试集上进行预测,最后计算分类准确率。
完整的代码如下:
```matlab
load fisheriris;
X = meas(51:end, 3:4);
Y = (strcmp('versicolor', species(51:end)) | strcmp('virginica', species(51:end))) + 1;
% 划分训练集和测试集
idx = randperm(size(X, 1));
train_idx = idx(1:floor(0.7 * length(idx)));
test_idx = idx(floor(0.7 * length(idx))+1:end);
X_train = X(train_idx, :);
Y_train = Y(train_idx);
X_test = X(test_idx, :);
Y_test = Y(test_idx);
% 训练逻辑回归模型
[B, dev, stats] = mnrfit(X_train, Y_train);
% 在测试集上进行验证
Y_pred = mnrval(B, X_test);
[~, Y_pred] = max(Y_pred, [], 2);
accuracy = sum(Y_pred == Y_test) / length(Y_test);
fprintf('Accuracy = %.2f%%\n', accuracy * 100);
```
阅读全文