您的位置 : 首页 生活常识

线性回归方程两个公式怎么用(一文带您了解线性回归)

作者:新语数据故事汇 2025-04-23 05:32:50

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

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

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

回归(Regression)简介

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

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

  • y变量,随自变量变化而改变的量
  • x:一个自变量,是一种可以改变的变量,是因果关系中的因变量。
  • a:这是线的斜率,它告诉线的实际陡峭程度。
  • b:这是 y 截距,它是y什么时候x等于 0。

回归算法的作用是尝试学习或近似求解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).

  • r2:告诉我们模型与数据的拟合程度并解释我们的数据。r2分数为1.0意味着完美拟合,我们的模型可以解释 100% 的数据集。r2 为0意味着模型无法确定数据集中的可预测关系。
  • rmse:是我们预测误差的偏差。它告诉我们数据点与回归线的平均距离有多远。换句话说,它告诉您数据在最佳拟合线周围的集中程度。例如,rmse为10 意味着无论我们预测什么价格,我们都应该期望实际价格与预测价格相差 10 美元以内。
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.coefmodel.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。多元线性回归模型是更好的模型,因为它将提供更精确的、更准确的预测。


相关推荐

一、 购买公务机票渠道及报销(一)购票渠道1、直接购票:凡持有公务卡的购票人,均可登录政府采购机票管理网站自助购票。该渠道仅能为持有公务卡的购票人购票,并使用公务卡结算。2、委托购票:购票人可委托航空公司直销机构或机票代理机构购买公务机票。可以使用公务卡刷卡方式结算,也可以预算单位转账方式结算。3、

迷鳃类的鳢科,水族爱好者以及商家们称之为雷龙鱼。又因为其头顶部平滑,鱼吻稍尖,上下颌开口幅度较大,酷似蛇类,所以台湾地区的商家和爱好者亦称之为蛇头鱼。说雷龙鱼或者蛇头鱼很多人可能不太明白,那么换种说法,黑鱼,可能大家就会恍然大悟,从某些方面来说,他们是同一类生物,我们常说的黑鱼在观赏鱼市场上被称为乌

作为一名男生,最令我们忐忑的一句话,莫过于“你是一个非常好的人,但是……”,但是后边的话,着实会让我们有些不知所措,我们未免会有所疑惑“既然对方觉得我们很好,她为什么还会拒绝我们呢?”而这种情况就是我们所说的“好人卡”,顾名思义,就是对方虽然称赞我们很好,但是对方却并没有应允我们的追求,我们也可以说

有的朋友想装一台电脑,但是害怕不会装,其实现在电脑组装不是很复杂,安装挺简单的,动手能力强的朋友们应该都没有问题。在这里我在给大家说一下怎么简单的组装一台电脑。本文不包含系统安装教程本文器材部分为二手产品,仅展示安装过程机箱准备好 把机箱面板打开,清理一下机箱自身线材。以及整理螺丝。主板(ssd)电