欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

MachineLearningA-Z学习笔记3

时间:2023-04-26
Machine Learning A-Z学习笔记3 第三章多元线性回归 1.简单原理

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

有关线性回归的五大准则

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

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

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

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

all-in

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

反向淘汰(用得最多)

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

顺向淘汰

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

信息量比较

穷举法

2.相关代码

# Multiple Linear Regression# importing the librariesimport numpy as npimport matplotlib.pyplot as pltimport pandas as pd# importing the datasetdataset = pd.read_csv('50_Startups.csv')X = dataset.iloc[:, :-1].valuesy = dataset.iloc[:, 4].values#处理分类数据from sklearn.preprocessing import LabelEncoder, oneHotEncoderlabelencoder_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_splitX_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state = 0)#导入线性回归标准库,创建回归器,回归器实现了特征缩放from sklearn.linear_model import LinearRegressionregressor = LinearRegression()regressor.fit(X_train, y_train)#预测数据y_pred = regressor.predict(X_test) #自变量选择 反向淘汰法#准备工作 因为这个函数不包常数项,总共40行,给加上一列全是1import statsmodels.formula.api as smX_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 对应的是否在newyorkX_opt = X_train[:,[0,1,3,4,5]] #regressor_OLS = sm.OLS(endog = y_train, exog = X_opt).fit()regressor_OLS.summary() #移除最大的那个x1X_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()

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。