0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

多元线性回归的特点是什么

科技绿洲 来源:Python实用宝典 作者:Python实用宝典 2023-10-31 10:34 次阅读

何为多元线性回归?对比于前一天学习的线性回归,多元线性回归的特点是什么?

多元线性回归与简单线性回归一样,都是尝试通过使用一个方程式来适配数据,得出相应结果。不同的是,多元线性回归方程,适配的是两个及以上的特征(即X1、X2、...),而简单线性回归一般只有一个特征(X)。

另外,与简单线性回归相比,多元线性回归有一个显著的特点,即能拿到每个特征的权重,这样你能知道哪些因素对结果的影响最大。

请注意多元线性回归的以下4个前提:

1.线性:自变量和因变量的关系应该大致呈线性的。
2.呈现多元正态分布。
3.保持误差项的方差齐性(误差项方差必须等同)。
4.缺少多重共线性。

第一、二点比较好理解,第三、四点需要详细地讲一下:

第三点,保持误差项的方差齐性的意义 : 首先,明确什么叫误差项?误差项也可以叫随机误差项,一般包括:

1)模型中省略的对被解释变量(Y)不重要的影响因素 (解释变量(X));
2)解释变量(X)和被解释变量(Y)的观测误差;
3)经济系统中无法控制、不易度量的随机因素。

再确定什么叫 方差齐性 :顾名思义,方差相等。与什么东西的方差呢?这里需要引入残差的概念:残差,即预测值和真实值之间的差值。而方差齐性,指的就是满足随机分布的残差,如下图所示:

图片

如何判断数据是否满足方差齐性呢?精确的判断是很难做到的,我们可以通过上图绘制X值与残差的关系来大致估计,也可以用一个巧妙的方法: 对残差做简单线性回归,如果得到的直线大致平行于X轴,则说明满足方差齐性

这种观察自变量与残差之间是否存在线性关系(BP法)或非线性关系(White检验)是较为常用的两种方差齐性检验的方法。

第四点,缺少多重共线性的意义 :根据回归分析的结果,一般而言我们能发现自变量X1、X2、... 等因素对Y的影响。但是存在一种情况:如果各个自变量x之间有很强的线性关系,就无法固定其他变量,也就找不到x和y之间真实的关系了,这就叫做多重共线性。

有多种方法可以检测多重共线性,较常使用的是回归分析中的VIF值(方差膨胀因子),VIF值越大,多重共线性越严重。VIF怎么计算? VIF=1/(1-R^2) , 其中R^2是样本可决系数。样本可决系数怎么计算?答案是通过残差,这里有详细的计算方法:

图片

一般认为VIF大于10时(严格是5),代表模型存在严重的共线性问题。

讲了这么多理论知识,大家可能觉得比较枯燥,但是实际上本文最难的也就是这些理论知识,希望大家能好好消化。下面正式开始实操部分。

1.准****备

开始之前,你要确保Pythonpip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

此外,推荐大家用VSCode编辑器,因为它有许多许多的优点:Python 编程的最好搭档—VSCode 详细指南

准备输入命令安装依赖,如果你没有VSCode编辑器,Windows环境下打开 Cmd (开始-运行-CMD),苹果系统环境下请打开 Terminal (command+空格输入Terminal),如果你用的是VSCode编辑器或Pycharm,可以直接在下方的Terminal中输入命令:

pip install pandas
pip install numpy
pip install matplotlib
pip install scikit-learn

本篇文章使用的50_Startups.csv文件,由研发开销、管理开销、市场开销、州和利润五列数据组成。

本文源代码和数据文件,可以关注Python实用宝典公众号,后台回复:**机器学习3 **下载

2.数据预处理

导入库

import pandas as pd
import numpy as np

导入数据集

最后一列利润为Y值,其他均为X值。

dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[:, :-1].values
Y = dataset.iloc[:, 4].values

将类别数据数字化

将“州”这一列数字化。

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
X[:, 3] = labelencoder.fit_transform(X[:, 3])
# 一共有3个州
onehotencoder = OneHotEncoder(categorical_features=[3])
X = onehotencoder.fit_transform(X).toarray()

躲避虚拟变量陷阱

原始数据如下:

图片

