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

机器学习入门——线性回归

线性回归

    • 什么是线性回归?
      • 回归分析:
      • 线性回归:
    • 回归问题求解
    • 单因子线性回归
      • 简单实例
      • 评估模型表现
      • 可视化模型展示
    • 多因子线性回归

什么是线性回归?

回归分析:

根据数据,确定两种或两种以上变量间相互依赖的定量关系
在这里插入图片描述

线性回归:

回归分析中,变量与因变量存在线性关系
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

回归问题求解

在这里插入图片描述
注解:为了找合适的a和b,问题被替换成了寻找预测值和实际值之间的距离最小化。

损失函数:
在这里插入图片描述
注解:为什么要除以2m,是为了我们后面方便求解,因为我们要进行求导。这里除以2m后对最后的ab求解没有影响。

梯度下降法:
在这里插入图片描述
在这里插入图片描述

单因子线性回归

简单实例

简单说就是为了求y=ax+b中的a和b

假设我们有一份数据如下:
在这里插入图片描述
我们先看一下这些数据的分布:

from matplotlib import pyplot as plt
# 输入数据
x = [1,2,3,4,5,6,7,8,9,10]
y = [7,9,11,13,15,17,19,21,23,25]

# 生成一个画布,设置坐标轴的比例
plt.figure(figsize=(5,5))

# 创建散点图
plt.scatter(x,y)

# 显示图形
plt.show()

在这里插入图片描述

要对上述数据使用线性回归算法进行拟合,需要用到scikit-learn库。

scikit-learn是一个适用于python语言的、专门针对于机器学习应用的算法库。

使用sklearn.linear_model库中的线性回归算法进行拟合的示例代码:

from sklearn.linear_model import LinearRegression
import numpy as np

# 输入数据
x = [1,2,3,4,5,6,7,8,9,10]
y = [7, 9, 11, 13, 15, 17, 19, 21, 23, 25]

# 把x从一维转为二维
x = np.array(x)
x = x.reshape(-1,1)

# 建立线性回归模型
model = LinearRegression()

# 训练模型
model.fit(x, y)

# 获得y=ax+b中的a和b
a=model.coef_
b=model.intercept_
print(a)
print(b)

# 预测
x_new = [[11], [12], [13], [14], [15]]
y_pred = model.predict(x_new)

# 输出预测结果
print(y_pred)

注解:
在这个例子中,输入数据 x 和输出数据 y 分别被定义为两个列表。
然后,需要把x从一维转为二维,让x 中的每个元素是一个列表,包含一个自变量的值。 这是为了满足 LinearRegression() 函数的输入要求。否则会报错。
我们首先使用 LinearRegression() 函数初始化一个线性回归模型对象 model。
然后,我们使用模型对象的 fit() 方法训练模型,输入参数为 x 和 y。
然后,model.coef_获取系数,model.intercept_获取截距
最后,我们使用模型对象的 predict() 方法预测 x_new 中对应的因变量值 y_pred。
最后,我们输出预测结果。

评估模型表现

在上述代码的基础上添加如下代码:

from sklearn.metrics import mean_squared_error, r2_score

# 计算预测值与真实值之间的MSE
mse = mean_squared_error(y, model.predict(x))

# 计算决定系数R2
r2 = r2_score(y, model.predict(x))

# 输出MSE和R2
print("MSE:", mse)
print("R2:", r2)

注解:
我们使用 mean_squared_error 函数计算预测值与真实值之间的均方误差(MSE)。
我们使用 r2_score 函数计算模型的决定系数(R2)。
最后,我们输出计算得到的MSE和R2。

MSE越小越好,R2分数越接近1越好

可视化模型展示

在上述代码的基础上添加如下代码:

import matplotlib.pyplot as plt

# 绘制数据散点图
plt.scatter(x, y, color='black')

# 绘制拟合直线
plt.plot(x, model.predict(x), color='blue', linewidth=3)

# 添加图例
plt.legend(['Linear Regression Model', 'Data'])

# 添加坐标轴标签
plt.xlabel('X')
plt.ylabel('Y')

# 添加标题
plt.title('Linear Regression Model')

# 显示图形
plt.show()

注解:
我们使用 scatter 函数绘制数据散点图,其中 x 和 y 分别是自变量和因变量。
我们使用 plot 函数绘制线性回归模型的拟合直线,其中 x 和 model.predict(x) 分别表示自变量和对应的因变量预测值。
我们使用 legend 函数添加图例,其中 [‘Linear Regression Model’, ‘Data’] 分别表示拟合直线和数据散点图的标签。
我们使用 xlabel 和 ylabel 函数添加坐标轴标签。
我们使用 title 函数添加标题。
最后,我们使用 show 函数显示图形。
在这里插入图片描述

多因子线性回归

相关文章:

  • 【拳打蓝桥杯】最基础的数组你真的掌握了吗?
  • π-Day快乐:Python可视化π
  • 【GPT-4】GPT-4 相关内容总结
  • 【计算机组成原理 - 第一章】计算机系统概论(完结)
  • MySQL:JDBC
  • 初入了解——什么是VUE
  • Hadoop入门常见面试题与集群时间同步操作
  • 博客系统(界面设计)
  • 【数据结构】链表OJ(二)
  • CF大陆斗C战士(三)
  • Vue3之父子组件通过事件通信
  • linux目录/usr/lib/systemd/system目录详解
  • ElasticSearch - 分片内部原理之动态更新索引、近实时搜索、持久化变更、段合并
  • 蓝桥杯刷题冲刺 | 倒计时26天
  • 2023年3月计算机二级公共基础考前预测
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • django开发-定时任务的使用
  • ES6语法详解(一)
  • ES学习笔记(12)--Symbol
  • Github访问慢解决办法
  • HTTP 简介
  • JavaScript设计模式系列一:工厂模式
  • JavaScript实现分页效果
  • mongo索引构建
  • react-native 安卓真机环境搭建
  • vue:响应原理
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 仿天猫超市收藏抛物线动画工具库
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 聊聊flink的TableFactory
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • !!Dom4j 学习笔记
  • $.ajax,axios,fetch三种ajax请求的区别
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (二)斐波那契Fabonacci函数
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十五)使用Nexus创建Maven私服
  • (原)本想说脏话,奈何已放下
  • (转)用.Net的File控件上传文件的解决方案
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .gitignore文件使用
  • .net core使用ef 6
  • .net 无限分类
  • .net 验证控件和javaScript的冲突问题
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • @Autowired多个相同类型bean装配问题
  • @Bean有哪些属性