树形算法

2023-11-01

adaboost

二分类问题,给定一个数据集T={(x1,y1),(x2,y2)…,(xn,yn)} ,其中y取1和-1。

  1. **** 权值初始化,D1为第一轮的权重集合,w1i为第一轮第i个样本的权值

在这里插入图片描述
2. 用初始化权值的训练样本,训练出第一个基分类器。Gm(x)表示第m个基分类器。
在这里插入图片描述
3. 计算基分类器Gm(x)在训练数据上的分类误差率。I为一个输出只有0和1的函数,所有样本的权值都相同且权值之和为1,所以权值之和代表误差率。在之后调整权值之后,也就是分类错误的样本权值增大后,下一轮迭代为了降低误差率,就会尽量把拥有较大权值的上一轮分类错误样本判断正确。
在这里插入图片描述
4. 基学习器结合,通过特定的系数线性加和,这里的对数是自然对数,这个系数实际是在衡量基分类器在最终分类器重的作用大小。当em≤1/2时,am≥0,am随着em的减小而增大
在这里插入图片描述
5. 学习下一个基学习器之前要根据之前的预测结果来调整权值,Zm是规范化因子,它使Dm+1成为一个概率分布。这个规范化因子就是个总和,作为分母使得权值即使调整但仍然压缩在0到1之间,因为误差率就是错误样本的权值之和,而压缩在0到1之间对成为概率是非常必要的。在这里插入图片描述
在这里插入图片描述
6. 调整完权值之后,继续学出一个基学习器,然后循环直至基学习器的数量到达设定。然后将所有的基分类器线性组合起来f(x),最后得到最终分类器G(x)。最终分类器f(x)的符号决定样本的分类,而f(x)的绝对值表示 分类的确信程度。
在这里插入图片描述
在这里插入图片描述
AdaBoost的训练误差是以指数速率下降的。
AdBoost不容易过拟合,其实是不容易,完全不会是不可能的。

参考:https://blog.csdn.net/zhaojc1995/article/details/84800437

GBDT(回归问题)

1.初始化弱学习器,损失函数为平方损失,平方损失函数是一个凸函数,直接求导,倒数等于零,得到c,初始化时,c取值为所有训练样本标签值的均值。
在这里插入图片描述
2.对于m个学习器:
a.对每个样本i=1,2,…,N计算负梯度,即残差.
在这里插入图片描述
b.将上步得到的残差作为样本新的真实值,将数据(xi,rim)作为下棵树的训练数据,得到一颗新的回归树fm(x),其对应的叶子节点区域为Rjm,其中J为回归树t的叶子节点的个数。
c.对叶子区域j=1,2,…J计算最佳拟合值在这里插入图片描述
d.更新强学习器在这里插入图片描述
3.得到最终学习器在这里插入图片描述

参考:https://blog.csdn.net/zpalyq110/article/details/79527653

XGBOOST

1.传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,在使用线性分类器的时候可以使用L1,L2正则化。

