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

【机器学习】——线性回归(自我监督学习)

文章目录

    • 1. 线性回归的定义
    • 2. 线性回归的模型
    • 3. 线性回归的核心思想
    • 4. 线性回归的求解
    • 5. 线性回归的假设
    • 6. 模型评估
    • 7. 线性回归的优缺点
    • 8. 线性回归的扩展
    • 9. 线性回归的实际应用
    • 10. 示例代码(Python实现)

线性回归详细介绍

1. 线性回归的定义

线性回归(Linear Regression)是一种用于建立自变量和因变量之间线性关系的统计方法。它假设两个变量之间具有线性关系,并通过拟合一条直线来预测因变量的值。

线性回归分为两种形式:

简单线性回归:只有一个自变量。
多元线性回归:包含多个自变量。

2. 线性回归的模型

线性回归模型用一个线性方程来表示数据中的关系。其基本形式为:
在这里插入图片描述

其中:
y 是目标变量或因变量(输出)。
x1,x2,…,xn 是输入特征或自变量。
w0是偏置项(截距)。
w1,w2,…,wn是对应自变量的权重(回归系数)。
ϵ 是误差项(通常假设其服从正态分布,且期望值为零)。

3. 线性回归的核心思想

线性回归的核心思想是找到回归系数 w 和截距 w0​,使得预测的输出值与实际的输出值之间的差异最小。为了度量预测值与实际值的差异,通常使用**均方误差(MSE)**作为损失函数:
在这里插入图片描述
其中:
m 是样本数量。
yi 是第 iii 个样本的实际值。
yi​ 是第 iii 个样本的预测值。
通过最小化均方误差,可以找到最佳的回归系数 w和偏置项 w0​,即通过最小二乘法(Ordinary Least Squares, OLS)来实现。

4. 线性回归的求解

线性回归的最优解可以通过解析方法或迭代方法求解。

解析法:通过直接计算公式求解回归系数。
对于简单线性回归,回归系数 𝑤1和截距 𝑤0可以使用以下公式计算:
在这里插入图片描述
其中,xˉ 和 yˉ​ 是自变量和因变量的均值。
对于多元线性回归,最佳参数可以通过矩阵求解:
在这里插入图片描述
X 是设计矩阵(每一行是一个数据样本的输入特征向量)。
𝑦是目标值向量。
迭代法:常用的是梯度下降法,通过逐步调整参数来逼近最优解。其更新规则为:
在这里插入图片描述
其中 𝛼 是学习率。

5. 线性回归的假设

线性回归在使用过程中有以下假设:

线性关系:自变量和因变量之间存在线性关系。
误差项的独立性:数据点之间的误差项相互独立。
同方差性:误差项的方差是常数。
正态性:误差项服从正态分布。
这些假设决定了线性回归适用的场景。违反这些假设可能导致模型效果不佳。

6. 模型评估

线性回归模型可以通过以下指标来评估其性能:R平方(R^2) 用于衡量模型对数据的拟合程度,取值范围为 0 到 1。 R^2 越接近 1,表示模型越好。公式如下:
在这里插入图片描述
其中 𝑦ˉ 是实际输出的平均值。

均方误差(MSE):用于评估模型预测值与实际值之间的平均平方误差。
均方根误差(RMSE):MSE 的平方根,度量误差的大小,单位与因变量一致。

7. 线性回归的优缺点

优点:

简单、易于理解和实现。
可解释性强,系数可以直接反映变量的影响。
计算成本低,适用于大多数小规模或中等规模的数据集。
缺点:

仅适用于线性关系,不能有效处理复杂的非线性问题。
对异常值敏感,容易被离群点干扰。
依赖于假设(如线性性、同方差性、正态性等),如果假设不成立,模型表现可能很差。

8. 线性回归的扩展

线性回归有几种常见的扩展形式,适用于不同场景:

岭回归(Ridge Regression):通过加入正则化项,防止过拟合,特别是在高维数据下有效。
Lasso回归:另一种正则化方法,可以自动进行特征选择,适用于高维稀疏数据。
弹性网络(Elastic Net):结合了岭回归和Lasso回归的优点,适用于更复杂的数据结构。

9. 线性回归的实际应用

线性回归被广泛应用于多个领域:

经济学:预测价格、需求等。
医疗:预测病人的疾病发展或治疗效果。
工程:预测系统中的性能变化或故障发生的可能性。
市场分析:根据历史数据预测未来销售额。

10. 示例代码(Python实现)

以下是一个使用 Python 和 scikit-learn 实现简单线性回归的示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split# 生成示例数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([1.2, 1.9, 3.2, 3.9, 5.1])# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建线性回归模型
model = LinearRegression()# 训练模型
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 打印结果
print(f"预测值: {y_pred}")
print(f"模型系数: {model.coef_}")
print(f"截距: {model.intercept_}")# 可视化回归直线
plt.scatter(X, y, color='blue')
plt.plot(X, model.predict(X), color='red')
plt.xlabel('X')
plt.ylabel('y')
plt.title('线性回归示例')
plt.show()

总结
线性回归是监督学习中最基础的算法之一,适用于线性关系的回归任务。虽然简单易用,但在面对复杂非线性问题时,通常需要使用更加复杂的模型或对数据进行预处理。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 秒变 Vim 高手:必学的编辑技巧与隐藏功能大揭秘
  • 【设计模式】UML类图
  • Streamlit:使用 Python 快速开发 Web 应用
  • <<编码>> 第 16 章 存储器组织(4)--内存 示例电路
  • C++ ——日期类的实现和注释浅解
  • mysql性能优化-SQL 查询优化
  • 12年计算机408考研-计算机网络
  • 解密.bixi、.baxia勒索病毒:如何安全恢复被加密数据
  • 利用AI增强现实开发:基于CoreML的深度学习图像场景识别实战教程
  • 【深度学习】(1)--神经网络
  • 将成功请求的数据 放入apipost接口测试工具,发送给后端后,部分符号丢失
  • Arthas thread(查看当前JVM的线程堆栈信息)
  • Mastering Qt 番外 —— 添加源码调试
  • pg入门18—如何使用pg gis
  • Mybatis中sql数组为空判断
  • 自己简单写的 事件订阅机制
  • @jsonView过滤属性
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • Apache的80端口被占用以及访问时报错403
  • ES6系列(二)变量的解构赋值
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java小白进阶笔记(3)-初级面向对象
  • Laravel5.4 Queues队列学习
  • leetcode386. Lexicographical Numbers
  • nodejs:开发并发布一个nodejs包
  • PHP 7 修改了什么呢 -- 2
  • 闭包--闭包作用之保存(一)
  • 反思总结然后整装待发
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 技术:超级实用的电脑小技巧
  • 如何编写一个可升级的智能合约
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • scrapy中间件源码分析及常用中间件大全
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #100天计划# 2013年9月29日
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (1)Jupyter Notebook 下载及安装
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)docker:Dockerfile构建容器运行jar包
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)appium-desktop定位元素原理
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .NET Core WebAPI中封装Swagger配置
  • .Net IOC框架入门之一 Unity
  • .NET MVC第五章、模型绑定获取表单数据