经典回归算法

news/2025/1/3 4:33:54/

回归的概念

回归方程:
在这里插入图片描述
写成矩阵:
在这里插入图片描述

  • 核心问题,构建预测函数z来映射特征矩阵x和标签y的线性关系

预测的目标值,有连续值也有离散值

  • 连续值,就直接预测输出就行
  • 离散值,需要在输出端加一个变换函数例如。Sigmoid函数,将连续值映射到【0,1】之间,即变成概率,根据概率大小就行判别分类
    • Sigmoid函数也有致命的缺陷
      在这里插入图片描述
  • 正无穷趋近于1,负无穷趋近于0 ,会导致梯度爆炸和梯度消失

如何对标签值就行转换?

  • 取对数,预测值y(x) 和 1 - y(x) 和必然为1,所以二者相除可以得到形似概率的结果

在这里插入图片描述

  • 所以,叫作对数几率回归 logistic regression , 实质上在做分类

y(x)代表了样本为某一类标签的概率吗?

参考回答:

在这里插入图片描述

逻辑回归存在的问题

缺点:

线性回归对数据的要求很严格,比如标签必须满足正态分布,特征之间的多重共线性需要消除等等,而现实中很多
真实情景的数据无法满足这些要求,因此线性回归在很多现实情境的应用效果有限

  • 逻辑回归由线性回归发展而来,当然存在这个问题

优点:

  1. 逻辑回归对线性关系的拟合效果好到丧心病狂。

    • 特征与标签之间的线性关系极强的数据,比如金融领域中的信用卡欺诈,评分卡制作,电商中的营销预测等等相关的数据,都是逻辑回归的强项。
    • 虽然现在有了梯度提升树GDBT,比逻辑回归效果更好,也被许多数据咨询公司启用,但逻辑回归在金融领域,尤其是银行业中的统治地位依然不可动摇
    • 相对的,逻辑回归在非线性数据的效果很多时候比瞎猜还不如,所以如果你已经知道数据之间的联系是非线性的,千万不要迷信逻辑回归
  2. 逻辑回归计算快:对于线性数据,逻辑回归的拟合和计算都非常快,计算效率优于SVM和随机森林,亲测表
    示在大型数据上尤其能够看得出区别

  3. 逻辑回归返回的分类结果不是固定的0,1,而是以小数形式呈现的类概率数字:我们因此可以把逻辑回归返
    回的结果当成连续型数据来利用

    • 比如在评分卡制作时,我们不仅需要判断客户是否会违约,还需要给出确定的”信用分“,而这个信用分的计算就需要使用类概率计算出的对数几率,而决策树和随机森林这样的分类器,可以产出分类结果,却无法帮助我们计算分数(当然,在sklearn中,决策树也可以产生概率,使用接口predict_proba调用就好,但一般来说,正常的决策树没有这个功能)。

详细理解

在这里插入图片描述

  • 两种概率整合:yi的取值就是0或1 ,参数是cta
    在这里插入图片描述

  • 预测的概率P
    在这里插入图片描述

  • 两边取对数
    在这里插入图片描述

  • 得到损失函数:用极大似然法推导

在这里插入图片描述

拟合:

逻辑回归和线性回归是天生欠拟合的模型,但我们还是需要控制过拟合的技术来帮助我们调整模型,对逻辑回归中过拟合的控制,通过正则化来实现。

正则化:
正则化是用来防止模型过拟合的过程,常用的有L1正则化和L2正则化两种选项,分别通过在损失函数后加上参数向
θ \theta θ 的L1范式和L2范式的倍数来实现

在这里插入图片描述
L1正则化:

在L1正则化在逐渐加强的过程中,携带信息量小的、对模型贡献不大的特征的参数,会比携带大量信息的、对模型
有巨大贡献的特征的参数更快地变成0,所以L1正则化本质是一个特征选择的过程,掌管了参数的“稀疏性”。L1正
则化越强,参数向量中就越多的参数为0,参数就越稀疏,选出来的特征就越少

L2正则化:

L2正则化在加强的过程中,会尽量让每个特征对模型都有一些小的贡献,但携带信息少,对模型贡献不大
的特征的参数会非常接近于0。通常来说,如果我们的主要目的只是为了防止过拟合,选择L2正则化就足够了。

