逻辑斯蒂回归(Logistic Regression) | 算法实现

【机器学习实验五】逻辑斯蒂回归 一、逻辑斯蒂回归基本概念 1.1、基本概念 逻辑斯蒂(Logistic)回归又称为“对数几率回归”,虽然名字有回归,但是实际上却是一种经典的分类方法,其主要思想是:根据现有数据对分类边界线(Decision Boundary)建立回归公式,以此进行分类。 1.2、特点 优点:计算代价不高,具有可解释性,易于实现。不仅可以预测出类别,而且可以得到近似概率预测,对许多需要利用概率辅助决策的任务很有用。 缺点:容易欠拟合,分类精度可能不高。 适用数据类型:数值型和标称型数据。 1.3、Logisti. 阅读详情

01 起

在这篇文章中,我们学习了逻辑斯谛回归模型的算法原理:统计学习方法|logistic回归

今天我们基于算法原理,给出利用随机梯度上升算法求解逻辑斯蒂回归模型参数的过程。

我们先来回顾一下逻辑斯蒂回归模型,

  • logistic回归的目的是寻找一个非线性函数sigmoid函数的最佳拟合参数w, sigmoid(wx)=1/(1+exp(-wx)),找到最佳拟合参数w,使不同类别样本点的特征x输入后,被分到对应的分类中,sigmoid值可以认为是一个概率值,从0~1,当>0.5,分到1类,<=0.5分到0类

好了,开始实操。


02 梯度下降算法

逻辑斯蒂回归模型的求解过程可以由最优化算法完成,最常用的最优化算法是梯度下降/上升算法,又可以简化为随机梯度下降/上升算法。

一般地,梯度下降算法中的梯度是指模型损失函数对输入变量x的梯度,梯度方向是函数上升最快的方向,于是梯度下降算法是朝着梯度反方向更新系数,可以求得局部最小值,而梯度上升算法则每次朝着梯度方向更新系数,可以求得局部最大值。

如果优化目标是损失函数,那么应该使用梯度下降算法求解使损失函数最小的参数w,而本文的优化目标是二分类模型的似然函数L(w),该函数表示某样本属于某个类别的概率,所以似然函数越大越好,因此要使用梯度上升算法求似然函数L(w)的极大值。

随机梯度上升算法相比梯度上升算法,每次只使用一个样本点更新参数w,占用更少的计算资源,且可以在新数据到来时就完成参数更新,是一种在线算法,各种梯度下降算法如下:

  • 批量梯度下降算法(BGD,Batch Gradient Descent)
  • 随机梯度下降算法(SGD,Stochastic Gradient Descent)
  • 小批量梯度下降算法(MBGD,Mini-Batch Gradient Descent)

本文先给出梯度上升算法(BGA),然后给出改进的梯度上升算法——随机梯度上升算法(SGA)


03 梯度上升算法实现

思路:

  1. 初始化回归系数,即置回归系数w=(w1,w2,…,wn)为全1
  2. 将训练集各样本值带入F(X)=sigmoid(w*x)函数计算F(X)值,认为是样本的分类值(二分类01)
  3. 计算各训练样本的分类误差error(样本的真实分类值-样本的F(X))
  4. 认为本次迭代的梯度=dataMat’*error,得到一个(n,1)的矩阵,用于将回归系数向似然函数增大的方向调整
  5. 将回归系数w向似然函数增大的方向调整:w(k+1)=w(k)+a*dataMat’*error
  6. 重复2~5步,直到迭代达到指定次数或error小于某值,停止迭代,得到回归系数w,逻辑斯蒂回归模型训练完毕
#sigmoid函数(类阶跃函数,只是0>1斜率较缓,不是瞬变的)
def sigmoid(z):
    return 1.0/(1+np.exp(-z)) # z=w*x

