博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python----多元线性回归
阅读量:5085 次
发布时间:2019-06-13

本文共 2984 字,大约阅读时间需要 9 分钟。

多元线性回归

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 npimport matplotlib.pyplot as pltimport pandas as pddataset = pd.read_csv('Data.csv')X = dataset.iloc[:, :-1].valuesy = dataset.iloc[:, 4].valuesfrom sklearn.preprocessing import LabelEncoder, OneHotEncoderlabelencoder_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_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)#创建新的回归器,并且用训练集拟合from sklearn.linear_model import LinearRegressionregressor = 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()

 

转载于:https://www.cnblogs.com/xueqin/p/10611511.html

你可能感兴趣的文章
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
list 容器 排序函数.xml
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
IOS--沙盒机制
查看>>
使用 JointCode.Shuttle 访问任意 AppDomain 的服务
查看>>
sqlite的坑
查看>>