多重线性回归(multiple linear regression)
多重线性回归的概念
多重线性回归是基于观测数据,给2个以上特征与结果构建线性模型的等式。构建多重线性回归模型的步骤与单线性回归模型类似。其中不同在于评价。你将使用评价去找出哪一个因素对预测结果有更大的影响以及不同变量之间的相关性。
假设(对于一个成功的回归分析,确认以下四点假设十分重要)
- 线性(linearity):自变量和因变量之间的关系应该是线性的。
- 同方差性(homoscedasticity):误差保持不变。这个不是很理解,感觉是要让误差恒定?
- 多元正态(multivariate normality):多重回归呈现正态分布。
- 缺乏多重共线性:假定在数据中有很少或没有多重共线性。多重共线性在特征/变量之间不是独立的时候出现。所以说,只有变量之间相互独立,才不会出现多重共线性,这是理想的?
注意
过多的变量有可能会导致模型变得不准确。尤其是当某些变量对结果没有任何影响或对其他变量有显著影响的时候。有很多方法去选择合适的变量。
- 前向选择(forward selection)
- 后向消除(backward elimination)
- 双向比较(bi-directional comparision)
虚拟变量(dummy variables)
在第一天的练习中已经使用imputer方法去对Yes和No进行虚拟变量转换。在多重回归模型中使用分类数据是一个很有效的方法,其中包括将非数字类型的数据引入回归模型中。分类数据是指数据值代表类别(数据值是一个固定的无序的数值)。例如,性别。在回归模型中这些数据能够被虚拟变量表达(将男女两个性别转为0、1)。感觉这里的分类变量就是量化研究中的名义变量,要使用特定数值进行表达
虚拟变量陷阱
虚拟变量陷阱是一个方案,在2个以上变量有高相关性时;简单来说,一个变量能够被另一个变量预测。没看懂,我又查了一下知乎依旧没看懂,应该是由于虚拟变量引入时个数的原因,与前面多重共线性相关,https://zhuanlan.zhihu.com/p/26640957
解决虚拟变量陷阱的方法是丢掉一个分类变量,如果模型中有m个分类变量,在模型里只使用m-1个,漏掉的那个变量可以认为是引用值。
第一步:数据预处理
- 引入库
- 引入数据集
import numpy as np
import pandas as pd
data=pd.read_excel(r'.\50_Startups.xlsx')
#通过iloc获取数据的所有值
X=data.iloc[:,:-1].values
Y=data.iloc[:,4].values
data.head()
- 检查丢失数据
- 分类变量编码
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder=LabelEncoder()
print(X[:,3])
#使用LabelEncoder对标签数值进行标准化
X[:,3]=labelencoder.fit_transform(X[:,3])
print(X[:,3])
#对标签进行独热码处理
onehotencoder=OneHotEncoder(categorical_features=[3])
X=onehotencoder.fit_transform(X).toarray()
print(X)
#防止虚拟变量陷阱,从第二个开始取
X=X[:,1:]
- 划分训练集和测试集
from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)
第二步:用训练集拟合模型
这一步与单线性回归类似
使用LinearRegression中的regressor,使用fit()方法。
from sklearn.linear_model import LinearRegression
regressor=LinearRegression()
regressor.fit(X_train,Y_train)
第三步:预测测试结果
在这里预测观测数据。输出值为Y_pred。
y_pred=regressor.predict(X_test)
翻译的好累啊,两个概念不是很懂,多重线性和虚拟变量陷阱,不过工程的话照做就是了。
本次练习的链接https://github.com/jwc19890114/-02-learning-file-100days/blob/master/03.ipynb
数据集为50_Startups.xlsx