一、多元线性回归
多元线性回归在数学表达式上和一元线性回归相差相差不大,只是因为输入的特征变多,导致了从一元变成了多元。也可以使用它找到对于预测结果来说那个特征的影响较大,不同的变量之间是如何相互关联的。
1.前提
如果要完成一个成功的回归分析,需要得到下面的假定。
1)自变量和因变量要满足线性关系
2)误差项的方差要等同
3)多元正态分布:多元回归要假定残差符合正态分布
4)数据很少或者没有多重共线性,也就是输入的特征要尽量保持相互独立。
2.注意
在实际问题中,输入的特征会比较多,但是输入的特征和输出的目标值之间不见得有较大的联系,就像是我体重200斤,和我学习成绩之间,不见得有较大的联系,所以当输入的变量过多时,或者输入的变量和其他变量有很大的相关性,则需要选择合适的特征:
1)向前选择法
2)向后选择法
3)向前向后法
3.虚拟变量
输入的特征中有一部分是类别特征,如果只是转化成类别数,其类别数是有限的而且还是离散的,并且无序,所以只使用0,1来表示是肯定类型还是否定类型。
4.虚拟变量陷阱
虚拟变量陷阱就是说,如果类别属性是3个,那个代表就是,100,010,001,如果把第一列去掉,也可以进行区分。
二、代码
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score,mean_squared_error,mean_absolute_error
1.导入数据
data = pd.read_csv(‘50_Startups.csv’,encoding=‘utf-8’)
X = data.iloc[ : , : -1].values
Y = data.iloc[ : , -1].values
2.检查缺失数据 无缺失值
3.分类数据进行变化,先label然后onehot
labelencoder = LabelEncoder()
X[: , 3] = labelencoder.fit_transform(X[ : , 3])
onehotencoder = OneHotEncoder(categorical_features = [3])
categorical_features = ‘all’ 默认值为all,也就是对所有的的特征进行onghot,但是也可以指定【3】,就是第四个特征。
X = onehotencoder.fit_transform(X).toarray()
躲避虚拟变量陷阱
X = X[ : , 1 : ]
4 拆分训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(X,Y,test_size=0.2,random_state=0)
训练模型
liner = LinearRegression()
liner.fit(x_train,y_train)
测试模型
y_pred = liner.predict(x_test)
评估模型
print(‘The value of default measurement of LInearRegression’,liner.score(x_test,y_test))
print(‘The value of R-squared of LinearRegression is’,r2_score(y_test,y_pred))
PS:特征工程中的特征选择问题,以及特征之间相关性的问题。