[数据挖掘]天池二手车交易价格预测-建模调参-DataWhale学习笔记(待补全)

一直都想快点能够进入模型预测部分,但是不知道是自己太磨叽还是怎样,看几个算法原理看到自闭,但是还是觉得需要了解清楚模型的原理才能够对症下药解决问题。时间有限,在这里并没有进入代码实践步骤,而是先搞清楚了LR,GBDT,XGBOOST几个算法大概的原理。先贴一下,等回血了再来改。

0.一些概念

预测交易价格是个名副其实的监督回归任务,其实对于回归任务风靡数据圈的大杀器应该是XGBOOST,但是我还是先从基础的LR搞起。
首先搞懂几个概念。
1.数学估计
数学估计即用一些手段估计数据整体的大概情况。数学估计分为有参数估计和无参数估计两个部分。
有参数估计从总体中抽取的随机样本来估计总体分布中未知参数的过程。即通过手中现有的数据来推断全部数据的本质规律。大概类似前几章EDA初期简单查看数据的手段,利用平均值、四分位数等来估计数据。
无参数估计则是根据样本(从总体中抽出来的一小部分数据)估计总体分布中所含未知参数或者未知参数的函数。无参数估计包括很多方法,矩估计法、最大似然法、贝叶斯估计法等等。

1.LR

线性回归在空间范围理解上,二维层面可以看作是一条直线,空间范围内可以看作一个平面。
计算式:
在这里插入图片描述
其中x代表一条样本[x1,x2,x3…xn],x1,x2,x3代表样本的各个特征,w是各个特征所占的权重,b是一个标量代表特征都为0时的预测值,可以视为模型的basis或者bias。
损失函数:
损失函数计算为真实值与回归值之间的偏差:
在这里插入图片描述
我们希望的是损失函数尽可能的小。LR大概我就先理解到这里(泪目)。

2.GBDT

好吧我们来看这个让我自闭的罪魁祸首。
下面这个原理部分主要参考下面的博客:https://www.cnblogs.com/ModifyRong/p/7744987.html
以及下面博客:https://blog.csdn.net/v_JULY_v/article/details/81410574
建议直接跳转这个博客,博主说得很清楚。
GBDT本质上是一个树模型,在进行分类时他会产生很多弱分类器(可以理解为一个个子树),但是由于BOOSTING的本质(即各个分类器之间是相互依赖,串行运行),会不断的在上一个弱分类器基础上进行迭代,迭代的依据是上一个分类器的残差(残差就是预测值和真实值之间的误差)。
如图所示:Y = Y1 + Y2 + Y3。
在这里插入图片描述引用博客中例子:
举一个非常简单的例子,比如我今年30岁了,但计算机或者模型GBDT并不知道我今年多少岁,那GBDT咋办呢?

它会在第一个弱分类器(或第一棵树中)随便用一个年龄比如20岁来拟合,然后发现误差有10岁;
接下来在第二棵树中,用6岁去拟合剩下的损失,发现差距还有4岁;
接着在第三棵树中用3岁拟合剩下的差距,发现差距只有1岁了;
最后在第四课树中用1岁拟合剩下的残差,完美。

构建特征:
GBDT和XGBOOST都是由一个个CART树构成的。CART顾名思义即分类回归树,classification and regression。CART树是一种二叉树。在特征选择的时候,GBDT会遍历数据的每一个特征,再遍历这个特征的每一个可能划分点,直到找到最有可能让CART树分叉的两边纯度最高的特征及其划分点。

def findLossAndSplit(x,y):
      # 我们用 x 来表示训练数据
      # 我们用 y 来表示训练数据的label
      # x[i]表示训练数据的第i个特征
      # x_i 表示第i个训练样本
  
      # minLoss 表示最小的损失
      minLoss = Integet.max_value
      # feature 表示是训练的数据第几纬度的特征
     feature = 0
     # split 表示切分点的个数
     split = 0
 
     # M 表示 样本x的特征个数
     for j in range(0,M):
         # 该维特征下,特征值的每个切分点,这里具体的切分方式可以自己定义
         for c in range(0,x[j]):
             L = 0
             # 第一类
             R1 = {x|x[j] <= c}
             # 第二类
             R2 = {x|x[j] > c}
             # 属于第一类样本的y值的平均值
             y1 = ave{y|x 属于 R1}
             # 属于第二类样本的y值的平均值
             y2 = ave{y| x 属于 R2}
             # 遍历所有的样本,找到 loss funtion 的值
             for x_1 in all x
                 if x_1 属于 R1: 
                     L += (y_1 - y1)^2 
                 else:
                     L += (y_1 - y2)^2
             if L < minLoss:
                minLoss = L
                feature  = i
                split = c
     return minLoss,feature ,split

总结为以下公式,j为特征,c为切分点
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值