分享免费的编程资源和教程

网站首页 > 技术教程 正文

监督学习常见的一种回归算法:多元线性回归

goqiw 2025-01-08 13:37:08 技术教程 10 ℃ 0 评论

多元线性回归是机器学习中常见的一种回归算法,用于建立一个目标变量与多个自变量之间的线性关系模型。其数学表示为 y = b0 + b1x1 + b2x2 + ... + bn*xn,其中 y 是目标变量,x1, x2, ..., xn 是自变量,b0, b1, b2, ..., bn 是回归系数。

多元线性回归的目标是找到最佳的回归系数 b0, b1, b2, ..., bn,使得预测值与实际观测值之间的误差最小化。同样,常用的方法是最小二乘法,通过最小化残差平方和来求解回归系数的值。

多元线性回归的步骤如下:

  1. 收集数据:收集包含目标变量和多个自变量的数据集。
  2. 数据预处理:对数据进行清洗、转换和集成等预处理操作。
  3. 拟合模型:使用最小二乘法拟合多元线性回归模型,得到回归系数 b0, b1, b2, ..., bn。
  4. 模型评估:评估模型的性能,常见的指标包括均方误差(MSE)、平均绝对误差(MAE)等。
  5. 预测:使用模型进行预测,给定新的自变量值 x1, x2, ..., xn,通过回归模型计算出对应的目标变量值 y。

多元线性回归适用于有多个自变量和一个目标变量之间的线性关系的情况。它可以更全面地考虑多个因素对目标变量的影响,但也需要注意自变量之间的相关性和共线性问题,以避免模型的不稳定性和过拟合现象。

例子:

首先,我们需要导入所需的库,如numpy用于数值计算和sklearn.linear_model用于建立线性回归模型。

import numpy as npfrom sklearn.linear_model

import LinearRegression
 

然后,我们定义一个多元的数据集,包含多个自变量 X 和一个目标变量 y。

X = np.array([[1, 2], [2, 4], [3, 6], [4, 8], [5, 10]])
y = np.array([3, 5, 7, 9, 11])

接下来,我们可以创建一个LinearRegression对象,并使用fit方法拟合多元线性回归模型。

regressor = LinearRegression()
regressor.fit(X, y)

然后,我们可以使用模型预测新的观测值。

new_x = np.array([[6, 12], [7, 14]])

y_pred = regressor.predict(new_x)

最后,我们可以打印出预测结果。

print(y_pred)

完整的代码如下:

import numpy as np
from sklearn.linear_model import LinearRegression

X = np.array([[1, 2], [2, 4], [3, 6], [4, 8], [5, 10]])
y = np.array([3, 5, 7, 9, 11])

regressor = LinearRegression()
regressor.fit(X, y)

new_x = np.array([[6, 12], [7, 14]])
y_pred = regressor.predict(new_x)

print(y_pred)

运行以上代码,将得到预测结果,即新观测值对应的目标变量的估计值。

算法实现

第1步: 数据预处理

导入库

import pandas as pd
import numpy as np

导入数据集

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

将类别数据数字化

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
X[: , 3] = labelencoder.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)

第2步: 在训练集上训练多元线性回归模型

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)

Step 3: 在测试集上预测结果

y_pred = regressor.predict(X_test)

数据集下载:https://github.com/chemalls/100-Days-Of-ML-Code/blob/master/datasets/50_Startups.csv

代码:

# 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
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])
X = onehotencoder.fit_transform(X).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
print(r2_score(Y_test, y_pred))

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表