线性回归:通过拟合线性方程(如 \(y = w_1x_1 + w_2x_2 + b\))预测房价、销售额等连续变量,需掌握特征标准化、正则化(L1/L2)防止过拟合。应用场景:金融领域的股价预测、电商用户消费金额预估。

线性回归基础与实战:从原理到应用的简易入门

一、线性回归的核心思想:用直线(或超平面)拟合数据

线性回归是一种监督学习算法,核心目标是通过找到一个线性方程,来描述自变量(特征)与因变量(目标值)之间的关系。通俗来说,就是用一条 “直线”(二维场景)或 “超平面”(多维场景)尽可能准确地拟合数据点,从而实现对连续变量的预测。

二、数学原理:线性方程与拟合目标
  1. 线性方程的数学表达

    • 简单线性回归(单特征):y=w⋅x+b,其中 w 是权重(斜率),b 是偏置(截距)。
  2. 拟合目标:最小化预测误差

    • 如何判断一条直线 “拟合得好不好”?通过计算均方误差(MSE) 其中 \(y_i\)是真实值,\(\hat{y}_i\) 是模型预测值。线性回归的核心就是通过优化算法(如梯度下降)找到一组 w 和 b,使 MSE 最小。
三、关键技术点:特征标准化与正则化
  1. 特征标准化(Feature Standardization)

    • 为什么需要标准化? 当特征的量纲差异很大时(例如房价特征中 “面积” 以平方米为单位,“房龄” 以年为单位),模型会更关注量纲大的特征,导致拟合偏差。
  2. 正则化(Regularization):防止过拟合的 “刹车器”

    • 过拟合问题:当模型在训练数据上拟合得太好,可能会学习到数据中的噪声,导致在新数据上预测效果差。
四、应用场景:金融与电商的实战案例
  1. 金融领域:股价预测

    • 特征设计
      • 技术指标:市盈率(PE)、市净率(PB)、成交量等;
      • 市场因素:大盘指数、行业政策、宏观经济数据(如利率)。
    • 模型作用:通过历史数据拟合股价与特征的线性关系,辅助判断股价趋势(注意:实际金融市场复杂,线性模型需结合其他方法)。
  2. 电商领域:用户消费金额预估

    • 特征设计
      • 用户行为:历史消费频次、客单价、浏览商品数;
      • 商品属性:价格区间、促销力度、品类偏好。
    • 模型价值:用于个性化推荐(如高消费潜力用户推送高端商品)、营销预算分配(针对不同消费层级用户制定策略)。
五、简易实战:用 Python 实现线性回归(以房价预测为例)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, r2_score
# 配置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 1. 生成模拟数据(假设房价与面积、房龄的关系)
np.random.seed(42)
n_samples = 100
# 面积(平方米),房龄(年)
X = np.random.rand(n_samples, 2) * 100
X[:, 0] = X[:, 0]  # 面积范围:0-100
X[:, 1] = X[:, 1]  # 房龄范围:0-100
# 真实房价 = 5000*面积 + 1000*房龄 + 随机噪声(模拟真实场景)
y = 5000 * X[:, 0] + 1000 * X[:, 1] + np.random.randn(n_samples) * 10000# 2. 数据预处理:标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 3. 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 4. 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)# 5. 模型评估
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"均方误差(MSE):{mse:.2f}")
print(f"决定系数(R²):{r2:.2f}")  # R²越接近1,模型拟合越好# 6. 查看模型参数(权重和偏置)
print(f"特征权重:{model.coef_}")  # 对应面积和房龄的权重
print(f"偏置:{model.intercept_}")# 7. 可视化(以单特征为例,假设只看面积与房价的关系)
plt.scatter(X[:, 0], y, color='blue', label='真实数据')
# 用训练好的模型预测仅基于面积的房价(固定房龄为平均值)
X_single_feature = scaler.transform(np.array([[50, 0], [100, 0]]))  # 面积50和100,房龄0(仅示例)
y_single_pred = model.predict(X_single_feature)
# 反标准化面积特征(便于可视化)
X_original = scaler.inverse_transform(X_single_feature)
plt.plot(X_original[:, 0], y_single_pred, color='red', linewidth=2, label='线性回归预测')
plt.xlabel('房屋面积(平方米)')
plt.ylabel('房价(元)')
plt.title('线性回归:房屋面积与房价的关系')
plt.legend()
plt.show()

