当前位置: 首页 > article >正文

【监督学习】线性回归算法步骤及matlab实现

线性回归算法

    • 线性回归算法
      • 1.算法步骤
      • 2.MATLAB 实现

线性回归算法

线性回归是一种统计方法,用于建模因变量(通常表示为 y y y)和一个或多个自变量(通常表示为 X 1 , X 2 , . . . , X n X_1,X_2,...,X_n X1,X2,...,Xn)之间的关系。它假设这些变量之间的关系是线性的,即可以通过一条直线(在一维情况下)或多维超平面(在多维情况下)来近似描述这种关系。线性回归的目标是找到最佳拟合直线或超平面,使得预测值与实际观测值之间的差异最小化。

1.算法步骤

数据准备
模型假设
参数估计
模型评估
数据清洗
数据收集
特征标准化
因变量与自变量线性关系
误差项独立同分布
最小二乘法优化
求解损失函数
计算R^2,RMSE等指标
残差分析
数据准备
模型假设
参数估计
模型评估
预测应用
  1. 数据准备

    • 数据收集:获取包含自变量(特征)和因变量(目标)的数据集(如房价与面积、楼层等);
    • 数据清洗:处理缺失值、异常值(如删除或填充);
    • 特征标准化:对特征进行归一化(如Z-score标准化),避免量纲差异影响模型收敛。
  2. 模型假设

    • 线性关系:因变量 y y y 与自变量 X X X 之间满足线性关系: y = β 0 + β 1 X 1 + ⋯ + β n X n + ϵ y=β_0+β_1X_1+⋯+β_nX_n+ϵ y=β0+β1X1++βnXn+ϵ
    • 误差项:误差 ϵ ϵ ϵ 服从均值为 0、方差为常数的正态分布,且相互独立。
  3. 参数估计

    • 目标:找到最优参数 β β β 使得预测值与真实值的误差平方和最小;
    • 损失函数 J ( β ) = 1 2 m ∑ i = 1 m ( y i − y ^ i ) 2 J(β)=\frac{1}{2m}\sum_{i=1}^{m}(y_i-\hat{y}_i)^2 J(β)=2m1i=1m(yiy^i)2
    • 求解方法
      • 解析解(即直接求解,适用于小数据): β = ( X T X ) − 1 X T y β=(\mathbf{X}^T\mathbf{X})^{−1}\mathbf{X}^Ty β=(XTX)1XTy
      • 梯度下降(迭代优化):逐步调整参数,适用于大数据。
  4. 模型评估

    • R²(决定系数):衡量模型解释的方差比例,越接近 1 越好: R 2 = 1 − S S E S S T R^2=1−\frac{SSE}{SST} R2=1SSTSSE
    • MSE(均方误差):预测值与真实值的平均平方误差: M S E = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 MSE=\frac{1}{m}\sum_{i=1}^{m}(y_i-\hat{y}_i)^2 MSE=m1i=1m(yiy^i)2
    • 残差分析:检查残差是否随机分布(理想情况为无趋势、无异方差)。
  5. 预测应用

  • 使用训练好的模型对新数据进行预测: y ^ = X n e w β \hat{y}=\mathbf{X}_{new}β y^=Xnewβ

2.MATLAB 实现

以房价预测为例,房价真实参数为: p r i c e = 1000 + 5 ∗ a r e a + 20 ∗ f l o o r + n o i s e price = 1000 + 5*area + 20*floor + noise price=1000+5area+20floor+noise
a r e a area area 为面积, f l o o r floor floor 为楼层, n o i s e noise noise 为其他影响, p r i c e price price 为最后每平方米的房价。
线性回归_房价预测模型评估①
线性回归_房价预测模型评估②

%% 线性回归案例:房价预测
% 功能: 训练线性回归模型预测房价
clc; clear; close all;

%% 1. 生成模拟数据
rng(0); % 固定随机种子
m = 100; % 样本数量
area = 50 + 150*rand(m,1); % 面积 (50~200平方米)
floor = randi([1,20], m,1); % 楼层 (1~20层)
noise = 50*randn(m,1); % 噪声