在我们对“州”这列变量进行数字化后,会在前面出现三列one_hot变量,每一列代表一个州。

图片

这就出现虚拟变量陷阱了,比如第一列我们能通过另外两列的值得到:如果2、3列为0,第1列肯定为1,如果2、3列存在不为0的值,则第1列肯定为1。

因此,这里第一列没有使用的必要。

X = X[: , 1:]

拆分数据集为训练集和测试集

from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)

3. 训练模型

与简单线性回归一样,使用LinearRegression即可实现多元线性回归(sklearn已经帮你处理好多元的情况)。

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)

4. 预测结果

一行搞定:

y_pred = regressor.predict(X_test)
print("real:", Y_test)
print("predict:", y_pred)

看看效果:

图片

画个图看看对比效果:

map_index = list(range(len(Y_test)))
plt.scatter(map_index, Y_test, color='red')
plt.plot(map_index, y_pred, color='blue')
plt.show()

图片

蓝色的线是预测值,红色的点是真实的值,可以看到预测效果还是不错的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87600
  • 线性
    +关注

    关注

    0

    文章

    188

    浏览量

    24973
  • 编辑器
    +关注

    关注

    1

    文章

    788

    浏览量

    30187
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466
收藏 人收藏

    评论

    相关推荐

    matlab回归分析总结

    1、多元线性回归2、多项式回归3、非线性回归4、逐步回归[hide][/hide]
    发表于 03-20 10:26

    线性回归的标准方程法使用

    线性回归-标准方程法示例(python原生实现)
    发表于 05-07 16:44

    线性回归定义

    线性回归与评价指标-2
    发表于 09-03 14:24

    生产应用中使用线性回归进行实际操练

    线性回归】生产应用中使用线性回归进行实际操练
    发表于 05-08 07:45

    Tensorflow的非线性回归

    Tensorflow 非线性回归
    发表于 05-12 10:19

    机器学习100天之多元线性回归

    机器学习100天-多元线性回归 [代码实现细节分析]
    发表于 05-12 15:06

    Multivariate Linear Regression多变量线性回归

    吴恩达机器学习-手写笔记三 - Multivariate Linear Regression 多变量线性回归
    发表于 06-11 17:02

    回归算法有哪些,常用回归算法(3种)详解

    损失函数: 其中,需要对所有训练样本的误差求和。根据输入变量 X 的数量和类型,可划分出多种线性回归类型:简单线性回归(一个输入变量,一个输出变量),
    发表于 07-28 14:36

    TensorFlow实现简单线性回归

    本小节直接从 TensorFlow contrib 数据集加载数据。使用随机梯度下降优化器优化单个训练样本的系数。实现简单线性回归的具体做法导入需要的所有软件包: 在神经网络中,所有的输入都线性增加
    发表于 08-11 19:34

    TensorFlow实现多元线性回归(超详细)

    在 TensorFlow 实现简单线性回归的基础上,可通过在权重和占位符的声明中稍作修改来对相同的数据进行多元线性回归。在
    发表于 08-11 19:35

    如何用C语言实现一个简单的一元线性回归算法

    今天我们用C语言实现一个简单的线性回归算法;在代码前面我们在回顾一下线性回归线性回归
    发表于 07-20 06:34

    IWDG的特点是什么?怎么使用?

    stm32独立看门狗和窗口看门狗区别是什么?IWDG的特点是什么?怎么使用?WWDG的特点是什么?怎么使用?
    发表于 09-18 06:35

    使用PyMC3包实现贝叶斯线性回归

    1、如何使用PyMC3包实现贝叶斯线性回归  PyMC3(现在简称为PyMC)是一个贝叶斯建模包,它使数据科学家能够轻松地进行贝叶斯推断。  PyMC3采用马尔可夫链蒙特卡罗(MCMC)方法计算后验
    发表于 10-08 15:59

    基于多元线性回归的阻性和容性电流分解

    基于多元线性回归的阻性和容性电流分解_韩永森
    发表于 01-07 17:16 2次下载

    基于Weierstrass逼近定理在非线性回归模型中应用

    基于Weierstrass逼近定理,阐释了将一般非线性回归模型近似为多项式模型来处理的数学原理,从而引入了把多元线性回归分析转化为多元线性
    发表于 01-12 09:59 0次下载