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

记录一下线性回归的学习

一、线性回归的定义

        线性回归(Linear regression)用来建模和分析变量之间线性关系,适用于预测连续性目标变量。它通过拟合成一条线来描述自变量和因变量之间的线性关系。自变量可以有多个,只有一个自变量的时候,成为单变量回归,自变量多于一个时,成为多元回归。

通用的公式为:

y = \beta_{0} + \beta _{1}x_{1} + \beta _{2}x_{2} + \beta _{3}x_{3} + \cdots + \beta _{n}x_{n}

其中 y 表示因变量,x 表示自变量,下标 n 是表示有几个因变量。\beta_{0}\cdots \beta_{n} 表示回归系数,\beta _{0}表示拟合出来的线的截距。

使用线性回归来预测目标变量的前提是,因变量和自变量呈现线性的关系,如下图:

二、代码实现 

1、使用到的库:

sklearn:是一个用于机器学习的python开源库,具有丰富的机器学习算法和工具,防范用于数据挖掘、数据分析、测试建模等领域。

(1)算法方面:涵盖了分类、回归、聚类、降维等多种机器学习。

(2)提供一些列数据预处理工具。

(3)多种评估指标和模型选择方法。

(4)使用joblib或者pickle模块可以将训练好的模型参数保存下来。

matplotlib:一个功能强大的python绘图库,主要用于数据的可视化。

2、代码实现:

(1)单变量回归,只有一个自变量

import pickle
from matplotlib import pyplot as plt
from skimage.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import numpy as np# 随机生成数据
def load_data():x_data = np.random.rand(100, 1)y = x_data * 5 + 0.5 * np.random.randn(100, 1)x_train, x_val, y_train, y_val = train_test_split(x_data, y, test_size=0.2)return x_train, x_val, y_train, y_val# 绘制预测结果与真是标签的散点图
def draw_result(y_test, y_pred):plt.scatter(y_test, y_pred, color='blue')plt.plot([min(y_pred), max(y_pred)], [min(y_pred), max(y_pred)], linestyle='--', color='red', linewidth=2,label='Regression Line')plt.title('Actual vs Predicted Profit')plt.xlabel('Actual Profit')plt.ylabel('Predicted Profit')plt.show()def train(x_train, x_test, y_train, y_test):model = LinearRegression()# 训练模型model.fit(x_train, y_train)# 对验证集测试y_pred = model.predict(x_test)mse = mean_squared_error(y_test, y_pred)print(f'误差为:{mse}')# 绘制结果的散点图draw_result(y_test, y_pred)# 保存模型with open('model.pkl', 'wb') as f_model:pickle.dump(model, f_model)# 使用训练出来的模型推理新数据
def predict(x_test, y_test):with open('model.pkl', 'rb') as file:model_best = pickle.load(file)pred = model_best.predict(x_test)draw_result(y_test, pred)return predif __name__ == '__main__':# 生成数据x_train, x_val, y_train, y_val = load_data()# 训练train(x_train, x_val, y_train, y_val)# 生成测试数据x_test_data = np.random.rand(10,1)y_test_data = x_test_data * 5 + 0.5 * np.random.randn(10, 1)# 推理predict_result = predict(x_test_data, y_test_data)

(2)多元回归,只需要将x的数据修改成多元的就可以了,其他的都是一样的。

import pickle
from matplotlib import pyplot as plt
from skimage.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import numpy as np# 随机生成数据
def load_data():x_data = np.random.rand(100, 2)y = 5 * x_data[:, 0:1] + 3 * x_data[:, 1:2] + 0.5 * np.random.randn(100, 1)x_train, x_val, y_train, y_val = train_test_split(x_data, y, test_size=0.2)return x_train, x_val, y_train, y_val# 绘制预测结果与真是标签的散点图
def draw_result(y_test, y_pred):plt.scatter(y_test, y_pred, color='blue')plt.plot([min(y_pred), max(y_pred)], [min(y_pred), max(y_pred)], linestyle='--', color='red', linewidth=2,label='Regression Line')plt.title('Actual vs Predicted Profit')plt.xlabel('Actual Profit')plt.ylabel('Predicted Profit')plt.show()def train(x_train, x_test, y_train, y_test):model = LinearRegression()# 训练模型model.fit(x_train, y_train)# 对验证集测试y_pred = model.predict(x_test)mse = mean_squared_error(y_test, y_pred)print(f'误差为:{mse}')print(y_pred.shape)print(y_test.shape)# 绘制结果的散点图draw_result(y_test, y_pred)# 保存模型with open('model.pkl', 'wb') as f_model:pickle.dump(model, f_model)# 使用训练出来的模型推理新数据
def predict(x_test, y_test):with open('model.pkl', 'rb') as file:model_best = pickle.load(file)pred = model_best.predict(x_test)draw_result(y_test, pred)return predif __name__ == '__main__':# 生成数据x_train, x_val, y_train, y_val = load_data()# 训练train(x_train, x_val, y_train, y_val)# 生成测试数据x_test_data = np.random.rand(10,2)y_test_data = x_test_data[:, 0:1] * 5 + x_test_data[:, 1:2] * 3 + 0.5 * np.random.randn(10, 1)# 推理predict_result = predict(x_test_data, y_test_data)

http://www.xdnf.cn/news/1454.html

相关文章:

  • 极狐GitLab 如何撤销变更?
  • 数据结构线性表的顺序存储结构
  • c语言之杂识
  • 璞华ChatBI闪耀2025数博会:对话式数据分析引领数智化转型新范式
  • BM1684X+FPGA+GMSL视觉解决方案:驱动工业智能化升级的核心引擎
  • 卷积神经网络常用结构
  • 第一章:基于Docker环境快速搭建LangChain框架的智能对话系统:从langchain环境搭建到多轮对话代码实现(大语言模型加载)
  • 读书笔记:淘宝十年产品与技术演进史
  • 第一篇:Django简介
  • java将pdf转换成word
  • 中兴云电脑W102D_晶晨S905X2_2+16G_mt7661无线_安卓9.0_线刷固件包
  • 学习设计模式《五》——工厂方法模式
  • JavaScript-防抖和节流
  • 工业相机中CCM使能参数-色彩校正矩阵
  • 【SpringCloud】Gateway
  • JavaFX 第一篇 Hello World
  • 《让机器人读懂你的心:情感分析技术融合奥秘》
  • Java 中实现 Oracle 分页查询
  • CS144 Lab3 实战记录:TCP 发送器实现
  • [蓝桥杯 2025 省 Python B] 异或和
  • 2025-04-23 Python深度学习3——Tensor
  • 设计模式之策略模式
  • 富文本编辑器实现
  • C++ STL 容器简介(蓝桥杯适用精简版)
  • 解决报错:this[kHandle] = new _Hash(algorithm, xofLen);
  • Java面试题汇总
  • CSS-跟随图片变化的背景色
  • 【Java学习笔记】选择结构
  • 4月23日作业
  • 聊聊自动化用例的维护