超详细机器学习-线性回归案例(正规方程、梯度下降、岭回归)

article/2025/8/18 0:01:59

一、线性回归

  • 定义

线性回归通过一个或者多个自变量与因变量之间之间进行建模的回归分析。其中特点为一个或多个称为回归系数的模型参数的线性组合。

  • 分类

一元线性回归:涉及到的变量只有一个。
多元线性回归:涉及到的变量两个或两个以上。

  • 公式
    在这里插入图片描述

  • 图例

    • 单变量在这里插入图片描述

    • 多变量 在这里插入图片描述

  • 最小二乘法

    • 说明

    线性回归中的最小二乘法是用来求线性回归中的损失函数(误差大小),我们通常通过减少这个损失来提高回归模型的可靠性。

    • 公式
      在这里插入图片描述
    • 最小二乘法之回归方程
      • 适用场景:小规模数据
      • 公式
        在这里插入图片描述
      • 图例(单变量)
        在这里插入图片描述
      • API
        在这里插入图片描述

    • 最小二乘法之梯度下降
      • 适用场景:大规模数据

      • 公式
        我们以单变量中的w0,w1为例子:
        在这里插入图片描述
        𝛼为学习速率,需要手动指定

        的在这里插入图片描述
        表示方向

        沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后
        更新W值

      • 图例(单变量)
        在这里插入图片描述

      • API
        在这里插入图片描述


  • 回归性能评估

    • 均方误差(Mean Squared Error 简称 MSE)
    • 公式
      在这里插入图片描述
      注:𝑦^𝑖为预测值,¯𝑦为真实值
    • API
      在这里插入图片描述

  • 过拟合和欠拟合

    • 定义

      欠拟合:一个假设在训练数据上不能获得更好的拟合,但是在训练数据外的数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

      过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)

    • 图例
      在这里插入图片描述
    • 举例
      • 欠拟合
        在这里插入图片描述
        经过训练后,知道了天鹅是有翅膀的,天鹅的嘴巴是长长的。简单的认为有这些特征的都是天鹅。因为机器学习到的天鹅特征太少了,导致区分标准太粗糙,不能准确识别出天鹅。

      • 过拟合
        在这里插入图片描述
        机器通过这些图片来学习天鹅的特征,经过训练后,知道了天鹅是有翅膀的,天鹅的嘴巴是长长的弯曲的,天鹅的脖子是长长的有点曲度,天鹅的整个体型像一个"2"且略大于鸭子。这时候机器已经基本能区别天鹅和其他动物了。然后,很不巧已有的天鹅图片全是白天鹅的,于是机器经过学习后,会认为天鹅的羽毛都是白的,以后看到羽毛是黑的天鹅就会认为那不是天鹅。

    • 解决方法
      • 欠拟合
        • 增加数据的特征数量
      • 过拟合
        • 进行特征选择,消除关联性大的特征(很难做)
        • 交叉验证(让所有数据都有过训练)
        • 正则化

  • L2正则化(解决过拟合问题)

    • 作用:可以使得W的每个元素都很小,都接近于0
    • 优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
    • 带有正则化的线性回归-Ridge
      • API
        在这里插入图片描述
  • 线性回归案例(美国King County房价预测训练赛)

    • 数据集在这里插入图片描述

    • 代码

    import pandas as pd
    from sklearn.linear_model import LinearRegression,Ridge,SGDRegressor
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import mean_squared_error
    from sklearn.preprocessing import  StandardScaler
    import numpy as npdef predict_house_price():df = pd.read_csv('kc_train.csv',names=['销售日期','销售价格','卧室数','浴室数','房屋面积','停车面积','楼层数','房屋评分','建筑面积','地下室面积','建筑年份','修复年份','纬度','经度'])# 提取特征值和目标值# 将日期转换成具体的月份并删除原销售如期df['销售日期'] = pd.to_datetime(df['销售日期'])date = pd.DatetimeIndex(df['销售日期'])df['销售月份'] = date.monthdf = df.drop(['销售日期'],axis=1)df.drop(['修复年份','建筑年份','纬度','经度'],axis=1,inplace=True)# 划分特征值和目标值数据x = df.iloc[:,1:]y = df.iloc[:,0]# 分割数据为训练集和测试集x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)# 对数据进行特征预处理(这里选择标准化)# 这里需要我们实例两个标准化API分别对训练值和测试值进行标准化x_std = StandardScaler()x_train = x_std.fit_transform(x_train)x_test = x_std.transform(x_test)y_std = StandardScaler()# 因为新版本的标准化 传入的数据需要是一个二维数组# 因此需要对目标值数据进行转换 先将数据转换成ndarray类型再使用reshape方法修改函数形状y_train = y_std.fit_transform(np.array(y_train).reshape(-1,1))y_test = y_std.transform(np.array(y_test).reshape(-1,1))# 以下分别采用正规方程、梯度下降和岭回归分别对数据进行训练和预测看看哪个算法效果更好# 通过比较均方误差来进行比较# 正规方程lr = LinearRegression()lr.fit(x_train,y_train)# 这里为了让数据更加直观,我们需要将标准化后的预测值再次转换正非标准化数据y_lr_predict = y_std.inverse_transform(lr.predict(x_test))# 查看回归系数即w值# 由于数据过长我们只取出前十个进行比较print('正规方程预测每个房子的价格为:',y_lr_predict[:10])# 计算出正规方程的均方误差print('正规方程的均方误差为:',mean_squared_error(y_std.inverse_transform(y_test),y_lr_predict))# 梯度下降 步骤与正规方程一样 一下不多做注释sgd = SGDRegressor()sgd.fit(x_train,y_train)y_sgd_predict = y_std.inverse_transform(sgd.predict(x_test))# print('梯度下降的回归系数为:',sgd.coef_)print('梯度下降预测每个房子的价格为:',y_sgd_predict[:10])print('梯度下降的均方误差为:',mean_squared_error(y_std.inverse_transform(y_test),y_sgd_predict))# 岭回归rg = Ridge(alpha=1.0)rg.fit(x_train,y_train)y_rg_predict = y_std.inverse_transform(rg.predict(x_test))# print('岭回归的回归系数为:', rg.coef_)print('岭回归预测每个房子的价格为:', y_rg_predict[:10])print('岭回归的均方误差为:', mean_squared_error(y_std.inverse_transform(y_test), y_rg_predict))print('真实房屋价格为:',y_std.inverse_transform(y_test[:10]))
    if __name__ == '__main__':predict_house_price()
    

