logistic回归matlab代码
时间: 2023-10-10 22:14:19 浏览: 89
以下是使用 MATLAB 实现的 logistic 回归代码:
```matlab
% 读取数据
data = load('data.txt');
X = data(:, [1, 2]); % 特征
y = data(:, 3); % 标签
% 可视化数据
plotData(X, y);
% ==================== 训练模型 ====================
% 添加截距项
m = length(y);
X = [ones(m, 1) X];
% 初始化参数
initial_theta = zeros(size(X, 2), 1);
% 设定选项
options = optimset('GradObj', 'on', 'MaxIter', 400);
% 使用 fminunc 函数求解
[theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
% ==================== 画出决策边界 ====================
% 可视化数据
plotDecisionBoundary(theta, X, y);
% 预测新数据
prob = sigmoid([1 45 85] * theta);
fprintf('预测概率为:%f\n', prob);
% ==================== 函数定义 ====================
% 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
% 可视化数据
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);
hold off;
end
% 画出决策边界
function plotDecisionBoundary(theta, X, y)
% 画出数据
plotData(X(:,2:3), y);
hold on;
% 画决策边界
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('正例', '反例', '决策边界');
axis([30, 100, 30, 100]);
hold off;
end
```
这是使用梯度下降方法求解 logistic 回归的代码。其中,`data.txt` 是含有两个特征和一个标签的数据集文件,`sigmoid` 函数是 logistic 函数,`costFunction` 函数是损失函数,`plotData` 函数和 `plotDecisionBoundary` 函数用于可视化数据和画出决策边界。
阅读全文