第三天 多元线性回归
2018-11-16 本文已影响21人
未不明不知不觉
多元线性回归
多元线性回归旨在用现有的数据构建两个或多个因变量与一个因变量之间的相关模型
二元线性回归示例多元线性回归的实现步骤和上一章提到的简单线性回归(单变量)类似,它们最大的不同在于模型评估,你可以通过评估找出哪个因素对预测的影响更大以及各个因素之间的关系
多元线性回归数学模型前提
如果想要实现有效成功的多元线性回归,下面这些前提项很重要
- 线性: 自变量和因变量之间是线性相关的
- 同方差性: 方差必须分布均匀(异常值会影响该项)
- 多元正态分布: 多元正态分布保证了残差的分布服从正态分布
- 非多重共线性: 数据尽量不要有多重共线性(若有自变量a、b、c 、d等,多a,b,c通过线性变换可以得到d,则称该变量存具有多重共线性,导致多重共线性的数据原因可能是因为数据的冗余(不过有时候适当的冗余可以减少计算复杂度))
Note💡
拥有自变量太多会潜在的降低模型的准确性,特别是当一些无关变量掺杂其中。下面是一些查找适当变量的方法:
- 前向选择法
- 后向选择法
- 向前向后法结合:结合以上两种,先用向前筛选再用向后筛选
补充
前向选择法
假设我们有k个变量。前进逐步的过程如下:
- 从NULL模型开始,即没有预测变量的模型。我们称之为M0。将预测变量添加到模型中。一次一个。
- 找到1个变量的最优模型。这意味着该模型是一个简单的回归量,只有一个自变量。我们将此模型称为M1。
- 再向M1添加一个变量。找到包含2个变量的最优模型。请注意,附加变量已添加到M1。我们将此模型称为M2。
- 再向M2添加一个变量。找到包含3个变量的最优模型。请注意,附加变量已添加到M2。我们将此模型称为M3。
5 .等等......我们得到了演练。重复此过程直到Mk即只有k变量的模型。
对于k变量,我们需要从以下模型集中选择最佳模型:
- M1:具有1个预测变量的最优模型。
- M2:具有2个预测变量的最优模型。这个模型是M1 +一个额外的变量。
- M3:具有3个预测变量的最佳模型。这个模型是M2 +一个额外的变量。
- Mk:具有k个预测变量的最优模型。这个模型是Mk-1 +一个额外的变量。
再次,选择M1 ... Mk中的最佳模型,即具有最佳拟合的模型
后向选择法
假设我们有k个预测因子:
- 从完整模型开始,即包含所有预测变量的模型。我们称这个模型为Mk。从完整模型中删除预测变量。一次一个。
- 找到k-1变量的最优模型。从Mk中删除一个变量。为所有可能的组合计算模型的性能。选择具有k-1变量的最佳模型。我们将此模型称为Mk-1。
- 找到k-2变量的最优模型。从Mk-1中删除一个变量。为所有可能的组合计算模型的性能。选择具有k-2变量的最佳模型。我们称这个模型为Mk-2。
- 等等......我们得到了演练。重复此过程,直到M1即只有1个变量的模型。
对于k变量,我们需要从以下模型集中选择最佳模型:
- Mk:具有k个预测变量的最优模型。
- Mk-1:具有k-1个预测因子的最优模型。这个模型是Mk - 一个额外的变量。
- Mk-2:具有k-2个预测变量的最优模型。这个模型是Mk - 另外两个变量。
- M1:具有1个预测变量的最优模型。
最佳子集选择法
假设我们有k个变量。最佳子集方法的过程如下:
- 从NULL模型开始,即没有预测变量的模型。我们称这个模型为M0。
- 找到1个变量的最优模型。这意味着该模型是一个简单的回归量,只有一个自变量。我们称这个模型为M1。
- 找到包含2个变量的最优模型。这意味着该模型是一个只有两个独立变量的回归量。我们称这个模型为M2。
- 找到包含3个变量的最优模型。这意味着该模型是一个只有三个独立变量的回归量。我们称这个模型为M3。
- 等等...我们得到了演练。重复这个过程。测试最佳模型的所有预测变量组合。
对于k变量,我们需要从以下模型集中选择最佳模型:
- M1:具有1个预测变量的最优模型。
- M2:具有2个预测变量的最优模型。
- M3:具有3个预测变量的最佳模型。
- Mk:具有k个预测变量的最优模型
最佳子集是详尽的,但它需要大量的计算能力
虚拟变量陷阱 💡
虚拟变量陷阱是两个及两个以上的变量高度相关,也就是存在一个能被其他变量推导出来的变量
行动起来
预处理数据
- 导入必须包
- 导入数据
- 检查数据缺失
- 分割数据集
- 特征缩放
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
dataset = pd.read_csv('dataset/50_Startups.csv')
X = dataset.values[:,:-1]
Y = dataset.values[:, -1]
labelencoder = LabelEncoder()
X[:, 3] = labelencoder.fit_transform(X[:, 3])
消除虚拟变量陷阱
第一列是不相关的变量
X = X[:, 1:]
训练模型
我们希望使用训练集训练模型,这里我们采用了sickit-learn提供的LinearRegression,然后我们实例化一个线性模型,随后我们使用fit方法加载训练集来训练该模型
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
预测结果
现在我们使用测试集进行预测了,我们把测试结果保存为变量Y_pred
y_pred = regressor.predict(X_test)
获取模型评估可以使用 regressor.score(X_test,Y_test)