2.传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数。在GBDT中我们通过求损失函数的负梯度(一阶导数),利用负梯度替代残差来拟合树模型。在XGBoost中直接用泰勒展开式将损失函数展开成二项式函数(前提是损失函数一阶、二阶都连续可导,而且在这里计算一阶导和二阶导时可以并行计算)。
在这里插入图片描述
在这里插入图片描述
上面式子把样本都合并到叶子节点中了。此时我们对wj求导并令导数为0,可得
![!](https://img-blog.csdnimg.cn/20190822174248842.png3.XGBoost3.在代价函数中加入了正则项,用于控制模型的复杂度。式子中的T为叶子节点数。XGBoost的提升模型也是采用残差,不同的是分裂结点选取的时候不一定是最小平方损失,其损失函数如下,较GBDT其根据树模型的复杂度加入了一项正则化项。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的Obj值代表当指定一个树结构时,在目标上面最多减少多少,我们可以把它称为结构分数。分数越小,树的结构越好。Gain 作为判断是否分割的条件,Gain是未分割前的Obj减去分割后的左右Obj,因此如果Gain<0,则此叶节点不做分割。
在这里插入图片描述
4.shrinkage(缩减),学习率。在寻找最佳分割点时,考虑到传统的贪心算法效率较低,实现了一种近似贪心算法,用来加速和减小内存消耗,除此之外还考虑了稀疏数据集和缺失值的处理,对于特征的值有缺失的样本,XGBoost依然能自动找到其要分裂的方向。在逻辑实现上,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,计算增益后选择增益大的方向进行分裂即可。可以为缺失值或者指定的值指定分支的默认方向,这能大大提升算法的效率。如果在训练中没有缺失值而在预测中出现缺失,那么会自动将缺失值的划分方向放到右子树。
split and default directions with max gain!

5.支持列抽样,防止过 拟合,还能减少计算。采用特征子采样方法,和RandomForest中的特征子采样一样,可以降低模型的方差。

6.XGBoost工具支持并行。XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。决策树的学习最耗时的一个步骤就是对特征的值进行排序(要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

block:

Block中的数据以稀疏格式CSC进行存储。csc的目的是为了压缩矩阵,减少矩阵存储所占		    
用的空间,手法无法就是通过增加一些"元信息"来描述矩阵中的非零元素存储的位置(基于
列),然后结合非零元素的值来表示矩阵。这样在一些场景下可以减少矩阵存储的空间。
Block中的特征进行排序(不对缺失值排序),且只需要排序一次,以后分裂树的过程可以复用。

参考:https://blog.csdn.net/qq_28031525/article/details/70207918
关于并行:https://blog.csdn.net/anshuai_aw1/article/details/85093106
关于缺失值:https://www.jianshu.com/p/5b8fbbb7e754

lightgbm

LightGBM的优化部分:
一、基于Histogram的决策树算法

histogram算法简单来说,就是先对特征值进行装箱处理,形成很多的bins。对于连续特征来说,装箱处理就是特征工程中的离散化:如[0,0.3)—>0,[0.3,0.7)—->1等。在Lightgbm中默认的#bins为256(1个字节的能表示的长度,可以设置)。对于分类特征来说,则是每一种取值放入一个bin,且当取值的个数大于max bin数时,会忽略那些很少出现的category值。

在histogram算法上一个trick是histogram 做差加速。一个容易观察到的现象:一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到。利用这个方法,Lightgbm 可以在构造一个叶子(含有较少数据)的直方图后,可以用非常微小的代价得到它兄弟叶子(含有较多数据)的直方图。

优势:
1.Pre-sorted 算法需要的内存约是训练数据的两倍,它需要用32位浮点(4Bytes)来保存 feature value,并且对每一列特征,都需要一个额外的排好序的索引,这也需要32位(4Bytes)的存储空间,一共是是(2 * data * features* 4Bytes)。而对于 histogram 算法,则只需要(#data * #features * 1Bytes)的内存消耗,仅为 pre-sorted算法的1/8。因为 histogram 算法仅需要存储 feature bin value (离散化后的数值),不需要原始的 feature value,也不用排序,而 bin value 用 1Bytes(256 bins) 的大小一般也就足够了。

2.大幅减少了计算分割点增益的次数。对于每一个特征,pre-sorted 需要对每一个不同特征值都计算一次分割增益,代价是O(#feature*#distinct_values_of_the_feature);而 histogram 只需要计算#bins次,代价是(#feature*#bins)。数据越多,速度差距越明显。

3.还有一个很重要的点是cache-miss。cache-miss对速度的影响特别大。预排序中有2个操作频繁的地方会造成cache miss,一是对梯度的访问,在计算gain的时候需要利用梯度,不同特征访问梯度的顺序都是不一样的,且是随机的,因此这部分会造成严重的cache-miss。二是对于索引表的访问,预排序使用了一个行号到叶子节点号的索引表(row_idx_to_tree_node_idx ),来防止数据切分时对所有的数据进行切分,即只对该叶子节点上的样本切分。在与level-wise进行结合的时候, 每一个叶子节点都要切分数据,这也是随机的访问。这样会带来严重的系统性能下降。而直方图算法则是天然的cache friendly。在直方图算法的第3个for循环的时候,就已经统计好了每个bin的梯度,因此,在计算gain的时候,只需要对bin进行访问,造成的cache-miss问题会小很多。

劣势:
histogram 算法不能找到很精确的分割点,训练误差没有 pre-sorted 好。但从实验结果来看, histogram 算法在测试集的误差和 pre-sorted 算法差异并不是很大,甚至有时候效果更好。实际上可能决策树对于分割点的精确程度并不太敏感,而且较“粗”的分割点也自带正则化的效果,再加上boosting算法本身就是弱分类器的集成

参考:https://blog.csdn.net/anshuai_aw1/article/details/83040541

二、 带深度限制的 Leaf-wise 的叶子生长策略
Level-wise 过一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。实际上 Level-wise 是一种低效的算法,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。Leaf-wise 则是一种更为高效的策略,每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同 Level-wise 相比,在分裂次数相同的情况下,Leaf-wise 可以降低更多的误差,得到更好的精度。Leaf-wise 的缺点是可能会长出比较深的决策树,产生过拟合。因此 LightGBM 在 Leaf-wise 之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。

三、直接支持类别特征
A. 离散特征建立直方图的过程:

统计该特征下每一种离散值出现的次数,并从高到低排序,并过滤掉出现次数较少的特征值, 然后为每一个特征值,建立一个bin容器, 对于在bin容器内出现次数较少的特征值直接过滤掉,不建立bin容器。

B. 计算分裂阈值的过程:

B.1
先看该特征下划分出的bin容器的个数,如果bin容器的数量小于4,直接使用one vs other方式, 逐个扫描每一个bin容器,找出最佳分裂点;

B.2
对于bin容器较多的情况, 先进行过滤,只让子集合较大的bin容器参加划分阈值计算, 对每一个符合条件的bin容器进行公式计算(公式如下: 该bin容器下所有样本的一阶梯度之和 / 该bin容器下所有样本的二阶梯度之和 + 正则项(参数cat_smooth),这里为什么不是label的均值呢?其实上例中只是为了便于理解,只针对了学习一棵树且是回归问题的情况, 这时候一阶导数是Y, 二阶导数是1),得到一个值,根据该值对bin容器从小到大进行排序,然后分从左到右、从右到左进行搜索,得到最优分裂阈值。但是有一点,没有搜索所有的bin容器,而是设定了一个搜索bin容器数量的上限值,程序中设定是32,即参数max_num_cat。
LightGBM中对离散特征实行的是many vs many 策略,这32个bin中最优划分的阈值的左边或者右边所有的bin容器就是一个many集合,而其他的bin容器就是另一个many集合。

B.3
对于连续特征,划分阈值只有一个,对于离散值可能会有多个划分阈值,每一个划分阈值对应着一个bin容器编号,当使用离散特征进行分裂时,只要数据样本对应的bin容器编号在这些阈值对应的bin集合之中,这条数据就加入分裂后的左子树,否则加入分裂后的右子树。
https://blog.csdn.net/anshuai_aw1/article/details/83275299

四丶LightGBM并行优化

  • Feature Parallel
    特征并行算法目的是在决策树生成过程中的每次迭代,高效地找到最优特征分裂点。特征并行的主要思想是在不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。

传统的特征并行算法

根据不同的特征子集,将数据集进行垂直切分。(不同机器worker有不同的特征子集)
每个worker寻找局部的最优分裂特征以及分裂点。
不同worker之间进行网络传输,交换最优分裂信息,最终得到最优的分裂信息。
具有最优分裂特征的worker,局部进行分裂,并将分裂结果广播到其他worker。
其他worker根据接收到的数据进行切分数据。
该方法不能有效地加速特征选择的效率,当数据量#data很大时,该并行方法不能加快效率。并且,最优的分裂结果需要在worker之间进行传输,需要消耗很多的传输资源以及传输时间。

LightGBM的特征并行算法

LightGBM并没有垂直的切分数据集,而是每个worker都有全量的训练数据,因此最优的特征分裂结果不需要传输到其他worker中,只需要将最优特征以及分裂点告诉其他worker,worker随后本地自己进行处理。处理过程如下:

每个worker在基于局部的特征集合找到最优分裂特征。
workder间传输最优分裂信息,并得到全局最优分裂信息。
每个worker基于全局最优分裂信息,在本地进行数据分裂,生成决策树。
然而,当数据量很大时,特征并行算法还是受限于特征分裂效率。因此,当数据量大时,推荐使用数据并行算法。

  • Data Parallel
    传统的数据并行算法

水平切分数据集。
每个worker基于数据集构建局部特征直方图(Histogram)。
归并所有局部的特征直方图,得到全局直方图。
找到最优分裂信息,进行数据分裂。
缺点:网络传输代价比较大,如果使用point-to-point的传输算法,每个worker的传输代价为O(#machine * #feature * #bin). 如果使用All Reduce并行算子,传输代价为O(2* #feature * #bin).

LightGBM的数据并行算法

LightGBM算法使用Reduce Scatter并行算子归并来自不同worker的不同特征子集的直方图,然后在局部归并的直方图中找到最优局部分裂信息,最终同步找到最优的分裂信息。
除此之外,LightGBM使用直方图减法加快训练速度。我们只需要对其中一个子节点进行数据传输,另一个子节点可以通过histogram subtraction得到。
LightGBM可以将传输代价降低为O(0.5 * #feature * #bin)。

基于投票的并行算法
基于投票机制的并行算法,是在每个worker中选出top k个分裂特征,然后将每个worker选出的k个特征进行汇总,并选出全局分裂特征,进行数据分裂。有理论证明,这种voting parallel以很大的概率选出实际最优的特征,因此不用担心topk的问题。

参考:https://blog.csdn.net/ictcxq/article/details/78736442

并行算子:数据并行方式的训练过程中,每个计算节点只对自己存放的数据进行计算得到局部结果,然后再对局部结果进行全局归约。在并行计算中,数值归约是非常重要且使用频率非常高的一种操作。数值归约算法实现方式的好坏直接影响整个计算过程的速度。常用的一些归约算子包括:Allreduce、Reduce、Allgather、Broadcast、ReduceScatter等。
https://blog.csdn.net/qrqpjxq/article/details/78625574

参考:https://blog.csdn.net/weixin_39807102/article/details/81912566#1-lightgbm%E5%8E%9F%E7%90%86

bagging和boosting

Bagging组合算法是bootstrap aggregating的缩写。我们可以让上述决策树学习算法训练多轮,每轮的训练集由从初始的训练集中有放回地随机抽取n个训练样本组成,某个初始训练样本在某轮训练集中可以出现多次或根本不出现,训练之后就可以得到一个决策树群h_1,……h_n ,也类似于一个森林。最终的决策树H对分类问题采用投票方式,对回归问题采用简单平均方法对新示例进行判别

Boosting组合算法

此类算法中其中应用最广的是AdaBoost(Adaptive Boosting)。在此算法中,初始化时以等权重有放回抽样方式进行训练,接下来每次训练后要特别关注前一次训练失败的训练样本,并赋以较大的权重进行抽样,从而得到一个预测函数序列h_1,⋯, h_m , 其中h_i也有一定的权重,预测效果好的预测函数权重较大,反之较小。最终的预测函数H对分类问题采用有权重的投票方式,所以Boosting更像是一个人学习的过程,刚开始学习时会做一些习题,常常连一些简单的题目都会弄错,但经过对这些题目的针对性练习之后,解题能力自然会有所上升,就会去做更复杂的题目;等到他完成足够多题目后,不管是难题还是简单题都可以解决掉了。

区别

1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等

Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

Bagging:所有预测函数的权重相等。

Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

Bagging:各个预测函数可以并行生成

Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

5)这个很重要面试被问到了

为什么说bagging是减少variance,而boosting是减少bias?
在这里插入图片描述

bagging中的模型是强模型,偏差低,方差高。目标是降低方差。在bagging中,每个模型的bias和variance近似相同,但是互相相关性不太高,因此一般不能降低Bias,而一定程度上能降低variance。典型的bagging是random forest。

boosting中每个模型是弱模型,偏差高,方差低。目标是通过平均降低偏差。boosting的基本思想就是用贪心法最小化损失函数,显然能降低偏差,但是通常模型的相关性很强,因此不能显著降低variance。典型的Boosting是adaboost,另外一个常用的并行Boosting算法是GBDT(gradient boosting decision tree)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树形算法 的相关文章

  • 机器学习算法——K-近邻算法(代码实现手写数字识别)

    0 引言 xff0c K 近邻算法是一种非常有效的分类算法 xff0c 它非常有效且易于掌握 原理 xff1a K 近邻算法通过计算不同样本之间的距离来分类物品 使用前 xff0c 我们需要有一个训练样本集 xff0c 并且样本集中每个数据
  • adaboost和朴素贝叶斯算法简述

    adaboost和朴素贝叶斯算法简述 adaboost原理基本步骤基本应用 朴素贝叶斯算法原理基本步骤基本应用 adaboost原理 前一个基本分类器分错的样本会得到加强 xff0c 加权后的全体样本再次被用来训练下一个基本分类器 同时 x
  • 机器学习算法(一):逻辑回归模型(Logistic Regression, LR)

    目录 1 LR 1 1 直观表述 1 2 决策边界 Decision Boundary 2 权值求解 2 1 代价函数 似然函数 2 1 1 为什么损失函数不用最小二乘 即逻辑斯蒂回归损失函数为什么使用交叉熵而不是MSE 2 1 2 代价函
  • CNN的重点整理

    1 常用的非线性激活函数 sigmoid tanh relu等等 前两者sigmoid tanh比较常见于全链接层 后者relu常见于卷积层 这里先简要介绍下最基础的sigmoid函数 btw 在本博客中SVM那篇文章开头有提过 sigmo
  • 机器学习三-xmeans

    能力有限 只是表面上理解了公式和图所表达的内容 论文参见 点击打开链接 已有文章分析参见 点击打开链接 具体java代码实现 点击打开链接 核心应该是 分割前BIC分数 gt 分割后BIC分数 结论是 原簇可分割为两个新簇 图示如下 公式如
  • 多维时序

    多维时序 Matlab实现GRU Adaboost和GRU多变量时间序列预测对比 目录 多维时序 Matlab实现GRU Adaboost和GRU多变量时间序列预测对比 预测效果 基本介绍 模型描述 程序设计 参考资料 预测效果 基本介绍
  • 算法实践1_线性回归

    参数解释 sklearn linear model LinearRegression fit intercept True normalize False copy X True n jobs None 超参 解释 类型 默认值 fit i
  • 树形算法

    树形算法 adaboost GBDT 回归问题 XGBOOST lightgbm bagging和boosting 区别 adaboost 二分类问题 给定一个数据集T x1 y1 x2 y2 xn yn 其中y取1和 1 权值初始化 D1
  • 线性分类模型(二):logistic回归模型分析

    前言 上一篇文章介绍了线性判别模型 本文介绍线性生成模型 logistic回归模型 本文介绍logstic回归模型相关的知识 为了更好理解模型的决策边界函数 本文同时分析了多元变量的协方差对概率分布的影响 目录 1 logistic回归模型
  • 集成学习思想

    一 集成学习 Ensemble Learning 集成学习的思想是将若干个学习器 分类器 回归器 组合之后产生一个新的学习器 集成学习的主要思想 1 Bagging 代表算法是随机森林 Random Forest 2 Boosting 代表
  • 数据预测分析

    数据预测分析 Matlab实现TCN时间卷积网络数据预测分析 目录 数据预测分析 Matlab实现TCN时间卷积网络数据预测分析 基本介绍 数据下载 程序设计 参考资料 致谢 基本介绍 此示例说明如何使用通用时间卷积网络 TCN 对序列数据
  • 推荐系统详解

    1 基于内容的推荐系统 1 基于内容的推荐算法概述 基于内容的推荐算法 Content based Recommendations CB 也是一种工业界应用比较广的一种推荐算法 由于协同过滤推荐算法中仅仅基于用户对于商品的评分进行推荐 所以
  • 关于Pytorch中的向量拼接

    torch cat A torch ones 2 4 print A B 2 torch ones 2 4 print B C torch cat A B 0 print C D torch cat A B 1 print D A的输出 t
  • Transformer详解

    Transformer 什么是transformer 为什么需要用transformer encoder sub encoder block multi head self attention FFN input decoder input
  • pandas数据判断是否为NaN值的方式

    实际项目中有这样的需求 将某一列的值 映射成类别型的数据 这个时候 需要我们将范围等频切分 或者等距切分 具体的做法可以先看某一些特征的具体分布情况 然后我们选择合适的阈值进行分割 def age map x if x lt 26 retu
  • KNN算法优缺点、原理及参数最优解

    文章目录 1 KNN算法简介 1 1 简述 1 2 优缺点 1 3 适用数据范围 2 工作原理 2 1 训练样本集 2 2 电影类别的KNN分析 如何进行电影分类 在这里插入图片描述 2 3 欧几里得距离 Euclidean Distanc
  • 机器学习2-线性回归

    一 矩阵求导公式 1 总体情况 2 分子布局 Numerator layout 和分母布局 Denominator layout 首先我们常说 y 对 x 求导 这里的 y 和 x 均默认为列向量 y为 mx1 x为 nx1 1 分子布局
  • 人工智能-10种机器学习常见算法

    机器学习是目前行业的一个创新且重要的领域 今天 给大家介绍机器学习中的10种常见的算法 希望可以帮助大家适应机器学习的世界 1 线性回归 线性回归 Linear Regression 是目前机器学习算法中最流行的一种 线性回归算法就是要找一
  • openCV c++:使用 XgBoost(Adaboost 分类器)时出现问题

    我正在创建一个应用程序 用于对城市环境图像中的人类进行分类 我通过以下方式训练分类器 int main int argc char argv STEP 2 Opening the file 1 Declare a structure to
  • 如何使用 AdaBoost 增强基于 Keras 的神经网络?

    假设我为二元分类问题拟合以下神经网络 model Sequential model add Dense 21 input dim 19 init uniform activation relu model add Dense 80 init

随机推荐

  • 20220614 笔记

    文章目录 第一章 引 论 1 2 为什么要进行软件测试 1 3 什么是软件测试 1 4 软件测试和软件开发的关系 SQA 软件测试与Sqa的关系 4种导向 5大学派 第二章 软件测试的基本概念 2 1 2 软件缺陷定义 2 1 5 修复软件
  • mysql实现分组查询每个班级的前三名

    mysql实现分组查询每个班级的前三名 set character set server utf8mb4 DROP TABLE IF EXISTS student CREATE TABLE IF NOT EXISTS student id
  • 30个实操技巧--闲鱼无货源模式

    闲鱼是一个把家里的闲置物品放到平台上二手转卖 从而获得对应的资金的平台 但是有些人懒得去寄快递但又想赚到钱 这就出来了闲鱼无货源 虽然闲鱼的门槛比较低 没有成本的投入 但是 也不是你想做就能做的 首先 自己不懂怎么做 就算开个店铺也是凉凉
  • 完美解决ViewPager+Fragment二次加载空白问题

    ViewPager Fragment使用的还是比较频繁的 但是当我打开应用第一次进入时很正常 然而第二次进入的时候却显示的是空白 当时感觉很是迷茫 可是仔细一查 原来是第二次加载的时候重复调用了onCreateView 这个方法 重新new
  • IDEA中超级好用的十余款插件,你用过多少

    IDEA中超级好用的十余款插件 插件一 Background Image Plus 插件二 CodeGlance插件 2019版本自带 插件三 translation 翻译插件 插件四 Rainbow Brackets 彩色括号 插件五 g
  • SPSS多元线性回归残差分析的基本方法

    写这篇博客 也是觉得网上很多人没有把这个讲清楚 据这个网页中的网友介绍 残差分析包括以下内容 残差是否服从均值为零的正态分布 残差是否为等方差的正态分布 残差序列是否独立 借助残差探测样本中的异常值 其中 判断残差的分布可以在SPSS中通过
  • 基于fpga的舵机控制(MG995)

    1 MG995舵机原理 a 这是一款由脉冲控制的舵机 周期为20ms 高脉冲部分所占多少就决定了舵机转动多少度 b 高脉冲部分与角度关系 0 5ms 0 1ms 45 1 5ms 90 2ms 135 2 5ms 180 2 设计需求 通过
  • C++ break 语句

    C 中 break 语句有以下两种用法 当 break 语句出现在一个循环内时 循环会立即终止 且程序流将继续执行紧接着循环的下一条语句 它可用于终止 switch 语句中的一个 case 如果您使用的是嵌套循环 即一个循环内嵌套另一个循环
  • Kioptrix Level 2-writeup

    Kioptrix Level 2 writeup 0x00 信息收集 目标机器 16 16 16 178 kali攻击机 16 16 16 177 使用nmap来个端口服务扫描 浏览器打开http 16 16 16 178看看 第一眼看上去
  • Java爬虫-使用爬虫下载千张美女图片!

    目的 爬取搜狗图片上千张美女图片并下载到本地 准备工作 爬取地址 https pic sogou com pics query E7 BE 8E E5 A5 B3 分析 打开上面的地址 按F12开发者工具 NetWork XHR 页面往下滑
  • Python:关于RollRate&Vintage的研究与应用

    RollRate 在当前催收水平下 不同逾期天数转换为坏账的概率 Vintage 通过账龄分析评估放款的质量 其中 逾期率的计算有两种方式 第一种 应收口径下 风险偏好偏保守 分子 已逾期的借款其所有已到期但未还本金和未到期本金 全部计入逾
  • 从QWindow到QWidget(Qt5)

    Qt5下 QWidget系列从QtGui中被剥离出去 成为单独的QtWidget模块 随着Qt Quick2的引入 QtDeclarative也逐渐和QWidget系列也脱离关系 最终 在Qt5下的GUI编程 有两套不同的东西 QtWidg
  • 机器学习之梯度提升树(机器学习技法)

    梯度提升树模型 Gradient Boosted Decision Tree 与随机森林的对比 前面提到的随机森林使用Bagging的方式融合起来 也就是使用bootstrapping进行抽样得到不同的样本再加上不同的特征选择训练出不同的决
  • RNN->LSTM->BiLSTM神经网络结构

    最近在学习 自然语言处理 基于预训练模型的方法 打打公式吧 RNN Recurrent Neural Network h t t a n h
  • 软件测试简历项目经验怎么写,没有项目经验?

    怎么办 只能接受低薪工作吗 No No No 本文就教大家如何解决这个问题 为了帮助大家彻底解决 没有项目 这个拦路虎 接下来文章将从以下几个方面进行展开 1 应该去哪找项目 2 在众多的项目中 该怎么挑选适合自己的 3 找到一个项目 应该
  • labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换

    目录 1 labelimg标注VOC格式和yolo格式介绍 1 1 voc格式 1 2 yolo数据格式介绍 2 voc格式数据和yolo格式数据相互转换 2 1 voc转yolo代码 2 2 yolo转voc格式代码 1 labelimg
  • 解决项目中出现的404 Not Found nginx/1.15.0

    1 配置好nginx php环境 运行 sudo nginx sudo php fpm 2 将项目放在服务器运行目录中 usr local var www 3项目为 newdailian 配置好数据库导入数据dailian sql 4 由于
  • finclip小程序代码结构与微信小程序代码结构

    微信小程序代码结构 JSON 配置 JSON 是一种数据格式 并不是编程语言 在小程序中 JSON扮演的静态配置的角色 我们可以看到在项目的根目录有一个 app json 和 project config json 此外在 pages lo
  • Android自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题

    使用ImageView会遇到的问题 在Android应用中 都少不了图片的显示 ImageView 轮播图 ViewPager等等 很多都是来显示图片的 比如一个广告条的轮播效果 参看博客 广告条效果实现 ViewPager加载大图片 Lr
  • 树形算法

    树形算法 adaboost GBDT 回归问题 XGBOOST lightgbm bagging和boosting 区别 adaboost 二分类问题 给定一个数据集T x1 y1 x2 y2 xn yn 其中y取1和 1 权值初始化 D1