逻辑回归中的特征工程

  • 业务指标选择

    • 直接凭借经验,选择通常相关性比较高的指标
  • PCA和SVD一般不用

    • 说到降维,我们首先想到的是之前提过的高效降维算法,PCA和SVD,遗憾的是,这两种方法大多数时候不适用于
      逻辑回归。逻辑回归是由线性回归演变而来,线性回归的一个核心目的是通过求解参数来探究特征X与标签y之间的
      关系,而逻辑回归也传承了这个性质,我们常常希望通过逻辑回归的结果,来判断什么样的特征与分类结果相关,
      因此我们希望保留特征的原貌。PCA和SVD的降维结果是不可解释的,因此一旦降维后,我们就无法解释特征和标
      签之间的关系了。
    • 当然,在不需要探究特征与标签之间关系的线性数据上,降维算法PCA和SVD也是可以使用的。
  • 统计方法可以使用,但不是非常必要

    • 既然降维算法不能使用,我们要用的就是特征选择方法。逻辑回归对数据的要求低于线性回归,由于我们不是使用
      最小二乘法来求解,所以逻辑回归对数据的总体分布和方差没有要求,也不需要排除特征之间的共线性
      • 解释一下特征共线性的问题:
      • 在一些博客中有这样的观点:多重共线性会影响线性模型的效果。对于线性回归来说,多重共线性会影响比较大,
        所以我们需要使用方差过滤和方差膨胀因子VIF(variance inflation factor)来消除共线性。但是对于逻辑回归,其实不是非常必要,甚至有时候,我们还需要多一些相互关联的特征来增强模型的表现
      • 消除共线性的方法 : VIF , Box-cox方法
    • 统计方法,比如方差,卡方,互信息等方法来做特征选择,也并没有问题。过滤法中所有的方法,都可以用在逻辑回归上

处理:

  1. 直接embedding
  2. 方差贡献率,在逻辑回归中可以使用系数coef_来这样做

关于梯度下降的误区

对损失函数求最小值,自然而然就知道求导数,偏导数

  • 注意 ∇ f ( x , y ) ∂ x \frac{\nabla f(x,y)}{\partial x} xf(x,y) ∇ f ( x , y ) ∂ y \frac{\nabla f(x,y)}{\partial y} yf(x,y) 其实 是对 θ \theta θ求导,然后链式求导法则来的,不是直接对x和y求偏导,得到梯度的

目标函数: J ( θ 1 , θ 2 , . . . ) , θ i ∈ θ 目标函数:J(\theta_1,\theta_2,...) ,\theta_i \in \theta 目标函数:J(θ1,θ2,...)θiθ

在这里插入图片描述

  • 所以,步长不是任何物理距离,它甚至不是梯度下降过程中任何距离的直接变化,它是梯度向量的大小 d上的一个
    比例,影响着参数向量 θ \theta θ 每次迭代后改变的部分。

在这里插入图片描述

求解器

参数solver & multi_class : 二元回归与多元回归

在这里插入图片描述

  • 样本不平衡与参数class_weight : 暂定是玄学

http://www.ppmy.cn/news/81931.html

相关文章

一图看懂 charset_normalizer 模块:字符集规范化,真正的第一个通用字符集检测器,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 charset_normalizer 模块:字符集规范化,真正的第一个通用字符集检测器,资料整理笔记(大全) 🧊摘要&a…

【JavaEE】阻塞队列、定时器和线程池

目录 1、阻塞队列 1.1、概念 1.2、生产者消费者模型 1.3、阻塞队列的模拟实现 2、定时器 2.1、使用标准库中的定时器 2.2、模拟实现定时器 3、线程池 3.1、标准库中的线程池 3.1.1、ThreadPoolExecutor类的构造方法 3.1.2、Java标准库的4种拒绝策略【经典面试题】…

c++ 11标准模板(STL) std::map(三)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

【信号变化检测】使用新颖的短时间条件局部峰值速率特征进行信号变化/事件/异常检测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

新手怎么玩转Linux

Linux是一个非常强大、灵活和可定制的操作系统&#xff0c;这使得它成为了程序员的首选操作系统之一。程序员喜欢使用Linux的原因有以下几点&#xff1a;开源、稳定性、安全性、命令行界面、社区支持。那么新手改如何玩转Linux呢&#xff1f;跟着我一起来看看吧。 以下是对新…

Spring 官方建议的在 Spring Boot 应用中如何做单元测试

Spring Boot 提供了丰富的测试功能&#xff0c;主要由以下两个模块组成&#xff1a; ● spring-boot-test&#xff1a;提供测试核心功能。 ● spring-boot-test-autoconfigure&#xff1a;提供对测试的自动配置。 Spring Boot 提供了一个 spring-boot-starter-test一站式启动…

JSON数据解析

JSON JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式。 Python3中可以使用json模块来对JSON数据进行编码&#xff0c;它包含了两个函数&#xff1a; json.dumps()&#xff1b;对数据进行编码json.loads()&#xff1b;对数据进行解码 Py…

记一次php 导出word文档

导出试卷 先看效果 $paper Exam::where(id, $data[examid])->field(paper_id,title)->find();$bankIds PaperStorehouse::where(id, $paper[paper_id])->value(banks);$field type,rate,name,options,parsing,value,question_id,parsing_id;$bankInfo Banks::whe…