给我一个matlab包含数据集和数据处理的logistic回归代码
时间: 2023-07-30 12:13:04 浏览: 58
以下是一个matlab包含数据集和数据处理的logistic回归代码的示例:
```matlab
% 加载数据集
data = load('ex2data1.txt');
X = data(:, [1, 2]); % 特征矩阵
y = data(:, 3); % 标签向量
% 数据预处理
[m, n] = size(X);
X = [ones(m, 1) X]; % 加上一列全为1的偏置项
initial_theta = zeros(n + 1, 1); % 初始化theta向量
% 定义sigmoid函数
function g = sigmoid(z)
g = 1 ./ (1 + exp(-z));
end
% 定义代价函数
function [J, grad] = costFunction(theta, X, y)
m = length(y);
h = sigmoid(X * theta);
J = (1 / m) * sum(-y .* log(h) - (1 - y) .* log(1 - h)); % 计算代价
grad = (1 / m) * X' * (h - y); % 计算梯度
end
% 使用fminunc函数来优化代价函数
options = optimset('GradObj', 'on', 'MaxIter', 400);
[theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
% 绘制决策边界
plotData(X(:, 2:3), y);
hold on;
if size(X, 2) <= 3
plot_x = [min(X(:,2))-2, max(X(:,2))+2];
plot_y = (-1./theta(3)).*(theta(2).*plot_x + theta(1));
plot(plot_x, plot_y)
legend('Admitted', 'Not admitted', 'Decision Boundary')
axis([30, 100, 30, 100])
else
u = linspace(-1, 1.5, 50);
v = linspace(-1, 1.5, 50);
z = zeros(length(u), length(v));
for i = 1:length(u)
for j = 1:length(v)
z(i,j) = mapFeature(u(i), v(j)) * theta;
end
end
z = z'; % 重要的一步,需要转置
contour(u, v, z, [0, 0], 'LineWidth', 2)
end
hold off;
% 预测新数据
prob = sigmoid([1 45 85] * theta); % 预测一个考试成绩为45分和85分的学生是否被录取
fprintf('For a student with scores 45 and 85, we predict an admission probability of %f\n', prob);
```
其中,`ex2data1.txt`是一个二分类数据集,每行有两个特征和一个标签,表示一个学生是否被大学录取。该文件的格式如下:
```
34.62365962451697,78.0246928153624,0
30.28671076822607,43.89499752400101,0
35.84740876993872,72.90219802708364,0
60.18259938620976,86.30855209546826,1
79.0327360507101,75.3443764369103,1
45.08327747668339,56.3163717815305,0
61.10666453684766,96.51142588489624,1
```
`plotData`和`mapFeature`函数的代码如下:
```matlab
function plotData(X, y)
% 绘制训练数据
pos = find(y==1);
neg = find(y==0);
plot(X(pos, 1), X(pos, 2), 'k+', 'LineWidth', 2, 'MarkerSize', 7);
hold on;
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7);
end
function out = mapFeature(X1, X2)
% 对特征进行映射,生成多项式特征
degree = 6;
out = ones(size(X1(:,1)));
for i = 1:degree
for j = 0:i
out(:, end+1) = (X1.^(i-j)).*(X2.^j);
end
end
end
```
这段代码会绘制出数据集和决策边界,同时输出一个新数据的预测结果。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)