您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

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

时间:2023-08-25 11:22:43  来源:今日头条  作者:新语数据故事汇

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

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

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

 

回归(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.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。多元线性回归模型是更好的模型,因为它将提供更精确的、更准确的预测。

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



Tags:算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
诱导付费、自动扣费……微短剧被质疑借助算法精准“围猎”老年人
诱导付费、自动扣费、重复收费……聚焦身边的消费烦心事⑦丨一些微短剧被质疑借助算法精准“围猎”老年人中工网北京3月31日电(工人日报—中工网记者刘兵)...【详细内容】
2024-04-01  Search: 算法  点击:(5)  评论:(0)  加入收藏
分析网站SEO快速排名算法对网站具体的影响效果
亲爱的朋友们,今天我想和大家分享一个我们都关心的话题——网站SEO快速排名算法对网站我们身处一个信息爆炸的时代,如何在海量的信息中脱颖而出,成为了一个我们不得...【详细内容】
2024-03-28  Search: 算法  点击:(12)  评论:(0)  加入收藏
当prompt策略遇上分治算法,南加大、微软让大模型炼成「火眼金睛」
近年来,大语言模型(LLMs)由于其通用的问题处理能力而引起了大量的关注。现有研究表明,适当的提示设计(prompt enginerring),例如思维链(Chain-of-Thoughts),可以解锁 LLM 在不同领域的...【详细内容】
2024-03-12  Search: 算法  点击:(12)  评论:(0)  加入收藏
谷歌宣布更新搜索算法:打击AI生成内容,提高搜索结果质量
IT之家 3 月 6 日消息,谷歌于当地时间 5 日发文宣布,针对用户对搜索结果质量下降的反馈,将对算法进行调整,旨在打击 AI 生成的内容以及内容农场等垃圾信息,使用户能够看到更多“...【详细内容】
2024-03-06  Search: 算法  点击:(38)  评论:(0)  加入收藏
小红书、视频号、抖音流量算法解析,干货满满,值得一看!
咱们中国现在可不是一般的牛!网上的网友已经破了十个亿啦!到了这个互联网的新时代,谁有更多的人流量,谁就能赢得更多的掌声哦~抖音、小红书、、视频号,是很多品牌必争的流量洼地...【详细内容】
2024-02-23  Search: 算法  点击:(12)  评论:(0)  加入收藏
雪花算法详解与Java实现:分布式唯一ID生成原理
SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳...【详细内容】
2024-02-03  Search: 算法  点击:(50)  评论:(0)  加入收藏
简易百科之什么是搜索引擎的PageRank算法?
简易百科之什么是搜索引擎的PageRank算法?在互联网时代,搜索引擎是我们获取信息的重要工具。而PageRank算法则是搜索引擎的核心技术之一,它决定了网页在搜索结果中的排名。那么...【详细内容】
2024-01-24  Search: 算法  点击:(49)  评论:(0)  加入收藏
PageRank算法揭秘:搜索引擎背后的魔法师的工作原理
PageRank(PR)算法是由谷歌创始人之一的拉里·佩奇LarryPage命名的一种衡量网站页面重要性的方法。根据谷歌的说法,PageRank通过计算页面链接的数量和质量来粗略估计分...【详细内容】
2024-01-23  Search: 算法  点击:(44)  评论:(0)  加入收藏
程序开发中常用的十种算法,你用过几种?
当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1. 冒泡排序 (Bubble Sort):冒泡排序是一种简单的比...【详细内容】
2024-01-17  Search: 算法  点击:(44)  评论:(0)  加入收藏
百度最新的搜索引擎算法是什么样的?
百度搜索引擎算法是百度用来决定网页排名的算法。它是百度搜索技术的核心,也是百度作为全球最大的中文搜索引擎的基石。随着互联网的发展和用户需求的不断变化,百度搜索引擎算...【详细内容】
2024-01-10  Search: 算法  点击:(86)  评论:(0)  加入收藏
▌简易百科推荐
小红书、视频号、抖音流量算法解析,干货满满,值得一看!
咱们中国现在可不是一般的牛!网上的网友已经破了十个亿啦!到了这个互联网的新时代,谁有更多的人流量,谁就能赢得更多的掌声哦~抖音、小红书、、视频号,是很多品牌必争的流量洼地...【详细内容】
2024-02-23  二手车小胖说    Tags:流量算法   点击:(12)  评论:(0)  加入收藏
雪花算法详解与Java实现:分布式唯一ID生成原理
SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳...【详细内容】
2024-02-03   一安未来  微信公众号  Tags:雪花算法   点击:(50)  评论:(0)  加入收藏
程序开发中常用的十种算法,你用过几种?
当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1. 冒泡排序 (Bubble Sort):冒泡排序是一种简单的比...【详细内容】
2024-01-17  架构师老卢  今日头条  Tags:算法   点击:(44)  评论:(0)  加入收藏
百度推荐排序技术的思考与实践
本文将分享百度在推荐排序方面的思考与实践。在整个工业界的推广搜场景上,特征设计通常都是采用离散化的设计,需要保证两方面的效果,一方面是记忆,另一方面是泛化。特征都是通过...【详细内容】
2024-01-09  DataFunTalk  微信公众号  Tags:百度推荐   点击:(73)  评论:(0)  加入收藏
什么是布隆过滤器?如何实现布隆过滤器?
以下我们介绍了什么是布隆过滤器?它的使用场景和执行流程,以及在 Redis 中它的使用,那么问题来了,在日常开发中,也就是在 Java 开发中,我们又将如何操作布隆过滤器呢?布隆过滤器(Blo...【详细内容】
2024-01-05  Java中文社群  微信公众号  Tags:布隆过滤器   点击:(87)  评论:(0)  加入收藏
面向推荐系统的深度强化学习算法研究与应用
随着互联网的快速发展,推荐系统在各个领域中扮演着重要的角色。传统的推荐算法在面对大规模、复杂的数据时存在一定的局限性。为了解决这一问题,深度强化学习算法应运而生。本...【详细内容】
2024-01-04  数码小风向    Tags:算法   点击:(89)  评论:(0)  加入收藏
非负矩阵分解算法:从非负数据中提取主题、特征等信息
非负矩阵分解算法(Non-negativeMatrixFactorization,简称NMF)是一种常用的数据分析和特征提取方法,主要用于从非负数据中提取主题、特征等有意义的信息。本文将介绍非负矩阵分解...【详细内容】
2024-01-02  毛晓峰    Tags:算法   点击:(62)  评论:(0)  加入收藏
再谈前端算法,你这回明白了吗?
楔子 -- 青蛙跳台阶一只青蛙一次可以跳上一级台阶,也可以跳上二级台阶,求该青蛙跳上一个n级的台阶总共需要多少种跳法。分析: 当n=1的时候,①只需要跳一次即可;只有一种跳法,即f(...【详细内容】
2023-12-28  前端爱好者  微信公众号  Tags:前端算法   点击:(107)  评论:(0)  加入收藏
三分钟学习二分查找
二分查找是一种在有序数组中查找元素的算法,通过不断将搜索区域分成两半来实现。你可能在日常生活中已经不知不觉地使用了大脑里的二分查找。最常见的例子是在字典中查找一个...【详细内容】
2023-12-22  小技术君  微信公众号  Tags:二分查找   点击:(78)  评论:(0)  加入收藏
强化学习算法在资源调度与优化中的应用
随着云计算和大数据技术的快速发展,资源调度与优化成为了现代计算系统中的重要问题。传统的资源调度算法往往基于静态规则或启发式方法,无法适应动态变化的环境和复杂的任务需...【详细内容】
2023-12-14  职场小达人欢晓    Tags:算法   点击:(164)  评论:(0)  加入收藏
站内最新
站内热门
站内头条