学习机器学习100天系列_Day03

  • 多元线性回归
  • 哑变量
  • 虚拟变量陷阱(Dummy Variable Trap):
  • 解决方法


多元线性回归

多元线性回归尝试通过一个线性方程来适配观测数据,这个线性方程是在两个以上(包括两个)的特征和响应之间构建的一个关系。

哑变量

哑变量(Dummy Variable),又称为虚拟变量、虚设变量或名义变量,从名称上看就知道,它是人为虚设的变量,通常取值为0或1,来反映某个变量的不同属性。
对于有n个分类属性的自变量,通常需要选取1个分类作为参照,因此可以产生n-1个哑变量。
在构建回归模型时,如果自变量X为连续性变量,回归系数β可以解释为:在其他自变量不变的条件下,X每改变一个单位,所引起的因变量Y的平均变化量;如果自变量X为二分类变量,例如是否饮酒(1=是,0=否),则回归系数β可以解释为:其他自变量不变的条件下,X=1(饮酒者)与X=0(不饮酒者)相比,所引起的因变量Y的平均变化量。

虚拟变量陷阱(Dummy Variable Trap):

指当原特征有m个类别时,如果将其转换成m个虚拟变量,就会导致变量间出现完全共线性的情况。
假设我们有一个特征“性别”,包含男性和女性两个类别,如果将此特征转换为2个虚拟变量,就是:男x1=[1,0],女x2=[0,1]。
意思就是:变量x1,当性别为男时,x1=1,否则x1=0;变量x2,当性别为女时,x2=1,否则x2=0。
这样,目标y=w1x1+w2x2+b。因为x1+x2=1,因此,变量x1和变量x2之间存在线性关系,同时使用这两个变量将会导致共线性问题,使得模型参数无法估计

解决方法

类别变量减去一:假如有m个类别,那么在模型构建是取m-1个虚拟变量,减去的那个变量可以看作参照值
步骤:

  1. 数据预处理
    第一篇文章的6个步骤;(导入库、导入数据、处理缺失数据、数据标签编码、数据分类、//特征缩放)
  2. 通过训练集来训练多元线性回归模型
    使用sklearn.liner_model中的LinearRegression类
    先实例化LinearRegression类再使用fit方法拟合训练集
  3. 预测结果
    使用fit出的模型返回的LinearRegression类中的predict类预测测试集的结果
import pandas as pd
import numpy as np
#导入数据
datasets = pd.read_csv('./datasets/50_Startups.csv')
X = datasets.iloc[ : , :-1].values
Y = datasets.iloc[ : , 4].values
#处理缺失数据

from sklearn.impute import SimpleImputer
simpleimputer = SimpleImputer(missing_values= 0 , strategy= "mean")
simpleimputer.fit(X[ : , :-1]);
X[: , :-1] = simpleimputer.fit_transform(X[ : , :-1])

print(X)
print(X[ : ,3])
#数据编码

from sklearn.preprocessing import OneHotEncoder,LabelEncoder
from sklearn.compose import ColumnTransformer

label = LabelEncoder()
X[:,3] = label.fit_transform(X[:,3])
print(X)
# onehotencoder = OneHotEncoder(categorical_features = [3])
# X = onehotencoder.fit_transform(X).toarray()

#transformer list 转换器列表 ("",OneHotEncoder(),[0])
coltrans = ColumnTransformer([("",OneHotEncoder(),[3])],remainder='passthrough')
coltrans.fit(X)
X= coltrans.fit_transform(X)

print(X)
### 防止虚拟变量陷阱
X = X[: , 1:]
print(X)

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)

# #特征缩放
# from sklearn.preprocessing import StandardScaler
#
# sc_X = StandardScaler()
# X_train = sc_X.fit_transform(X_train)
# X_test = sc_X.fit_transform(X_test)

#开始回归
from sklearn.linear_model import LinearRegression
regression = LinearRegression()
regression.fit(X_train,Y_train)
#预测
Y_pred = regression.predict(X_test)

print("-------")
print(Y_test)
print("-------")
print(Y_pred)

#评价指标
from sklearn.metrics import r2_score
print(r2_score(Y_test, Y_pred))

多元线性回归怎么设置哑变量Python 多元线性回归 哑变量_机器学习