效果图

线性回归代码逐行解析

下面我将对之前提供的线性回归房价预测代码进行详细解析,帮助你理解每一步的作用和实现原理。

1. 导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, r2_score
  • numpy:用于生成和处理数组数据
  • pandas:用于数据处理和分析(本代码未实际使用,但在实际项目中常用)
  • matplotlib.pyplot:用于数据可视化
  • sklearn:机器学习工具包,包含:
    • LinearRegression:线性回归模型
    • train_test_split:划分训练集和测试集
    • StandardScaler:特征标准化工具
    • mean_squared_errorr2_score:模型评估指标
2. 生成模拟数据
# 1. 生成模拟数据(假设房价与面积、房龄的关系)
np.random.seed(42)  # 设置随机种子,确保结果可复现
n_samples = 100     # 样本数量# 生成特征矩阵X(面积和房龄)
X = np.random.rand(n_samples, 2) * 100  # 生成0-100之间的随机数
X[:, 0] = X[:, 0]  # 面积范围:0-100平方米
X[:, 1] = X[:, 1]  # 房龄范围:0-100年# 生成目标变量y(房价)
# 真实房价 = 5000*面积 + 1000*房龄 + 随机噪声
y = 5000 * X[:, 0] + 1000 * X[:, 1] + np.random.randn(n_samples) * 10000
  • 数据生成逻辑
    • 特征 X 包含两个维度:房屋面积和房龄
    • 房价计算公式:5000*面积 + 1000*房龄 + 随机噪声
    • 添加随机噪声模拟真实场景中的不确定性
  • np.random.seed(42),“42” 的特殊意义:在计算机科学中,“42” 是《银河系漫游指南》中 “生命、宇宙及一切的答案”,常被用作示例代码的默认种子,无实际数学含义。
  • 何时设置:应在生成随机数之前设置种子,通常放在代码开头或随机操作前。
  • 多线程场景:在多线程程序中,仅设置种子可能无法完全保证随机性一致,需结合其他线程安全措施。
  • np.random.seed(42) 是数据科学中保证实验可复现的重要工具,通过固定随机数生成的起点,让随机操作变得 “可控”。这在学术研究、工程开发中都是必不可少的步骤 —— 毕竟,能复现的结果才具有说服力!
3. 特征标准化
# 2. 数据预处理:标准化特征
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

  • 其中,μ 是均值,σ 是标准差

  • 为什么需要标准化?

    • 消除不同特征量纲差异的影响
    • 加速梯度下降算法的收敛速度
    • 某些模型(如 SVM、KNN)对特征尺度敏感
4. 划分训练集和测试集
# 3. 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42
)
  • 参数说明

    • test_size=0.2:将 20% 的数据作为测试集
    • random_state=42:固定随机种子,确保每次划分结果相同
  • 数据划分目的

    • 训练集:用于模型学习参数
    • 测试集:用于评估模型泛化能力
5. 训练线性回归模型
# 4. 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)
  • 线性回归模型数学表达式其中:

    • 是特征权重(对应面积和房龄)
    • b 是偏置项
  • 模型训练过程

    • 最小化均方误差(MSE)损失函数
    • 使用正规方程或梯度下降求解最优参数
6. 模型评估
# 5. 模型评估
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"均方误差(MSE):{mse:.2f}")
print(f"决定系数(R²):{r2:.2f}")
  • 评估指标解释
    • 均方误差(MSE)误差越小,模型预测越准确

    • 决定系数(R²)

7. 查看模型参数
# 6. 查看模型参数(权重和偏置)
print(f"特征权重:{model.coef_}")
print(f"偏置:{model.intercept_}")
  • 参数解释

    • model.coef_:特征权重数组,对应面积和房龄的影响系数
    • model.intercept_:偏置项,相当于线性方程的截距
  • 注意

    • 由于特征经过标准化,权重不能直接解释为 “面积每增加 1 平方米,房价增加 5000 元”
    • 需要对标准化后的数据进行反推才能得到原始尺度的解释
