ML Day3多元线性回归

机器学习100天,每天进步一点点。跟着GitHub开始学习!

英文项目地址https://github.com/Avik-Jain/100-Days-Of-ML-Code

中文项目地址https://github.com/MLEveryday/100-Days-Of-ML-Code


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

虚(拟)变量:在多元回归模型中,当遇到数据集是非数值数据类型时,使用分类数据是有效的方法。分类数据,是指反映(事物)类别的数据,是离散数据,其数值个数(分类属性)有限(但可能很多)且值之间无序。比如按性别分为男、女两类。在一个回归模型中,这些分类值用虚变量表示,取1或0这样的值,来表示肯定或否定类型。

虚拟变量陷阱:指两个以上(包含两个)变量之间高度相关的情形,即存在一个能够被其他变量预测出的变量。解决虚拟变量陷阱的方法是,类别变量减去一。

y=b0 + b1x1 +b2x2 +b3D1

多元线性回归处理的步骤为:

1 数据预处理

导入相关库、导入数据集、检查缺失数据、数据分类、编辑虚拟变量并注意避免虚拟变量陷阱、特征缩放

2 在训练集上训练模型

与简单线性回归处理相同。使用sklearn.linear_model库的LinearRegression类,调用fit方法对数据集进行训练。

3 预测结果

用predict方法在测试集上进行测试,并观察结果。

4 评估结果

使用sklearn中r2_score评估结果。模型越好,r2趋于1。

代码:

# Importing the libraries
import pandas as pd  #用于导入和管理数据集
import numpy as np  #包含数学计算函数

# Importing the dataset
dataset = pd.read_csv('../datasets/50_Startups.csv')
X = dataset.iloc[ : , :-1].values  #iloc是取矩阵的某行某列
Y = dataset.iloc[ : ,  4 ].values

# Encoding Categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
X[: , 3] = labelencoder.fit_transform(X[ : , 3])
onehotencoder = OneHotEncoder(categorical_features = [3])  #第3列进行独热编码
X = onehotencoder.fit_transform(X).toarray()  #不加toarray()的话,输出稀疏的存储格式

# Avoiding Dummy Variable Trap 避免虚拟变量陷阱
X = X[: , 1:]

# Splitting the dataset into the Training set and Test set
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)

# Fitting Multiple Linear Regression to the Training set
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)

# Predicting the Test set results
y_pred = regressor.predict(X_test)

# regression evaluation
from sklearn.metrics import r2_score  #r2决定系数(拟合优度),模型越好:r2趋于1
print(r2_score(Y_test,y_pred))

结果:0.9347068473282446

猜你喜欢

转载自blog.csdn.net/weixin_40277254/article/details/86132832