多元线性回归模型matlab代码
时间: 2023-07-02 09:10:52 浏览: 51
以下是一个多元线性回归模型的 Matlab 代码示例:
```matlab
% 导入数据
data = load('data.txt');
X = data(:, 1:2); % 自变量
y = data(:, 3); % 因变量
m = length(y); % 样本数
% 特征归一化
[X, mu, sigma] = featureNormalize(X);
% 添加截距项
X = [ones(m, 1) X];
% 初始化 theta
theta = zeros(3, 1);
% 定义代价函数
function J = computeCost(X, y, theta)
m = length(y);
J = 1 / (2 * m) * sum((X * theta - y) .^ 2);
end
% 执行梯度下降算法
alpha = 0.01; % 学习率
num_iters = 400; % 迭代次数
J_history = zeros(num_iters, 1); % 记录每次迭代的代价函数值
for iter = 1:num_iters
theta = theta - alpha / m * X' * (X * theta - y);
J_history(iter) = computeCost(X, y, theta);
end
% 绘制代价函数的收敛曲线
plot(1:num_iters, J_history, '-b', 'LineWidth', 2);
xlabel('迭代次数');
ylabel('代价函数值');
% 预测结果
x_test = [1650 3];
x_test = (x_test - mu) ./ sigma; % 特征归一化
x_test = [1 x_test];
price = x_test * theta;
fprintf('预测价格为 %f\n', price);
```
其中,`data.txt` 是包含样本数据的文本文件,每行的数据格式为 `x1 x2 y`,表示两个自变量和一个因变量。`featureNormalize` 函数是对自变量进行特征归一化的函数,用于提高算法的收敛速度。在执行梯度下降算法时,需要指定学习率 `alpha` 和迭代次数 `num_iters`,并记录每次迭代的代价函数值,以便绘制收敛曲线。最后,使用训练好的模型对新的自变量进行预测,得到因变量的预测值。