Machine Learning A-Z学习笔记3

Machine Learning A-Z学习笔记3

第三章多元线性回归

1.简单原理

多元线性回归(Multiple Linear Regression):拥有多个变量

在这里插入图片描述

有关线性回归的五大准则

在这里插入图片描述

以"公司营收"為例子,可以知道X1~X4分別代表研发成本,行政支出,市场营销,公司所在地

在这里插入图片描述

对于公司位置不是一个数值,所以需要OneHotEncoder将地点变为虚拟变量

在这里插入图片描述

虚拟变量的陷阱:一定要去除线性相关量

在这里插入图片描述

由于多元线性回归有多个变量,但并不是所有变量都有用,所以我们需要一系列操作来筛选合适的变量

在这里插入图片描述

all-in

除非你有相关的专业知识,或者你必须,或者是为了方向淘汰做准备

在这里插入图片描述

反向淘汰(用得最多)

  1. 假设一个阈值(假设为0.5)
  2. 将当前所有的变量丢进去训练
  3. 若模型的测试结果高于阈值,则进入步骤4,反之结束。
  4. 移除模型
  5. 删掉P值大于阈值的自变量然后重新进行训练,然后回到步骤3

在这里插入图片描述

顺向淘汰

  1. 假设一个阈值(假设为0.5)
  2. 设置有n个自变量,为每一个自变量建立一个模型,并挑选p值最小的那个保留
  3. 添加其他自变量
  4. 训练模型并且挑选p值最小的那个,如果仍小于阈值则回到步骤3,反之结束

在这里插入图片描述

信息量比较

穷举法

在这里插入图片描述

2.相关代码

# Multiple Linear Regression

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values

#处理分类数据
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 3] = labelencoder_X.fit_transform(X[:, 3])
onehotencoder = OneHotEncoder(categorical_features = [3])
X = onehotencoder.fit_transform(X).toarray()

#虚拟变量陷阱,删除一列
X = 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)




#导入线性回归标准库,创建回归器,回归器实现了特征缩放
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)




#预测数据
y_pred = regressor.predict(X_test)
 
#自变量选择   反向淘汰法
#准备工作  因为这个函数不包常数项,总共40行,给加上一列全是1
import statsmodels.formula.api as sm
X_train = np.append(arr = np.ones((40,1)), values = X_train, axis = 1)
#反向淘汰
#1. 先定义一个阈值
#2. p-value 越高,统计显著性越低
#3. 每个变量的p-value,大于阈值,淘汰

X_opt = X_train[:,[0,1,2,3,4,5]] #
regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()
regressor_OLS.summary() 
#移除最大的那个变量,x2  对应的是否在newyork

X_opt = X_train[:,[0,1,3,4,5]] #
regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()
regressor_OLS.summary() 
#移除最大的那个x1

X_opt = X_train[:,[0,3,4,5]] #
regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()
regressor_OLS.summary() 
#可以发现x2又是最大的

X_opt = X_train[:,[0,3,5]] 
regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()
regressor_OLS.summary() 

X_opt = X_train[:,[0,3]] #
regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()
regressor_OLS.summary() 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值