def gradAscent(dataMat,labelMat,numIter=150):
    dataMatrix=np.mat(dataMat) #样本特征矩阵 (m,n)
    labelMatrix=np.mat(labelMat).transpose() #样本类别矩阵 (1,m)
    m,n=np.shape(dataMatrix) #m个样本,n个特征
    
    alpha=0.001 #梯度上升的步长
    weights=np.ones((n,1)) #初始化回归系数
    
    #开始迭代,梯度上升
    for i in range(numIter):
        #将各样本值带入F(X)=sigmoid(w*x)函数计算F(X),认为是样本在当前迭代的分类值
        Fx=sigmoid(dataMatrix*weights) #shape=(1,m)
        
        #计算各训练样本的分类误差error(样本的真实分类值-样本的F(X))
        #需要将label矩阵浮点数化,与Fx元素数值类型一致,否则报错
        """这里可以加一个if判断,用于在error小于设定值时停止迭代"""
        error=(labelMatrix.astype(float)-Fx) #shape=(1,m) 
        
        #本次迭代的梯度=dataMat'*error,意思为m个样本的n个特征 分别与 m个样本的误差相乘
        """样本误差越大,下一次迭代调整就越多"""
        grad=dataMatrix.transpose()*error #shape=(n,1),用于将回归系数向似然函数增大的方向调整
        
        #将回归系数w向似然函数增大的方向调整:w(k+1)=w(k)+a*dataMat'*error
        weights=weights+alpha*grad
  
    #直到迭代达到指定次数或error小于某值,停止迭代,得到回归系数w,逻辑斯蒂回归模型训练完毕
    return weights

我们使用一组二维分类数据集来测试一下算法,得到的分类边界如下图所示,其中蓝点红点分别表示数据集中划分好的不同类别,橙色线条为决策边界,是训练得到的逻辑斯蒂回归模型,


04 随机梯度上升算法实现

以上计算可以看到,梯度上升法计算量较大,即使是简单数据集计算量也很大(100条3维度数据需要进行300次乘法,再算上1000此迭代,计算量就更大了),当面对上万上亿条数据,计算复杂度就太大了。

于是我们给出改进的梯度上升算法——随机梯度上升算法,

  • 一次仅用一个样本点来更新回归系数w
  • 此方法可以在新样本到来时进行增量式的更新,因此随机梯度上升法是一种在线学习算法

随机梯度上升法思路:与梯度上升法类似,不同之处在于:

  1. 随机梯度上升法一次只用一个样本点来更新回归系数w
  2. 需要遍历所有的样本点来更新回归系数w,然后才相当于梯度上升法的一次迭代
  3. 相比于梯度上升法,随机梯度上升法每次迭代只有100次(样本数)乘法,复杂度大大降低,特别对于高维样本
def stocGradAscent(dataMat,labelMat):
    m,n=np.shape(dataMat) #m个样本,n个维度(特征),dataMat为list
    dataMatrix=np.mat(dataMat) #list转换为矩阵,便于后续计算
    alpha=0.01 #步子迈大点
    weights=np.ones((n,1)) #初始化回归系数,一维数组
    
    for i in range(m): #遍历所有样本点
        #第i个样本点的F(x)值,float内为第i个样本点的w*x
        Fxi=sigmoid(float((dataMatrix[i]*weights)))
        
        #第i个样本的真实值与预测值误差,用于回归系数调整
        error=float(labelMat[i])-Fxi
        
        #回归系数调整,只用第i个样本点更新回归系数w
        weights=weights+alpha*error*dataMatrix[i].transpose()
    return weights

我们使用相同的数据集测试一下随机梯度上升算法训练的逻辑斯蒂回归模型,如下图,

咦,怎么感觉分类能力更弱了?

不不不,再仔细看看,随机梯度上升算法只迭代了1次,而刚才我们迭代了1000次,这样对比好像不太公平呐!

