多元线性回归

1、多元线性回归方程和简单线性回归方程类似,不同的是由于因变量个数的增加,求取参数的个数也相应增加,推导和求取过程也不一样。、

y=β0+βx12x2+ ... +βpxp

对于b0、b1、…、bn的推导和求取过程,引用一个第三方库进行计算

2、应用多元线性回归的几个限定条件

(1)Linearity 线性
(2)Homoscedasticity 同方差性
(3)Multivariate normality 多元正态分布
(4)Independence od errors 误差独立
(5)Lack of multicollinearity 无多重共线性

3、建立多元线性回归模型的方法:

1、All-in
(1)已经知道很多自变量的信息,这些自变量都影响结果
(2)“老板”告诉你这些自变量,用这些自变量建立模型,必须遵守
(3)反向淘汰的第一步
2、Backward Elimination 反向淘汰(应用最多)
(1)对每个模型的自变量来说,对模型有影响;定义影响是否显著,显著性门槛0.05,决定对自变量的取舍
(2)采用所有的自变量来对模型做拟合,得到一个拟合好的模型
(3)对于模型的每个自变量都计算P值,取最高的P值(影响),如果大于门槛则进入第四步,否则算法结束,模型拟合好
(4)最高的P值,对应的自变量从模型中去除
(5)去除一个自变量后的,剩余自变量进行重新拟合。诗第三步到第五步的循环;直到剩下的自变量都比门槛小,对模型有充分的影响,则模型拟合好
3、Forward Selection 顺向选择
(1)选择显著性的门槛0.05,一个新的变量对模型有多大的影响
(2)进行多个简单的线性回归,对每个简单线性回归都可以计算P值,选择最低的P值(这个自变量对将要拟合的模型影响最大,保留自变量)
(3)剩下的自变量中,加上哪个会给我们带来最小的P值
(4)加入新P值比门槛小,则重新回到第三步。直到剩下的P值大于门槛值,此时剩下的变量对模型的影响不显著,则可以不采纳
4、Bidirectional Elimination 双向淘汰
(1)选择两个显著性的门槛,一个旧的变量是否应该被剔除,和一个新的是否应该被采纳
(2)进行顺向选择的过程,决定是否采纳新的自变量
(3)进行反向淘汰,采纳新的变量后,则可能剔除旧变量
(4)在反向淘汰和顺向选择中进行循环,直到旧的门槛出不去,新的门槛进不来,则模型拟合好
5、Score Comparison 信息量比较(维度自变量过大时,计算量大)
(1)赤池信息量准则(打分系统)
(2)取任意多个自变量,都可以对多元模型进行拟合,自己个数有多少,则有多少模型。2^n-1
(3)对模型注意打分,选择打分最高的模型
其中2、3、4,Stepwise Regression逐步回归,算法类似;实际应用顺序可能不同

4、举例:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 3] = labelencoder_X.fit_transform(X[:, 3])#对分类数据处理的列数
onehotencoder = OneHotEncoder(categorical_features = [3])
X = onehotencoder.fit_transform(X).toarray() #前三列中去掉一列
X = X[:, 1:]#去除掉第0列 from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0) #创建新的回归器,并且用训练集拟合
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()#回归器,括号中不需要对参数进行赋值
regressor.fit(X_train, y_train) #拟合好的回归器,运用到训练集上,用regressor预测测试集的创业公司的营业额为多少
y_pred = regressor.predict(X_test) #Backward Elimination决定哪些自变量对因变量影响大,哪些可以剔除
import statsmodels.formula.api as sm
#给向量加上一列或一行用append:arr 加上新的矩阵;values 要加的矩阵;axis 为arr加上行或列,axis=0加行数、axis=1加列数
#arr = np.ones((40, 1))四十行一列的矩阵
X_train = np.append(arr = np.ones((40, 1)).astype(int), values = X_train, axis = 1)#对训练集进行转变
#进行反向淘汰
X_opt = X_train [:, [0, 1, 2, 3, 4, 5]] #X_opt包含最佳的自变量选择,X_opt设定为所有的自变量
#拟合多维线性回归器
regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()
regressor_OLS.summary()#通过结果显示,剔除x2,及第二列
X_opt = X_train [:, [0, 1, 3, 4, 5]]
regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()
regressor_OLS.summary()
X_opt = X_train [:, [0, 3, 4, 5]]
regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()
regressor_OLS.summary()
X_opt = X_train [:, [0, 3, 5]]
regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()
regressor_OLS.summary()
X_opt = X_train [:, [0, 3]]
regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()
regressor_OLS.summary()