以上是博主在学习Python-机器学习线性回归中的总结
需要数据集的下方评论


http://chatgpt.dhexx.cn/article/oae0k2L5.shtml

相关文章

回归分析方法应用实例1

在制定运动员选材标准时,理论上要求先对不同年龄的运动员,各测试一个较大的样本,然后,计算出各年龄的平均数、标准差,再来制定标准。 有时尽管各年龄组的样本含量n都较大,但是,计算出的各年龄…

回归分析案例分析全流程

一、案例说明 1.案例数据 在“工资影响因素”的调查问卷中,调查了每个人的起始工资、工作经验、受教育年限、受雇月数、职位等级以及当前工资六个方面。 2.分析目的 目的是建立以当前工资为因变量的回归模型,并得出结论。[案例来源于:SPS…

1.1 一元线性回归分析案例

#将pyplot字体转化成中文 matplotlib.rcParams[font.family] Microsoft YaHei plt.rcParams[font.size] 12 # 设置字体大小 plt.rcParams[axes.unicode_minus] False # 设置正常显示负号案例背景:寻找房屋面积与价格的关系并进行预测图 #需要的包 import matp…

Spring WebFlux (6): RSocket 服务实现

RSocket官网:https://rsocket.io/ RSocket是一种二进制协议,可用于字节流传输,例如TCP,WebSockets和Aeron。 提供了四中交互模式: request/response (stream of 1) 请求/响应(单响应)大多数请…

HTTP协议的挑战者:RSocket

点击蓝色“程序猿DD”关注我 回复“资源”获取独家整理的学习资料! 1. 简介 RSocket是一种二进制的点对点通信协议,是一种新的网络通信第七层协议。旨在用于分布式应用程序中。从这个意义上讲,RSocket是HTTP等其他协议的替代方案。它是一种基…

使用 RSocket——服务端主动调用客户端方法

1. 编写客户端接收请求的逻辑 我们可以在初始化 Rsocket 实例的时候指定客户端可以被调用的方法,使用 acceptor() 指定可被调用的方法和方法使用的通信模型类型: 通信类型为 RequestResponse 时: .acceptor(SocketAcceptor.forRequestRespo…

RSocket 与 gRPC性能对比

几乎每次我向观众介绍RSocket时,都会有人问这个问题:“ RSocket与gRPC相比如何?” 今天我们要找出答案。 搭建平台 插座 RSocket在应用程序网络上实现反应式语义。它是一种网络协议,可端对端实施反压力和其他反应流概念。 gR…

浅谈RSocket与响应式编程

简介: RSocket是高效一个二进制的网络通讯协议,能够满足很多场景下使用。另外,RSocket也是一个激进的响应式捍卫者,激进到连API都跟响应式无缝集成。本文我们将和大家分享RSocket与响应式编程。 作者 | 素渡 来源 | 阿里技术公众号…

阿里雷卷:RSocket从入门到落地,RSocket让AJP换发青春

考虑很久,决定还是写一下这篇文章,主要是 AJP 技术太老,我只能说 Long long ago ,估计我在用这个技术的时候,很多同学小学还没有毕业。但是没有问题,这篇文章只是一个架构启发,不会浪费你时间让…

云原生实践之 RSocket 从入门到落地:Servlet vs RSocket

技术实践的作用在于:除了用于构建业务,也是为了验证某项技术或框架是否值得大规模推广。 本期开始,我们推出《RSocket 从入门到落地》系列文章,通过实例和对比来介绍RSocket。主要围绕RSocket如何实现Polyglot RPC、Service Regi…

RSocket 基于消息传递的反应式应用层网络协议

下面基于RSocket的一些主要特性分别做一下介绍,并和HTTP之类的常见协议进行比较: Multiplexed, Binary Protocol 多路复用的二进制协议Bidirectional Streaming 双向流Flow Control 流控制Socket Resumption 连接恢复Message passing 消息传递模型Trans…

RSocket 从入门到落地:两种微服务对比

✏️ Pic by Alibaba Tech on Facebook 技术实践的作用在于:除了用于构建业务,也是为了验证某项技术或框架是否值得大规模推广。 这是《RSocket 从入门到落地》系列文章的第三篇,来一起对比下开发微服务应用和微服务之间的网络通讯。该系列文…

开源的技术底座技术中台spring cloud Rsocket 微服务

一、项目背景 企业对新技术、用户体验、需求响应、交互协作提出了新的要求 1、应用新技术: 物联网、人工智能、大数据挖掘和分析、机器人、自动化等 2、重用核心能力: 使组织能够在其ERP核心解决方案的基础上进行构建,并为“下一步做什么”铺…

spring响应式编程13 RSocket:一种新的高性能网络通信协议

前面几讲我们讨论了如何使用 WebFlux 构建响应式 Web 服务的实现方案。WebFlux 和 WebMVC 一样,都是基于 HTTP 协议实现请求-响应式的交互方式。这种交互方案很简单,但不够灵活,也无法应对所有的响应式应用场景。那么,有没有在网络…

RSocket 学习(二):HTTP VS WebSocket VS RSocket

在比对 HTTP、WebSocket、RSocket 之前,我们先通过下面这张 OSI 七层模型的图快速梳理一下网络通信的面貌, 以便后续更好地理解它们。 osi model.png 一. HTTP 的特性 超文本传输协议(英语:HyperText Transfer Protocol&#xff0…

基于RSocket协议实现客户端与服务端通信

RSocket基础开发demo package com.pshdhx.rsocket;import io.rsocket.Payload; import io.rsocket.RSocket; import io.rsocket.util.DefaultPayload; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; import …

响应式编程之网络新约:RSocket

响应式reactive是Java中高效应用的下一个前沿,但它目前主要有两个障碍:数据访问和网络。RSocket是一种新的第7层语言无关的应用网络协议(解决后者),它由Facebook,Netifi和Pivotal等工程师开发,提…

一篇文章了解RSocket协议

RSocket是一个类似于HTTP的通讯协议。在了解Rsocket协议之前,先简单介绍下HTTP协议。 之所以推出springboot的技术,一个原因是因为前后端设计的分离。因为基于HTTP协议可以直接返回REST数据内容。 REST是一个简单且容易使用的异构处理架构,R…

RSocket 学习(一):初探

girl.jpg 一. RSocket 介绍 RSocket 是一种二进制字节流传输协议,位于 OSI 七层模型中的5、6层,对应 TCP/IP 模型中的应用层。RSocket 并没有规定必须使用何种底层传输层协议,开发者可以使用不同的底层传输协议,包括 TCP、WebSock…

RSocket——Http协议的替代者

1. 简介 RSocket是一种二进制的点对点通信协议,是一种新的网络通信第七层协议。旨在用于分布式应用程序中。从这个意义上讲,RSocket是HTTP等其他协议的替代方案。它是一种基于Reactive Streams规范具有异步,背压的双向,多路复用&…