首页 > 其他分享 >【scikit-learn基础】--『监督学习』之 线性回归

【scikit-learn基础】--『监督学习』之 线性回归

时间:2023-12-25 10:11:57浏览次数:27  
标签:样本 训练 -- 模型 scikit train learn 线性 reg

线性回归是一种用于连续型分布预测的机器学习算法。
其基本思想是通过拟合一个线性函数来最小化样本数据和预测函数之间的误差。

1. 概述

常见的线性回归模型就是:\(f(x) = w_0+w_1x_1+w_2x_2+...+w_nx_n\)这样的一个函数。
其中

  • \((w_1,w_2,...w_n)\)是模型的系数向量
  • \(w_0\)是截距
  • \((x_1, x_2,...,x_n)\)是样本数据(n是样本数据的维度

简单来说,线性回归模型的训练就是通过样本数据来确定系数向量\((w_1,w_2,...w_n)\)和截距\(w_0\)的具体数值。
然后可以使用模型\(f(x)\)来预测新的样本数据。

2. 创建样本数据

首先,用scikit-learn中的自带的函数,就可以创建出适用于线性回归场景的样本数据。

from sklearn.datasets import make_regression
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 1)

X, y = make_regression(n_samples=100, n_features=1, noise=10)
ax.scatter(X[:, 0], y, marker="o")
ax.set_title("样本数据")

plt.show()

通过 make_regression 函数可以帮助我们创建任意的回归样本数据。
image.png
具体使用可以参考之前的文章:TODO

3. 模型训练

训练线性回归模型,一般使用最小二乘法,而scikit-learnlinear_model模块中,
已经封装好了最小二乘法的训练算法。

首先,根据上面的样本数据,划分训练集和测试集。

from sklearn.model_selection import train_test_split

# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)

上面的代码按照9:1的比例划分了训练集测试集

然后,用基于最小二乘法的线性模型来训练数据。

from sklearn.linear_model import LinearRegression

# 初始化最小二乘法线性模型
reg = LinearRegression()
# 训练模型
reg.fit(X_train, y_train)

print("模型的系数向量:", reg.coef_)
print("模型的系数截距:", reg.intercept_)

# 运行结果:
模型的系数向量: [99.59241352]
模型的系数截距: 0.6889080586801999

reg.coef_就相当于前面的\((w_1,w_2,...w_n)\)
reg.intercept_就相当于前面的 \(w_0\)

这里的样本数据为了方便绘图,只有一个维度。
最后,我们把线性模型训练集测试集都绘制出来看看效果。

fig, ax = plt.subplots(1, 1)

# 训练集
ax.scatter(X_train[:, 0], y_train, marker="o", c="g")
# 测试集
ax.scatter(X_test[:, 0], y_test, marker="*", c="r")

# 线性模型
reg_x = np.array([-3, 3])
reg_y = reg.coef_ * reg_x + reg.intercept_
ax.plot(reg_x, reg_y, color="b")

plt.show()

image.png
上图中,蓝色的直线是在训练集上训练出来的线性模型
绿色的圆点是训练集;红色的五角星是测试集

从图中可以看出,训练的效果还不错。

4. 总结

线性回归是一种常见的预测模型,可以用在

  1. 预测连续值:比如根据房屋面积和价格的关系预测房价,根据油耗和车辆重量之间的关系预测油耗等等。
  2. 判断因果关系:比如药物剂量和血压之间的关系,或者产品价格和销售量之间的关系

它的主要优势有简单易理解(模型简单直观,易于理解和解释),
易于实施(各种编程语言中都有现成的库和函数可以方便地实现和应用),
还有稳定性高(对于训练数据的小变化相对稳定,能够提供较为准确的结果)。

不过,线性回归模型需要基于一些假设,如误差项的独立性、同方差性等,如果这些假设不满足,模型可能无法得到准确的结果;
其次,对于一些非线性关系的数据表现可能不佳;
而且,对异常值敏感,如果数据中存在异常值,线性回归的结果可能会受到较大影响,模型训练前最好先清洗和处理异常值。

标签:样本,训练,--,模型,scikit,train,learn,线性,reg
From: https://www.cnblogs.com/wang_yb/p/17925455.html

