上文提到了一个高效的树集成算法Xgboost模型,但是在处理特征维度和数据量较大的数据时,效率仍然是低迷的。相比于GBDT和Xgboost等模型,微软开源的Lightgbm模型采用了各种手段来降低数据量和数据特征维度,从而大大提高了模型的训练速度也确保了准确率。
How to do
为了降低因大量的实例数和较高的特征维度对模型训练的影响,一个自然的想法就是减少数据实例数和特征维度。而Lightgbm模型采取的方案分别为:Gradient-based
One-Side Sampling(GOSS)和Exclusive Feature Bundling(EFB)。
GOSS
这其实是一种...
今天想起好久都没更新过我的博客了,最近都在忙着笔试面试之类的,还要毕业设计。刚好今天告一段落了,索性整理一下前几天复习的Xgboost模型,发一篇博文。
树的集成
集成算法在机器学习中是一个很广泛,很重要的算法,一般分为Bagging和Boosting两种。决策树的集成自然是一个惯用手段。对于树的集成,Bagging方法的代表是随机森林(Random
Forest),它将属性和数据随机分组进行决策树学习,最后再统计结果;Boosting方法的代表是AdaBoost、GBDT(梯度提升决策树)。这几个算法都挺重要的,不是一两句话能概括得了的,所以就不展开讲了。而在树的Boosting中...
最优化是一个十分困难的问题,通常要精心设计一个目标函数及相关约束,同时还要确保所要优化的问题为凸函数,但现实中的问题大多为非凸函数,针对非凸优化问题,这里有一些基本的优化方法:SGD、Momentum、AdaGrad、RMSProp及Adam等
随机梯度下降(Stochastic
Gradient Descent, SGD)
// 随机梯度下降
给定数据集\(X=\\{x^{(1)},x^{(2)},...,x^{(n)}\\}\),
数据集标记\(Y=\\{y^{(1)},
y^{(2)},...,y^{(n)}\\}\)
学习器\(f(x;w)\),
学习率(步长)\(\alp...
CTR(点击率)预测在内容推荐投放中有着重要地位,而FFM模型擅长于处理这方面的数据,FFM模型是FM模型的变种,或者说FM模型是FFM模型的特例
大致流程
转换数据集格式(采用LIBSVM或FFMs式)
计算损失函数(采用指数损失函数)
优化参数(采用AdaGrad+SG策略)
转换数据格式
LIBSVM格式(不储存0值特征):
\[
label \quad feat1:val1 \quad feat2:val2 \quad ... \quad
\]
FFMs格式:
\[label \quad field1:feat1:val1 \quad
field2:feat2:val2 ...
决策树,一种常见的机器学习方法,有种类似于流程图那样的。就是对一个样本按其某个特征的取值将其划分到一个集合中,并递归下去
基本算法
Input: 训练集\(D=\\{(\mathbf{x_1},y_1),(\mathbf{x_2},y_2),...,(\mathbf{x_m},y_m)\\}\);
属性集\(A=\\{a_1,a_2,...,a_d\\}\)
Output: 以node为根结点的一颗决策树
简单过程:
以某一划分标准,选择最优的特性来划分样本,这样递归下去,最终得到决策树的分支结点
重要的是找到一当前的最优划分属性,使决策树的分支结点所包含的样本尽可能属于同一类别,即...
这次整理一下常用的scikit-learn包,作为备忘
K近邻算法:
from
sklearn.neighbors import KNeighborsClassifier
线性回归:
from
sklearn.linear_model import LinearRegression
逻辑回归:
from
sklearn.linear_model import LogisticRgression
决策树:
from
sklearn.tree import DecisionTreeClassifier
朴素贝叶斯:
高斯分布:from
sklearn.neive_bayes impor...
贝叶斯决策论考虑的是如何基于相关的概率和误判损失来选择最优的类别标记
假设有N种可能的类别标记,即\(\mathbf{y}=\\{c_1,c_2,...,c_N\\}\),\(\lambda_{ij}\)是将一个真实标记为\(c_j\)的样本误分类为\(c_i\)所产生的损失。基于后验概率\(P(c_i\vert\mathbf{x})\)可获得将样本\(\mathbf{x}\)分类为\(c_i\)所产生的期望损失,即在样本\(\mathbf{x}\)上的“条件风险”:
\[R(c_i\vert\mathbf{x})= \ \sum_{j=1}^N
\lambda_{ij}P(c_j...
SVM是机器学习里面一个非常重要的模型,它是由统计学习理论之父弗拉基米尔·瓦普尼克提出的
本文以SVM二分类为例
推导过程
给定训练数据集\(D=\\{(\mathbf{x_1},y_1),(\mathbf{x_2},y_2),...,(\mathbf{x_m},y_m)\\},
y_i \in \\{-1,
+1\\}\),分类器最基本的想法就是基于训练集D在样本空间中找到一个划分空间,将不同类别的样本分开。划分超平面可用如下的线性方程描述:
\[
{\mathbf{w}}^T\mathbf{x}+b=0\]
其中\(\mathbf{w}=(w_1;w_2;...;w_d)\)为法...
好久没更博客了,停了大半年,也看了大半年的机器学习和深度学习方面的书籍,现在是时候输出一下了
线性回归
给定数据集\(D=\\{(\mathbf{x_1},y_1),(\mathbf{x_2},y_2),...,(\mathbf{x_m},y_m)\\}\),其中\(\mathbf{x_i}=(x_{i1};x_{i2};...;x_{id}), \ y_{i}
\in R\). 线性回归试图学得一个线性模型
\[f(x_i)=wx_i+b\]
使得\(f(x_i)\simeq y_i\).
推导过程
考虑使用MSE(均方差误差)来衡量模型好坏,则有损失函数\(L(w,b)\):
\...
G++是Unix/Linux下C++的编译器,gdb则是Unix/Linux下有力的调试工具。大多数时候,我们编写的C/C++代码并不是运行在Windows上,而是在Linux系统上跑。这里我记录了一些有关于g++和gdb的一些使用方法以备不时之需。
g++的使用
g++在执行编译工作的时候,总共需要4步:
预处理,生成.i的文件,主要是头文件和宏定义的展开:g++ -E test.cpp -o test.i
编译,将预处理后的文件转换成汇编语言,生成文件.s:
g++ -S test.i -o test.s
汇编,有汇编变为目标代码(机器代码)生成.o的文件,主要是将.s文件转为...