8. 可视化结果
# 7. 可视化(以单特征为例,假设只看面积与房价的关系)
plt.scatter(X[:, 0], y, color='blue', label='真实数据')# 用训练好的模型预测仅基于面积的房价(固定房龄为平均值)
X_single_feature = scaler.transform(np.array([[50, 0], [100, 0]]))
y_single_pred = model.predict(X_single_feature)# 反标准化面积特征(便于可视化)
X_original = scaler.inverse_transform(X_single_feature)# 绘制回归线
plt.plot(X_original[:, 0], y_single_pred, color='red', linewidth=2, label='线性回归预测')
plt.xlabel('房屋面积(平方米)')
plt.ylabel('房价(元)')
plt.title('线性回归:房屋面积与房价的关系')
plt.legend()
plt.show()
  • 可视化说明
    • 蓝色散点:原始数据点(面积 vs 房价)
    • 红色直线:线性回归模型预测线
    • 由于我们的模型包含两个特征(面积和房龄),这里固定房龄为 0,仅展示面积对房价的影响

关键概念总结

  1. 特征标准化:消除量纲差异,提高模型稳定性和训练效率
  2. 训练测试集划分:避免过拟合,评估模型泛化能力
  3. 模型评估指标:MSE 衡量预测误差,R² 表示模型解释能力
  4. 模型参数解读:权重反映特征对目标变量的影响程度

这个代码示例展示了线性回归的完整流程,从数据准备到模型训练和评估。在实际应用中,你可以用真实数据集替换模拟数据,并根据需要调整模型复杂度(如添加正则化)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912879.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912879.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912879.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kubesphere安装openelb

kubesphere安装openelb 1.安装openelb 2.修改配置文件 1.命令直接修改 $ kubectl edit configmap kube-proxy -n kube-system ipvs:strictARP: truemode: "ipvs"重启kube-proxy组件 $ kubectl rollout restart daemonset kube-proxy -n kube-system 2.通过界面去修…

数据库10:MySQL的数据类型与约束和属性设置,数据模式

一.数据类型 整数类型(integer types) 数据类型字节有符号范围无符号范围说明tinyint1-128 ~ 1270 ~ 255非常小的整数smallint2-32,768 ~ 32,7670 ~ 65,535小整数mediumint3-8,388,608 ~ 8,388,6070 ~ 16,777,215中等整数int4-2,147,483,648 ~ 2,147,4…

uniapp项目中node_modules\sass\sass.dart.js的体积过大怎么处理