我们再改进一下,

  1. 加入多次迭代
  2. 每次迭代的步长(alpha)会被调整,越往后迭代,步长越小
    • 可缓解迭代过程中系数的波动,前几次迭代中,步长较大,即,alpha不是严格下降的,便于系数快速收敛
  3. 每次迭代中,遍历样本不是按顺序遍历的,而是随机遍历的,即,随机选取样本来更新回归系数w,每次随机从样本集中选出一个样本,更新系数,然后删除该样本点,进行下一次i迭代
    • 可减少迭代过程中回归系数的周期性波动,因为周期性波动(波形图中的小锯齿)来自于一些不能被正确分类的样本点(数据集并非线性可分),这些样本点每次被用于更新系数时会引起系数的剧烈波动
def stocGradAscentIter(dataMat,labelMat,numIter=150):
    m,n=np.shape(dataMat) #m个样本,n个维度(特征),dataMat为list
    dataMatrix=np.mat(dataMat) #list转换为矩阵,便于后续计算
    weights=np.ones((n,1)) #初始化回归系数,一维数组

    for j in range(numIter):
        dataIndex=list(range(m))#样本点索引,用于存储尚未用于更新系数的样本点的索引
        for i in range(m): #遍历所有样本点
            """第j次迭代的第i个小迭代"""
            alpha=4/(1.0+j+i)+0.01 #每次迭代的步长(alpha)会被调整,越往后迭代,步长越小

            #随机选取样本点进行系数更新
            randIndex=np.random.randint(0,len(dataIndex)) #从尚未用于更新系数的样本点中随机选取一个样本
            Fxi=sigmoid(float((dataMatrix[randIndex]*weights)))
            error=float(labelMat[randIndex])-Fxi
            weights=weights+alpha*error*dataMatrix[randIndex].transpose()
            
            #删除已经用于更新系数的样本点的索引
            del(dataIndex[randIndex])
    return weights

再来看看训练效果,

对比一下使用梯度上升算法迭代1000次后的模型,改进的随机梯度上升算法只迭代了10次就已经展现出较好的分类能力了,溜~~


05 总结

本文给出了随机梯度下降/上升算法的原理和方法,并基于随机梯度上升算法求解逻辑斯蒂回归模型的参数w,完成模型训练,旨在加深对逻辑斯谛回归模型和随机梯度下降算法的进一步理解,希望对你有帮助=.=


06 参考

  1. 《统计学习方法》 李航 Chapter6
  2. 《机器学习实战》 Peter Harrington Chapter5
【SAS】逻辑斯回归 Logistic regression (1、基础应用) HL检验为模型拟合指标,其原理在于判断预测值与真实值之间的gap情况,如果p值大于0.05,则说明通过HL检验,即说明预测值与真实值之间并无非常明显的差异。反之如果p值小于0.05,则说明没有通过HL检验,预测值与真实值之间有着明显的差异,即说明模型拟合度较差。估计:方程回构系数,正数表示相关因素增加发生概率,负数表示相关因素减少发生概率。二元变量不需改写01,可以用class设置自动改写比如。Pr > 卡方:p值,小于0.05表示有影响。[1] 沈明來.統計分析與SAS應用。连续变量可以直接使用比如。 阅读详情

相关推荐

Logistic Regression逻辑回归的简单解释

Logistic Regression也叫Logit Regression,在机器学习中属于参数估计的模型。逻辑回归与普通线性回归(Linear Regression)有很大的关系。在应用上,它们有所区别: 普通线性回归主要用于连续变量的预测,即,线性回归的输出yy的取值范围是整个实数区间 逻辑回归用于离散变量的分类,即,它的输出yy的取值范围是一个离散的集合,主要用于类的判

小平子的专栏 3万+

机器学习实战(四):逻辑斯蒂回归