Python----多元线性回归的更多相关文章

  1. day-12 python实现简单线性回归和多元线性回归算法

    1.问题引入  在统计学中,线性回归是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数的线性组合.一个带有一个自变 ...

  2. 梯度下降法的python代码实现(多元线性回归)

    梯度下降法的python代码实现(多元线性回归最小化损失函数) 1.梯度下降法主要用来最小化损失函数,是一种比较常用的最优化方法,其具体包含了以下两种不同的方式:批量梯度下降法(沿着梯度变化最快的方向 ...

  3. 多元线性回归算法的python底层代码编写实现

    1.对于多元线性回归算法,它对于数据集具有较好的可解释性,我们可以对比不过特征参数的输出系数的大小来判断它对数据的影响权重,进而对其中隐含的参数进行扩展和收集,提高整体训练数据的准确性. 2.多元回归 ...

  4. 多元线性回归算法python实现(非常经典)

    对于多元线性回归算法,它对于数据集具有较好的可解释性,我们可以对比不过特征参数的输出系数的大小来判断它对数据的影响权重,进而对其中隐含的参数进行扩展和收集,提高整体训练数据的准确性.整体实现代码如下所 ...

  5. machine learning 之 多元线性回归

    整理自Andrew Ng的machine learning课程 week2. 目录: 多元线性回归 Multivariates linear regression /MLR Gradient desc ...

  6. 【TensorFlow篇】--Tensorflow框架初始,实现机器学习中多元线性回归

    一.前述 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T ...

  7. 机器学习经典算法具体解释及Python实现--线性回归(Linear Regression)算法

    (一)认识回归 回归是统计学中最有力的工具之中的一个. 机器学习监督学习算法分为分类算法和回归算法两种,事实上就是依据类别标签分布类型为离散型.连续性而定义的. 顾名思义.分类算法用于离散型分布预測, ...

  8. 100天搞定机器学习|Day3多元线性回归

    前情回顾 [第二天100天搞定机器学习|Day2简单线性回归分析][1],我们学习了简单线性回归分析,这个模型非常简单,很容易理解.实现方式是sklearn中的LinearRegression,我们也 ...

  9. R语言解读多元线性回归模型

    转载:http://blog.fens.me/r-multi-linear-regression/ 前言 本文接上一篇R语言解读一元线性回归模型.在许多生活和工作的实际问题中,影响因变量的因素可能不止 ...

  10. coursera机器学习笔记-多元线性回归,normal equation

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

随机推荐

  1. 聊聊Mysql索引和redis跳表

    摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...

  2. 【Caffe篇】--Caffe从入门到初始及各层介绍

    一.前述 Caffe,全称Convolutional Architecture for Fast Feature Embedding.是一种常用的深度学习框架,主要应用在视频.图像处理方面的应用上.c ...

  3. 我的那些年(9)~我来团队了,Mvc兴起了

    回到目录 我的那些年(9)~我来团队了,Mvc兴起了 在一次后出办事后直接去面试了 面试就是答卷子 六里桥一个好地址 搬回老家了 在老婆的建议下学驾照了 拿到大专毕业证了 买车了 愉一切可以愉的时间学 ...

  4. 补习系列(17)-springboot mongodb 内嵌数据库

    目录 简介 一.使用 flapdoodle.embed.mongo A. 引入依赖 B. 准备测试类 C. 完善配置 D. 启动测试 细节 二.使用Fongo A. 引入框架 B. 准备测试类 C.业 ...

  5. 关于获取资源文件,Class.getResource和ClassLoader.getResource的区别

    原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2019-02-22/29.html 作者:夜月归途 出处:http://www.guitu ...

  6. 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

    前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...

  7. 如何在IIS上发布网站

    本片博客记录一下怎么用IIS发布一个网站,以我自己电脑上一个已经开发完成的网站为例: 1.打开项目 这是我电脑上的一个项目,现在我记录一下将这个项目发布到iis上的整个过程: 2.在vs2017中发布 ...

  8. netty的好处

    netty作为一个高性能的异步通信框架,它到底有哪些好处了,又用到哪些基础技术呢? 1.使用ServerBootstrap 作为netty服务端的启动辅助类,并且在创建ServerBootstrap时 ...

  9. 【Android】用Cubism 2制作自己的Live2D——初见!

    前言- 现在很多手游的UI上都不约而同的放置一个Live2D模型,这仿佛已经成为了一个业界的潜规则之类的东西.作为一名深受手机游戏毒害的90后,我也没有忘记小时候励志当一名技术宅的梦想,也想试试自己做 ...

  10. Android Studio教程02-应用程序结构图及应用基础

    目录 1. Android应用程序开发技术结构图 2.Android的应用基础 2.1. Android的四大组件: 1. Android组件1: Activity 2. Android组件2: Se ...