在学习了「简单线性回归」以后,咱们进一步学习应用更为普遍的多元线性回归,并使用 Python 代码来实现它。python
多元线性回归是对简单线性回归的推广,同时有着不一样于简单线性回归的特性。git
多元线性回归(Multiple Linear Regression)尝试经过已知数据找到一个线性方程来描述两个及以上的特征(自变量)与输出(因变量)之间的关系,并用这个线性方程来预测结果。github
多元线性回归的数学形式以下:dom
$$y = b_0 + b_1x_1 + b_2x_2 ...+b_nx_n + u_t$$学习
式中 $u_t(t= 1,2,...,n)$ 为随机项偏差。测试
应用多元线性回归时,咱们须要关注不一样变量对预测结果的影响,以及不一样的变量之间有什么联系。编码
线性:自变量和因变量线性相关.net
同方差性:随机偏差项的方差应为常数,也就是说样本残差的平方 $e_t^2$ 不随自变量的变化而变化code
多元正态:残差应符合正态分布orm
低多重共线性:使用多元线性回归时,若是特征(自变量)之间高度相关,会使回归估计不许确,称为多重共线性。咱们须要保证数据没有或具备较低的多重共线性
使用太多的变量可能会致使模型变得不精确,尤为是存在对输出结果没有影响或者对其它变量有较大影响的变量时。选择变量能够采用如下几种方法:
要想在回归模型中使用非数值数据类型,能够把它们视为分类数据。
分类数据,是指反应事物类型的离散数据(固定且无序),好比性别(男/女)。在模型中,咱们能够用虚拟变量来表示这种数据。虚拟变量一般使用 一、0 这样的值来表示确定或否认的含义。
虚拟变量陷阱指两个或多个变量之间高度相关的情形。简单的说就是一个变量能够经过其它变量预测。例如男性类别能够经过女性类别判断(女性值为 0 时,表示男性),因此对于男女问题,变量应该只有一元。
假设有 m 个相互关联的类别,为了解决虚拟变量陷阱,能够在模型构建时只选取 m-1 个虚拟变量。
# 导入库 import pandas as pd import numpy as np # 导入数据集 dataset = pd.read_csv('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)
示例数据地址:GitHub - Avik-Jain/100-Days-Of-ML-Code/datasets
此次比起前文「数据预处理」 ,多了一行躲避虚拟变量陷阱的代码。
from sklearn.linear_model import LinearRegression regressor = LinearRegression() regressor.fit(X_train, Y_train)
y_pred = regressor.predict(X_test)
欢迎关注 Evan 的博客