机器学习实战:逻辑斯蒂回归1、关于逻辑斯蒂回归1.1 一般过程1.2 优缺点1.3 Sigmoid函数2、基于最优化方法的最佳回归系数确定2.1 梯度上升法2.1.1 主要思想2.1.2 Logistic回归梯度上升优化算法2.1.3 绘制决策边界2.1.4 随机梯度上升2.1.5 改进的随机梯度上升3. 示例:从疝气病症预测病马的死亡率4.课外例子 1、关于逻辑斯蒂回归 1.1 一般过程 收集数据: 准备数据 分析数据 训练算法 测试算法 使用算法 1.2 优缺点 优点 :计算代价不高,易于理解和实现

qq_45792429的博客 1823

逻辑斯蒂回归(Logistic regression)的建模过程

似然函数是统计学中一个非常重要的概念,它用于描述在给定一组参数下,观测到特定数据的概率。似然函数是概率密度函数(对于连续随机变量)或概率质量函数(对于离散随机变量)的函数,但将参数视为变量,而将数据视为常数。定义如下:假设我们有一个随机变量。

zhuxc_001的博客 1047

【阿旭机器学习实战】【8】逻辑斯蒂回归原理及实战

【阿旭机器学习实战】【8】逻辑斯蒂回归原理及实战

阿旭的博客 1243

学习笔记:逻辑斯蒂回归(logistic regression)

什么是逻辑斯蒂回归,参见维基百科的解释点击打开链接。 后面的参考博客已经给逻辑斯蒂回归做了很多基础东西的讲解(越是基础的东西越难讲清楚)。在这里我对逻辑斯蒂回归做一点自己的思考笔记。 问题: Q1,为什么选用logistic function? Q2,logistic regression到底在做什么? Q2,logistic regr

自然语言处理大菜鸟--HsingWang 4138

逻辑斯蒂回归(Logistic Regression,LR)及其损失函数(包含凸性推导)

Logistic Regression 对于一个二分类问题而言 表示样本 label为1的概率,取值范围为。 其中, Note: 则通过上述模型可以得出 另一个角度 一个事件发生的概率与不发生的概率的比值称为该事件的几率 (odds)。 逻辑斯蒂回归模型即的对数几率是输入 的线性函数(统计学习方法)。 Loss Function 一般经验来说,使用...

alwaysyxl的博客 1万+

逻辑斯蒂回归

逻辑斯蒂回归(Logistic Regression)是一个非常经典的算法,虽然被称为回归,但其实际上是分类模型,并常用于二分类。因为通过逻辑回归模型,我们得到的计算结果是0-1之间的连续数字,可以把它称为“可能性”(概率),然后,给这个可能性加一个阈值,就成了分类。逻辑回归因其简单、可并行化、可解释强深受工业界喜爱。

RainTicking的博客 3293

逻辑斯蒂回归实例-matlab

机器学习课程作业,自己编写matlab源代码,运行LogisticRegression即可

机器学习算法——逻辑斯蒂回归

逻辑斯蒂回归(Logistic Regression)是一种用于解决分类问题的机器学习算法。它是通过将线性回归模型的输出映射到一个概率值,然后根据这个概率值进行分类的。逻辑斯蒂回归假设因变量(要预测的变量)与自变量之间存在一个线性关系,然后使用逻辑函数(也称为sigmoid函数)将线性组合转化为概率值。

huangQK的博客 1482

基于Hadoop的NBA篮球球员大数据分析与可视化系统大数据分析系统python的项目(源码+lw+部署文档+讲解等)

本系统以 Hadoop 为基础,致力于对 NBA 篮球球员的海量数据进行深入分析与可视化呈现。它能够收集来自多个数据源的丰富数据,包括球员比赛统计数据、身体素质数据、技术特点数据等。利用 Hadoop 的分布式存储和计算能力,对这些大规模数据进行高效处理。通过数据分析算法,挖掘球员的潜在价值和特点,如球员的得分能力趋势、篮板球效率变化、不同位置球员的技术差异等。同时,借助先进的可视化技术,将分析结果以直观的图表、图形等形式展示出来。教练和球队管理层可以通过可视化界面清晰地了解球员的综合表现和发展态势,从而制

