<返回更多

一文带您了解线性回归:多个变量之间的最佳拟合线的算法

2023-08-25  今日头条  新语数据故事汇
加入收藏

随着计算机技术的迅猛发展,机器学习在各行各业中已经成为一个不可或缺的工具。其中,回归算法是机器学习领域的一个关键组成部分,它被广泛用于预测数值型的输出结果。本文将重点介绍几种常见的回归算法,包括线性回归、多项式回归、决策树回归以及随机森林回归,并通过案例来解释什么是回归分析。

回归分析是一种统计学方法,用于建立一个数学模型,以了解一个或多个自变量(独立变量)与一个因变量(依赖变量)之间的关系。这个关系通常用一个方程来表示,该方程可以用来预测因变量的值。回归分析的目标是找到最合适的模型,以最好地拟合观测数据点,从而使我们能够进行有效的预测和推断。

回归分析在现实生活中有许多应用。以孩子的身高预测为例,我们可以收集大量不同家庭的数据,包括父母的身高和他们孩子的身高。然后,我们可以使用回归算法来建立一个模型,该模型可以根据父母的身高预测孩子的身高,考虑到遗传因素。这个模型可以帮助我们更好地理解身高的遗传规律,并在医学或遗传学研究中有重要的应用价值。

 

回归(Regression)简介

回归是一种简单而强大的预测模型,旨在学习输入变量和目标变量之间的关系。为了简单理解回归,我们回归熟悉简单直线方程(线性回归):y=ax+b

这个既熟悉又简单的方程:y=ax+b用于在二维坐标系上画一条线。对这个方程进行分解以了解其每个术语。

回归算法的作用是尝试学习或近似求解a和b使得对于任何值x我们可以准确预测的值y. y=ax+b 是一条线或直线,所以称之为线性回归,是回归家族最为简单、直观的。如果数据之间的关系更加复杂,线性模型可能无法很好地拟合数据,需要考虑使用其他回归方法,例如多项式回归、决策树回归或随机森林回归,以更好地适应数据的复杂性;这些方法更好适应非线性关系,从而提高了对数据的拟合能力。接下来先从最简单线性回归开始。

线性回归(LinearRegression)

为了更直观地理解线性回归概念,假设我们想要根据房屋的面积来预测房屋的价格。我们所关心的预测值是房价(house price),这个预测值依赖于房屋的面积(area)。如果房屋的面积与价格存在关联,那么随着面积的增加,我们应该观察到价格也相应上升的趋势。这有助于我们理解这两个变量之间的关系,从而使我们能够对任何给定面积的房屋价格做出预测。

房屋特征及价格的数据集来源于Kaggle,包含有关房屋属性和价格的信息:https://www.kaggle.com/datasets/yasserh/housing-prices-dataset

 

利用SNB快速创建一个散点图,可视化房价与面积两个变量之间关系。

 

数据中似乎存在上升趋势,然而,在散点图的左下角也似乎有一些轻微的聚集。这可能表明我们的数据存在一定程度的偏斜,因此,让我们也来可视化每个变量的分布情况。

 

正如预想的一样,数据呈右偏态(right skewed)。在大多数机器学习项目中,数据的偏斜性对预测产生不理想的结果,但,有方法可以解决这个问题。需要使用"对数(log/ln)"对数据转换到更接近正态分布的情况。

regression_data = df1[['area', 'price']]
transformed = np.log(regression_data)

 

 

现在数据是基本对称的,接下来可以将数据分割成训练集和测试集,并开始训练我们的模型。

import pandas as pd
import seaborn as sns
import numpy as np
from math import sqrt
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error
from sklearn.model_selection import trAIn_test_split


inputs = np.array(transformed['area']).reshape(-1, 1)
target = transformed['price']
x_train, x_test, y_train, y_test = train_test_split(inputs, target, test_size=0.2, random_state = 2023)


model = LinearRegression()


model.fit(x_train, y_train)

 

模型评估(Evaluation)