用Node-Sass替代(如果适用):虽然Dart Sass是Sass的主要实现之一,但有时它可能会比Node-Sass占用更多的空间。如果你不需要Dart Sass特有的功能,可以考虑切换到Node-Sass(注意Node-Sass已停止维护&#xff0…

界面组件DevExpress WPF中文教程:Grid - 如何获取节点?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

Kalibr解毒填坑(一):相机标定失败

文章目录 📚简介🍀 解毒踩坑🚀 主点错误📚简介 相机内参标定通常涉及确定焦距(fx, fy)、主点(cx, cy)、畸变系数(径向和切向)等参数。Kalibr是一个开源的标定工具,支持多相机、IMU和联合标定,适用于复杂的传感器系统。 但kalibar标定相机内参受到数据和配置影…

Swift 的基础设计哲学是 “通过模块化组合实现安全与效率的平衡“,就像用标准化工业零件建造摩天大楼

一、基础模块:地基与钢结构(Basic Types & Collections) 比喻:积木与工具箱,决定建筑的稳定性和容量。场景:搭建程序的基础结构,如变量、数据类型、运算符。包含:基本语法、运算…

【RK3568+PG2L50H开发板实验例程】Linux部分/FPGA dma_memcpy_demo 读写案例

本原创文章由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处(www.meyesemi.com) 1.案例简介 案例功能描述:ARM端利用 PCIe总线对 FPGA的 DRAM执行读写操作。应用程序通过 ioctl函数触发 …

7.3实验部分

一、HDFS基础操作 以root用户登录,创建如下HDFS目录: /dw/yourname/input hadoop fs -mkdir -p /dw/zhanggengchen/input /dw/yourname/output hadoop fs -mkdir -p /dw/zhanggengchen/output 输出结果: [rootmaster hadoop-mapreduce]# ha…

[nett5: AddressedEnvelope]-源码解析

AddressedEnvelope AddressedEnvelope<M, A> 表示一个带有发送者和接收者地址的消息封装&#xff0c;常用于处理如 UDP 数据报这类含地址信息的通信场景。 public interface AddressedEnvelope<M, A extends SocketAddress> {// 实际的消息内容M content();// 消…

基于 Drone CI 实现前端自动化打包并集成 Spug 自动发布流程

前言&#xff1a;代码自动化部署目前使用的是Spug开源运维平台&#xff0c;通过docker直接部署该平台后&#xff0c;在前端自动化打包&#xff08;npm run build&#xff09;会遇见Node的版本问题&#xff0c;因为Spug容器使用的是Centos7&#xff0c;所以Node版本只支持V16&am…

【基础】Golang语言开发环境搭建(Linux主机)

目录 1. 下载并安装Go语言2. 配置环境变量3. 验证安装4. 配置Go模块5. 安装常用开发工具6. 配置IDE&#xff08;可选&#xff09;7. 第一个Go程序 在Linux主机上搭建Golang开发环境&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 下载并安装Go语言 首先从官网下载Go…

MySQL安全加固:使用mysql_secure_installation

在安装MySQL后&#xff0c;为了确保服务器的安全性&#xff0c;建议使用mysql_secure_installation工具对MySQL进行安全加固。这个工具可以帮助我们完成一些关键的安全配置&#xff0c;包括设置强密码、移除匿名用户、限制root用户的远程登录以及清理默认的测试数据库等。以下是…

设计模式之中介者模式 (Mediator Pattern) -聊天室-控制室

中介者模式用于减少多个对象之间的直接通信&#xff0c;而是通过一个中介对象来协调它们之间的交互。下面我用一个聊天室的例子来演示这个模式。 举个栗子&#xff1a;聊天室系统 在这个系统中&#xff0c;用户不直接相互发送消息&#xff0c;而是通过聊天室&#xff08;中介者…

SpringSecurity01

目录 一、权限控制 二、相关框架 1、shiro 2、springsecurity 三、springsecurity使用流程 1、搭建环境实现默认用户名和密码登录 2、使用数据库表中定义好的用户名和密码访问实现等值密码匹配 1&#xff09;sql文件 2)搭建jdbc或者mybatis或者mybatis-plus环境 3&am…

解决git clone报错:fatal unable to access xxx. Could not resolve host github.com

作者&#xff1a;唐叔在学习 专栏&#xff1a;问题百宝箱 文章目录 问题描述问题诊断网络连通性测试 解决方案1. 获取GitHub最新IP地址2. 修改系统hosts文件 验证解决方案常见问题解答总结 问题描述 当使用git clone命令克隆GitHub仓库时&#xff0c;可能会遇到如下错误&#…

魔术方法__call__

__call__ 是一个特殊方法&#xff08;也称为魔术方法&#xff09;&#xff0c;用于使一个类的实例能够像函数一样被调用。当定义了这个方法后&#xff0c;实例对象可以后接括号&#xff08;即 ()&#xff09;来触发调用&#xff0c;这会让实例表现得像函数一样。 ​使实例可调…

PHP中的异常处理与错误日志记录

在PHP编程实践中&#xff0c;异常处理是一项至关重要的技能&#xff0c;它能够帮助开发者识别和响应程序执行过程中发生的非预期事件。与此同时&#xff0c;错误日志记录是确保应用程序可靠性和稳定性的关键组成部分。本文将详细介绍如何在PHP中实现这两个方面的技术。 首先&a…

JS去除空格(数组内字符串)

1.JS中去除空格 去除这个数组中每个对象内部参数&#xff08;也就是属性值&#xff09;的空格&#xff0c;可以通过遍历数组&#xff0c;再遍历每个对象的属性&#xff0c;使用 trim() 方法来去除字符串首尾的空格。以下是具体实现代码&#xff1a; let data [{ designHours:…

【Spring篇01】:Bean的线程安全问题总结

文章目录 1. 核心问题&#xff1a;Spring 框架中的 Bean 是线程安全的吗&#xff1f;2. 最佳实践与解决方案禁止方案&#xff1a;滥用prototype作用域推荐方案&#xff08;按优先级排序&#xff09; 3. 生产环境中的典型案例Case 1&#xff1a;订单服务统计Case 2&#xff1a;用…

本地项目上传git

将您本地的项目代码上传到一个私有的、别人看不见的 GitHub 仓库&#xff0c;是进行云端协作&#xff08;如使用 Google Colab&#xff09;、版本控制和代码备份的最佳实践。这是一个非常重要的技能。 整个过程可以分为三个部分&#xff1a; 准备工作&#xff1a;在您的电脑上…