QQ3359892174的博客 1314

解决微信浏览器弹出 Download: Null 问题的终极指南(附阿里云 OSS 配置详解)

微信内置浏览器点击下载链接时弹出 "Download: Null" 的问题,是开发者常遇到的痛点。本篇文章全面解析其原因,包括 iOS 文件下载限制、Content-Disposition 响应头的重要性,以及阿里云 OSS 默认配置的影响。通过详细教程,教你如何在阿里云 OSS 中设置 Content-Disposition 元数据(attachment;filename=xxx.pdf),有效解决该问题。同时,拓展介绍微信浏览器的文件下载限制、跨平台兼容性优化以及 CDN 配置注意事项。

楠搏万的博客 3993

逻辑回归算法(Logistic Regression)原理(含多项逻辑斯蒂回归对参数求偏导的推导过程)及numpy代码实现

逻辑回归算法,虽然名字中带有“回归”二字,但解决的却是分类问题,它与线性回归之间有什么样的关系呢? 文章目录1.二项逻辑斯蒂回归对数几率函数对数几率函数的意义对数似然函数Python代码实现2.多项逻辑斯蒂回归3.总结 1.二项逻辑斯蒂回归 对数几率函数 首先来看二分类任务,考虑这样一个问题: 假设一组数据的分布如上图所示,如何建立一个模型将两个类别区分开来呢?线性回归模型z=WTx+bz = W ^{T}x + bz=WTx+b貌似可以解决这个问题,但是线性回归模型的输出值是一个实值,而二分类任务的输出标

weixin_44142858的博客 4040

【编号326】全国地灾数据全国25万多个地质灾害点空间分布数据

全国地质灾害点分布数据涵盖25万多个各类灾害点信息,为灾害防治提供重要依据。通过分析灾害分布规律,可识别高风险区,指导监测预警、应急避险和基础设施建设。多地成功案例(如湖北兴山崩塌避险、重庆长寿滑坡预警、湖南"挪床行动")证明,提前预警和科学防治能有效避免人员伤亡。云南省2024年通过预警体系成功避让31起灾害,保护1342人生命安全。这些实践表明,地质灾害防治需结合科技手段与群防体系,实现早预警、早处置。

千奇百怪无奇不有 1469

ML入门4.0 手写逻辑斯蒂回归 (Logistic Regression)

ML入门4.0 手写逻辑斯蒂回归 (Logistic Regression)逻辑斯蒂回归简介原理简介决策边界线性分割面的表达学习与分类损失函数第一种损失函数第二种损失函数第三种损失函数梯度下降法代码实现运行结果GitHub地址优缺点 逻辑斯蒂回归简介 Logistic Regression 即对数概率回归,是一种广义的线性回归分析模型,是一种应用于二分类问题的分类算法。 常用于数据挖掘,疾病自动诊断,经济预测等领域。例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。以胃癌病情分析为例,选择两

weixin_39956363的博客 1498

分布式优化 (Distributed Optimization) 算法详解及案例分析

分布式优化是一种将优化问题分解为多个子问题并在多个计算节点上并行求解的方法。其目标是通过分布式计算资源高效地求解大规模优化问题。

闲人编程的博客 2708

《深入浅出多模态》(四):多模态经典模型CLIP

本文为《深入浅出多模态》系列多模态经典模型CLIP,首先从整体介绍多模态模型发展,对其中经典CLIP模型进行详述,从具体论文、数据集、代码、模型结构、结果等角度分析,本专栏适合从事多模态小白及爱好者学习,欢迎大家关注,如有侵权请联系删除!

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 1045

机器学习Python学习——逻辑斯蒂回归(Logistic Regression)

