给定二分类问题的训练集,格式为excel,数据为2列,40行,用matlab采用Logistic回归算法进行分类学习,画出散点图(正例和负例分别用不同点型表示)
时间: 2024-02-22 14:58:22 浏览: 71
好的,我可以帮你解决这个问题。首先需要用matlab读取excel数据,然后再进行Logistic回归算法的分类学习。最后使用scatter函数画出散点图,正例和负例用不同点型表示。
以下是代码实现过程:
1. 读取excel数据
```matlab
data = xlsread('data.xlsx');
X = data(:,1);
Y = data(:,2);
```
2. Logistic回归算法的分类学习
```matlab
m = length(Y);
X = [ones(m,1) X];
initial_theta = zeros(size(X,2),1);
options = optimset('GradObj', 'on', 'MaxIter', 400);
[theta, cost] = fminunc(@(t)(costFunction(t, X, Y)), initial_theta, options);
```
其中,costFunction是自己编写的cost函数,用于计算代价函数J和梯度。
3. 画出散点图
```matlab
positive = find(Y == 1);
negative = find(Y == 0);
scatter(X(positive,2), X(positive,3), 'k+', 'LineWidth', 2, 'MarkerSize', 7);
hold on;
scatter(X(negative,2), X(negative,3), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7);
hold on;
```
其中,positive和negative分别是正例和负例的索引。
完整代码如下:
```matlab
data = xlsread('data.xlsx');
X = data(:,1);
Y = data(:,2);
m = length(Y);
X = [ones(m,1) X];
initial_theta = zeros(size(X,2),1);
options = optimset('GradObj', 'on', 'MaxIter', 400);
[theta, cost] = fminunc(@(t)(costFunction(t, X, Y)), initial_theta, options);
positive = find(Y == 1);
negative = find(Y == 0);
scatter(X(positive,2), X(positive,3), 'k+', 'LineWidth', 2, 'MarkerSize', 7);
hold on;
scatter(X(negative,2), X(negative,3), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7);
hold on;
xlabel('First feature');
ylabel('Second feature');
legend('Positive', 'Negative');
```
需要注意的是,该代码中的costFunction函数需要自己编写,它的作用是计算代价函数J和梯度。
阅读全文