概念解释
线性:
自变量和因变量的关系应该是线性的(也即特征值和预测值是线性相关)
保持误差项的方差齐性(常数方差):
误差项的分散(方差)必须相同。(what????)
多元正态分布:
多元回归假定残差符合正态分布。
缺少多重共线性:
假设数据有极少甚至没有多重共线性,当特征(或自变量)不是相互独立时,才会引发多重共线性。
虚(拟)变量:
在多元回归模型中,当遇到数据集时非数值数据类型时,使用分类数据是一个非常有效的方法。
分类数据,是指反映(事物)类别的数据,是离散数据,其数值个数(分类属性)有限(但可能很多)且值之间无序。比如,按性别分为男、女两类。在一个回归模型中,这些分类值可以用虚变量来表示,变量通常其诸如1或0这样的值来表示肯定类型或否定类型。
虚拟变量陷阱:
虚拟变量陷阱是指两个及以上变量之间高度相关的情形。简而言之,就是存在一个能够被其他变量预测出的变量。我们举一个存在重复类别(变量)的直观例子:假使我们舍弃男性类别,那么,该类别也可以通过女性类别来定义(女性值为0时,表示男性,为1时,表示女性),反之亦然。
解决虚拟变量陷阱的方法是,类别变量减去一:假如有m个类别,那么在模型构建时取m-1个虚拟变量,减去的那个变量可以看作时参照值。
注意:
过多的变量可能会降低模型的精确度,尤其是如果存在一些对结果无关的变量,或者存在对其他变量造成很大影响的变量时,这里介绍一些选择合适变量的方法:
1、向前选择法、
2、向后选择法(也称 向后剔除法/向后消元法)
3、向前向后法:即结合了上面说的向前法和向后法,先用向前法筛选一遍,再用向后法筛选一遍,直到最后无论怎么筛选模型变量都不再发生变化,就算是结束了。
总结
数据预处理:
- 导入相关库
- 导入数据集
- 检查缺失数据
- 数据分类
- 有必要的话,编辑虚拟变量并注意避免虚拟变量陷阱
- 特征缩放我们将用简单线性回归模型的相关库来做
#数据预处理
import numpy as np
import pandas as pd
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])
#print("X",X[:10,3]) X [2 0 1 2 1 2 0 1 2 0]
onehotencoder = OneHotEncoder(categorical_features = [3])
X = onehotencoder.fit_transform(X).toarray()
X1 = X[: , 1:]
#拆分为数据集和训练集
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y , test_size = 0.2, random_state = 0)
X1_train, X1_test, Y1_train, Y1_test = train_test_split(X1, Y,test_size = 0.2, random_state = 0)
在训练集上训练模型
这一步和简单线性回归模型的处理完全一样
- 用sklearn.linear_model库的LinearRegression类,在数据集上训练模型。
- 首先创建一个LinearRegression的对象regressor
- 接着用LinearRegression类的fit()方法,用对象regressor在数据集上进行训练
#在训练集上训练多元线性回归模型
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
regressor1 = LinearRegression()
regressor1.fit(X1_train, Y1_train)
预测结果
在测试集上进行预测,并观察结果。
- 我们将把输出结果保存在向量Y_pred中。
- 使用上一步训练时我们用的对象regressor,在训练完之后,用其predict()方法来预测结果。
y_pred = regressor.predict(X_test)
y1_pred = regressor1.predict(X1_test)