1. 基本概念 Logistic回归也是一种分类方法,用于两分类问题。其基本思想为:(1)寻找合适的假设函数,即分类函数,用以预测输入数据的判断结果;(2)构造代价函数,即损失函数,用以表示预测的输出结果与训练数据的实际类别之间的偏差;(3)最小化代价函数,从而获取最优的模型参数。 Logistics回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,求解过程可以由最优化算法来完成。在最优化算法中,最常用的就是梯度上升算法,而梯度上升算法又可以简化为随机...

m0_52868215的博客 7632

OpenClaw使用ClawHub安装skill网络不稳定?Rate limit exceeded报错?试试这个国内高速镜像工具!

使用 ClawHub 安装 Skill 时遇到 🌐 网络不稳、❌ Rate limit 或命令不可用?使用这个镜像工具,轻松解决skill安装问题,⚡

XiaoqiangClub的博客 1260

学习笔记(二):逻辑斯蒂回归算法(Logistic Regression)

一、算法简介 1.1 定义 逻辑斯蒂回归(Logistic Regression) 虽然名字中有回归,但模型最初是为了解决二分类问题。 线性回归模型帮助我们用最简单的线性方程实现了对数据的拟合,但只实现了回归而无法进行分类。因此LR就是在线性回归的基础上,构造的一种分类模型。 对线性模型进行分类如二分类任务,简单的是通过阶跃函数(unit-step function),即将线性模型的输出值套上一个函数进行分割,大于z的判定为0,小于z的判定为1。 但这样的分段函数数学性质不好,既不连续也不

xdg2008的专栏 1200

【定位模块项目实战】正态分布变换(NDT)定位及建图(依赖高精度点云地图和三维激光雷达的定位方案)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、正态分布变换(NDT)定位解决的主要问题二、正态分布变换(NDT)定位的核心思想三、NDT算法流程1.多元正态分布概念2.网格化并计算正态分布参数3.变换参数和最大似然四、使用C++实现NDT配准参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对依赖高精度地图和激光雷达的定位技术–正态分布变换(NDT)定位做个简单的介绍,具体

qq_35635374的博客 4411

【Qt图书管理系统】5.完整版源码及下载地址

Qt图书管理系统完整源码下载。

小鱼酱的博客 7001

算法之逻辑斯蒂回归(Logistic regression)

本文详细介绍了逻辑斯蒂回归,并从理论上论证了从线性回归到逻辑斯蒂回归,详细描述了对数几率,最大似然估计,逻辑斯蒂回归的损失函数,并有算法的python代码

m0_66890670的博客 3163

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

机器学习笔记——pytorch实现逻辑斯蒂回归Logistic regression

参考视频——B站刘二大人《pytorch深度学习实践》

weixin_45978839的博客 1891

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

机器学习---逻辑斯蒂回归(logistic regression)

逻辑斯蒂的原理和应用

qingjj__的博客 2110

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

机器学习算法:逻辑斯蒂回归模型(logistic regression)

逻辑回归属于对数线性模型,学习算法有改进的迭代尺度算法和拟牛顿法 逻辑斯蒂分布 设X是连续随机变量,若X服从逻辑斯蒂分布,是指X具有以下分布函数和密度函数: 为位置参数(控制分布/密度函数坐标轴上位置),为形状参数(控制函数的形状),图形如下: 分布函数是逻辑斯蒂函数,是S型曲线,以为中心对称: 越小,曲线在中心的越陡。 二项逻辑斯蒂回归模型 是一种分类模型,...

guangyacyb的博客 3175

逻辑斯蒂回归(logistic regression)原理小结

1. 模型函数 2. 损失函数 3. 学习算法 4. 加正则项的逻辑斯蒂回归 5. 二分类 vs 多分类

小白的专栏 6449
上一篇: 朴素贝叶斯(Naive Bayes) | 算法实现
下一篇: 支持向量机(SVM) | SMO算法实现
Sudden|nebbuS
博客等级 码龄17年 112粉丝 35原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值