多重线性回归
多重线性回归试图在两个或更多特征与结果之间建立线性模型以拟合数据。多重线性回归的步骤与简单线性回归非常相似,区别在于评测过程。你可以用它发现对预测结果影响最大的特征及各个不同变量之间的关联。
前提
对一个成功的回归分析来说,以下前提非常重要:
- 线性,在彼此独立或非独立的变量之间的关系是线性的。
- 同方差,应保持误差的恒定方差。
- 多元正态性:多元回归假设剩余部分是正态分布的
- 没有多重性:假设数据中很少或没有多重共线性。当特征(或独立变量)不相互独立时,就会发生多重共线性。
注意
太多的变量可能会导致我们的模型预测精确度下降,特别在某些变量对输出没有影响或者对其他变量影响很大的情况下。有些方法用于选择合适的变量,例如:
- 前向选择
- 向后消除
- 双向比较
虚拟变量
在多重线性回归中使用分类数据是一种强大的方法来将非数字数据类型包含到回归模型中。 分类数据指表达分类的数据值——这些数据值有着固定、非排序的数字,例如,性别(男/女)。在回归模型中,这些值可以被表示为虚拟变量——包含诸如1或0值用来表示出现或不出现的变量。
虚拟变量陷阱
虚拟变量陷阱表示这样一个场景,这个场景中两个或多个变量高度相关:简单来说,一个变量一个变量可以由另一个预测得出。直观地说,有一个重复的类别:如果我们放弃了男性类别,则它在女性类别中被定义为零(女性值为零表示男性,反之亦然)。 虚拟变量陷阱的解决方案是删除一个分类变量 —— 如果有多个类别,则在模型中使用m-1。 遗漏的值可以被认为是参考值。
Step 1: 预处理数据
- 导入库
- 导入数据集
- 检查缺失数据
- 编码分类数据
- 如果有必要增加虚拟变量,同时注意避免虚拟变量陷阱
- 我们会用在简单线性回归模型中用过的库来进行特征规范化
import pandas as pd
import numpy as np
dataset = pd.read_csv('../datasets/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])
onehotencoder = OneHotEncoder(categorical_features = [3])
X = onehotencoder.fit_transform(X).toarray()
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)
Step 2: 用训练集训练模型
这一步与简单回归模型几乎完全一样。我们用sklearn.linear.model
中的LinearRegression
类训练模型。然后生成LinearRegression
类的regressor
对象。现在调用LinearRegression
类在regressor
对象上的fit()
方法训练数据。
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
Step 3: 预测测试集
现在我们使用测试集来预测。我们将输出存储在向量Y_pred
中。为了得到预测数据,我们调用LinearRegression
类在上一个步骤已经训练好的regressor
对象上的predict()
方法。
y_pred = regressor.predict(X_test)