相关文章

  • /opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: 找不到 -lz
    我用的cmake命令是:target_link_libraries(${MyProjectName}-L/usr/lib64/mysql-lmysqlclient-lpthread-lz-lm-lssl-lcrypto-ldl) 将${MyProjectName}这个目标(可执行文件或库文件)链接到以下的库文件:/usr/lib64/mysql/libmysqlclient.so/usr/lib64/libpthread.so/usr/l......
  • ({ a: 1, b: 2 }).toString(),为什么输出的是[object Object]?
    在JavaScript中,每个对象都包含一个内部属性[[Class]],表示该对象的类型。这个属性是由JavaScript引擎内部自动设置的,并且不能直接访问。当你调用对象的toString方法时,JavaScript引擎会通过这个属性来确定对象的类型,并将其作为字符串返回。对于大多数JavaScript对象来说,......
  • vue3 + Ant Design 实现双表头表格(横向表头+纵向表头)
     一、要实现的效果(纵向固定表头的表格,横向表头数量动态化)二、这是后台返回的数据格式(以企业为数组,每个企业里有个站点数组pointFactors) 三、代码实现步骤 (1)定义纵向固定表头1//纵向表头数组tableColumns2consttableColumns=ref([3{4label:"日(24......
  • LeetCode-17 电话号码的字母组合
    LeetCode-17电话号码的字母组合给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。示例1:输入:digits="23"输出:["ad","ae","af","bd","be","bf","cd","ce&qu......
  • 【飞凌 OK113i-C 全志T113-i开发板】视频编解码测试
     前言本文测试OK113i-S开发板-视频编解码的功能OK113i-S开发板是支持视频的编解码的,下面是官方介绍的编解码功能T113-i是一种为多媒体解码平台设计的高级应用处理器。T113-i集成了64位玄铁C906RISC-VCPU,双核Cortex-A7CPU和HiFi4DSP,提供高效的计算能力。主要特性支......
  • 协议栈——创建套接字
    前面几篇文章讲解的是应用程序使用Socket间接通知协议栈进行的连接,通信阶段,那么从现在开始讲解协议栈和网卡驱动的故事回顾上篇文章,我们从第一阶段创建套接字,协议栈返回描述符讲起~~~协议栈结构首先来看下协议栈的大致结构:应用程序代表客户端,浏览器,电子邮件等程序,这些程序发......
  • SQL的left()函数
    LEFT()是SQL中常用的字符串函数之一,用于从字符串的左侧获取指定数量的字符。以下是关于LEFT()函数的详细介绍:使用场景:截取字符串中的前几个字符:当你需要从字符串的左侧获取一定数量的字符时,可以使用LEFT()函数。处理固定长度的字符串:当数据表中的数据长度是固定的,并且你......
  • 在Python中实现ESG(环境、社会、治理)因子的交易策略,我们可以使用pandas库来读取数据,并
    在Python中实现ESG(环境、社会、治理)因子的交易策略,我们可以使用pandas库来读取数据,并使用AlphaVantage提供的API来获取股票价格数据²。以下是一个简单的代码示例:importpandasaspdimportrequests#获取股票价格数据response=requests.get(alpha_vantage_url)data=res......
  • HMM隐马尔可夫模型
    隐马尔可夫模型文章目录隐马尔可夫模型定义HMM模型的应用Problem1直接计算前向计算后向计算Problem2定义隐马尔科夫模型(HiddenMarkovModel,HMM)是建模序列数据的图模型在HMM模型存在隐藏状态,以及观测状态设为所有隐藏状态的集合,为所有观测状态的集合,即设存在长度为的序列,......
  • 成为AI大模型工程师/产品经理,成就丰盛人生
    500多名学员正在参加近屿智能OJAC举办的第五期AIGC星辰大海:大模型工程师和产品专家深度训练营。AIGC星辰大海:大模型工程师和产品专家深度训练营秉持“实战导向,项目驱动”的教学理念,从预训练、数据清洗、数据标注、微调大模型到增量预训练以及开发软硬件AI产品,多位AI博士全程亲自指......