逻辑回归预测matlab代码
时间: 2023-11-21 14:49:54 浏览: 107
逻辑回归是一种常用的分类算法,用于估计某个事件发生的概率。在Matlab中,可以使用glmfit函数来拟合一个逻辑回归模型。以下是一个简单的逻辑回归预测的Matlab代码示例:
```matlab
% 假设你已经有了输入特征矩阵X和相应的目标变量向量y
X = ... % 输入特征矩阵
y = ... % 目标变量向量
% 使用glmfit函数拟合逻辑回归模型
[b, dev, stats] = glmfit(X, y, 'binomial', 'logit');
% 使用拟合的模型进行预测
X_new = ... % 新的输入特征矩阵
y_pred = glmval(b, X_new, 'logit');
% 根据需要可以将预测结果转换为分类标签
y_pred_class = round(y_pred);
% 打印预测结果
disp(y_pred_class);
```
请注意,上述代码中的X和y分别表示输入特征矩阵和目标变量向量。你需要根据你的实际数据进行替换。
相关问题
逻辑回归预测 MATLAB
在 MATLAB 中,可以使用 `fitglm` 函数来进行逻辑回归预测。下面是一个简单的示例:
假设我们有一个数据集,其中包含两个变量 `x` 和 `y`,以及一个二元变量 `label`,表示一个样本是否属于某个类别。我们可以使用逻辑回归来预测一个新的样本是否属于该类别。
首先,我们需要加载数据集:
```
data = readtable('data.csv');
```
其中 `data.csv` 是包含数据的 CSV 文件。接下来,我们可以将数据集拆分为训练集和测试集:
```
cv = cvpartition(size(data,1),'HoldOut',0.3);
idx = cv.test;
dataTrain = data(~idx,:);
dataTest = data(idx,:);
```
这里我们将数据集按照 7:3 的比例分成训练集和测试集,其中 `cvpartition` 函数用于创建交叉验证对象,`HoldOut` 表示留出法,`size(data,1)` 表示数据集中的样本数。
接下来,我们可以使用 `fitglm` 函数来训练逻辑回归模型:
```
model = fitglm(dataTrain,'label ~ x + y','Distribution','binomial');
```
这里我们将 `x` 和 `y` 作为输入变量,`label` 作为输出变量,`Distribution` 值为 `binomial` 表示使用二项式分布。
训练完成后,我们可以使用 `predict` 函数来对测试集进行预测:
```
pred = predict(model,dataTest);
```
最后,我们可以使用 `confusionmat` 函数来计算预测结果的混淆矩阵:
```
C = confusionmat(dataTest.label,pred>0.5);
```
这里 `dataTest.label` 表示测试集中的真实标签,`pred>0.5` 表示预测结果的二元值。
完整代码示例:
```
data = readtable('data.csv');
cv = cvpartition(size(data,1),'HoldOut',0.3);
idx = cv.test;
dataTrain = data(~idx,:);
dataTest = data(idx,:);
model = fitglm(dataTrain,'label ~ x + y','Distribution','binomial');
pred = predict(model,dataTest);
C = confusionmat(dataTest.label,pred>0.5);
```
三个特征的逻辑回归预测模型 Matlab 代码
以下是一个基于三个特征的逻辑回归预测模型 Matlab 代码的示例:
```Matlab
% 加载数据
data = load('data.txt');
X = data(:, [1, 2, 3]); % 特征
y = data(:, 4); % 标签
% 绘制数据散点图
figure;
hold on;
pos = find(y==1);
neg = find(y==0);
plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, 'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y','MarkerSize', 7);
xlabel('Feature 1');
ylabel('Feature 2');
legend('Positive', 'Negative');
hold off;
% 初始化参数
[m, n] = size(X);
X = [ones(m, 1) X]; % 添加偏置项
initial_theta = zeros(n + 1, 1);
% 训练模型
options = optimset('GradObj', 'on', 'MaxIter', 400);
[theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);
% 绘制决策边界
plotDecisionBoundary(theta, X, y);
xlabel('Feature 1');
ylabel('Feature 2');
legend('Positive', 'Negative', 'Decision Boundary');
% 预测新数据
prob = sigmoid([1, 2, 3] * theta);
fprintf('For features [1, 2, 3], probability of positive class: %f\n', prob);
% 定义代价函数和梯度函数
function [J, grad] = costFunction(theta, X, y)
m = length(y);
J = (-1/m) * sum(y .* log(sigmoid(X * theta)) + (1-y) .* log(1 - sigmoid(X * theta)));
grad = (1/m) * (X' * (sigmoid(X * theta) - y));
end
% 定义 sigmoid 函数
function g = sigmoid(z)
g = 1 ./ (1 + exp(-z));
end
% 绘制决策边界函数
function plotDecisionBoundary(theta, X, y)
plotData(X(:,2:3), y);
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)
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
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
```
在这个示例中,我们加载了一个包含三个特征和一个二元标签的数据集,并使用逻辑回归算法训练模型。我们使用 fminunc 函数最小化代价函数,该函数在每次迭代中计算梯度并更新模型参数。在训练模型后,我们使用绘制决策边界的函数显示模型的预测结果。最后,我们使用训练好的模型对新的特征值进行预测。
阅读全文