% 真实参数: price = 1000 + 5*area + 20*floor + noise
price = 1000 + 5*area + 20*floor + noise;

% 合并特征矩阵X,添加截距项1
X = [ones(m,1), area, floor]; 

%% 2. 数据标准化(可选,但推荐)
% 标准化特征(截距项不标准化)
X(:,2:end) = zscore(X(:,2:end)); 

%% 3. 划分训练集和测试集(70%训练,30%测试)
split = 0.7;
trainSize = round(split * m);
X_train = X(1:trainSize, :);
y_train = price(1:trainSize);
X_test = X(trainSize+1:end, :);
y_test = price(trainSize+1:end);

%% 4. 参数估计:解析解(最小二乘法)
beta = (X_train' * X_train) \ (X_train' * y_train); % 直接求解

%% 5. 模型评估
% 预测训练集和测试集
y_train_pred = X_train * beta;
y_test_pred = X_test * beta;

% 计算R²和MSE
SSE_train = sum((y_train - y_train_pred).^2);
SST_train = sum((y_train - mean(y_train)).^2);
R2_train = 1 - SSE_train / SST_train;
MSE_train = mean((y_train - y_train_pred).^2);

SSE_test = sum((y_test - y_test_pred).^2);
SST_test = sum((y_test - mean(y_test)).^2);
R2_test = 1 - SSE_test / SST_test;
MSE_test = mean((y_test - y_test_pred).^2);

% 显示结果
fprintf('训练集: R²=%.3f, MSE=%.2f\n', R2_train, MSE_train);
fprintf('测试集: R²=%.3f, MSE=%.2f\n', R2_test, MSE_test);

%% 6. 可视化结果
figure;

% 残差图
subplot(1,2,1);
scatter(y_train_pred, y_train_pred - y_train, 'b');
hold on;
scatter(y_test_pred, y_test_pred - y_test, 'r');
xlabel('预测值');
ylabel('残差');
title('残差图(蓝色:训练集,红色:测试集)');
grid on;

% 预测值与真实值对比
subplot(1,2,2);
plot(y_test, y_test_pred, 'ro');
hold on;
plot([min(y_test), max(y_test)], [min(y_test), max(y_test)], 'k--');
xlabel('真实价格');
ylabel('预测价格');
title('测试集预测效果');
grid on;

%% 7. 输出参数
disp('模型参数:');
disp(['截距项: ', num2str(beta(1))]);
disp(['面积系数: ', num2str(beta(2))]);
disp(['楼层系数: ', num2str(beta(3))]);

http://www.kler.cn/a/563109.html

相关文章:

  • 安卓apk签名有了v1、v2、v3说明
  • 【Python爬虫(90)】以Python爬虫为眼,洞察金融科技监管风云
  • 技术架构和工程架构区别
  • 前端面试题---vue router 哈希模式和历史模式有什么区别
  • 模型精调和模型蒸馏有什么区别
  • 基于Spring Boot的供应商管理系统设计与实现(LW+源码+讲解)
  • Qt 是一个跨平台的 C++ 应用程序框架
  • Delphi操作数据库时出错:Too long identifer(>255)
  • 基于STM32的智能农业无人机系统
  • Java中的异常处理:最佳实践与常见误区
  • TFChat:腾讯大模型知识引擎(DeepSeek R1)+飞书机器人实现AI智能助手
  • 【DeepSeek开源:会带来多大的影响】
  • 7. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--路由
  • Java web后端转Java游戏后端
  • 数据结构 【搜索二叉树】
  • 暨南大学智科院电子信息复试Tips
  • w803|联盛德|WM IoT SDK2.X测试|pinout|(2):w803开发板简介
  • 剑指 Offer II 033. 变位词组
  • [算法--前缀和] 矩阵区域和
  • 计算机基础:二进制基础01,比特与字节