变量model是已经训练好的回归模型,评估/检查模型在预测房屋价格方面的性能(效果和准确性)。首先,我们会在测试数据集上调用predict()方法,以获得一组预测的房屋价格;然后预测和实际的房屋价格进行计算评估指标,比如:r2 score 、rmse(root mean squared error).

predictions = model.predict(x_test)


rmse = round(sqrt(mean_squared_error(y_test, predictions)), 2)
r2 = round(r2_score(y_test, predictions), 2)


print('rmse:',rmse)
print('r2:',r2)
rmse: 0.33
r2: 0.19

 

 

最后,可以提取最佳拟合线: y=ax+b, 过引用属性model.coef和model.intercept_模型输出来绘制数据的回归线。

slope = model.coef_[0]
intercept = model.intercept_


print(f"slope:{slope}")
print(f"intercept:{intercept}")


x = np.linspace(7, 10, 5)
y = [(slope * val) + intercept for val in x]
var = {'x': x, 'y': y}
line = pd.DataFrame.from_records(var)


import seaborn as sns
fig, ax = plt.subplots(figsize=(8, 5))
sns.scatterplot(x="area", y="price", data=transformed,ax=ax)
sns.regplot(x="x", y="y", data=line,color='r')
plt.show()

 

 

多元线性回归(Multiple linear regression)

上面示例是简单线性回归模型中,我们只使用一个输入值来预测目标值。这种简单性使得数据可视化和模型实现变得容易。然而,简单线性回归的结果可能不是最准确的。为了提高模型的准确性,可以训练一个多元线性回归模型。区别是:多元线性回归可以利用多个输入值(多个自变量)来预测目标变量,因此得名"多元"线性回归。

分类变量的编码

在大多数机器学习模型中,输入自变量必须是数值。这些模型的数学性质使得类似于 bedrooms = 4 或 bathrooms = 2 的列很容易理解。然而,诸如 basement = Yes 或 furnish_status = furnished 这样的分类意味着对于模型来说毫无意义。我们需要一种方法来对这些分类值进行编码,以便模型知道如何赋予这些值含义。LabelEncoder编码是一种常见编码方式:将类别型进行排序并赋值。

 

使用LabelEncoder 对数据集分类变量进行编码:

for col in df1.columns :
  if df1[col].dtype == 'object':
    df1[col] = LabelEncoder().fit_transform(df1[col])
df1

 

 

接下来使用多元线性回归进行建模和评估:

inputs = df1[df1.columns[1:]]
target = df1['price']
mul_x_train, mul_x_test, mul_y_train, mul_y_test = train_test_split(inputs, target, test_size=.2, random_state = 222)


model = LinearRegression()
model.fit(mul_x_train, mul_y_train)


y_pred = model.predict(mul_x_test)


multiple_mse = round(sqrt(mean_squared_error(mul_y_test, y_pred)), 2)
multiple_r2 = round(r2_score(mul_y_test, y_pred), 2)
print(f'multiple_mse:{multiple_mse}')
print(f'multiple_r2:{multiple_r2}')

模型性能指标如下:

multiple_mse:0.22
multiple_r2:0.71

 

 

模型比较

就最佳拟合而言,简单模型具有 19% 的 R² 分数,而多元线性回归模型具有 71% 的 R² 分数。性能提高了 373%.

就误差范围而言,简单模型具有 0.33 的 RMSE 分数,而多元线性回归模型具有 0.22 的 RMSE 分数。误差范围减小了 66.67%!

理想情况下:希望一个模型具有高的 R² 分数和低的 RMSE。多元线性回归模型是更好的模型,因为它将提供更精确的、更准确的预测。

本文介绍了一些在实际机器学习任务中非常基础的概念,例如如何进行数据转换,将数据划分成训练集和测试集,以及如何拟合线性回归模型并评估其性能。在以后的教程中,我们将继续介绍更复杂的回归算法,如多项式回归、决策树回归和随机森林回归等。

关键词:算法      点击(8)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多算法相关>>>