大家知道,我们在进行建模时,会求解一个目标函数;目标函数又称代价函数,在机器学习中普遍存在,一般形式为:
o b j ( θ ) = L ( θ ) + Ω ( θ ) obj(\theta)=L(\theta)+\Omega(\theta) obj(θ)=L(θ)+Ω(θ);
其中:
L ( θ ) L(\theta) L(θ)为训练误差,衡量模型在训练集上的表现;
Ω ( θ ) \Omega(\theta) Ω(θ)是正则化惩罚,衡量模型的复杂度。
训练集误差: L = ∑ i = 1 n l ( y i , y i ^ ) L=\sum_{i=1}^{n}l(y_i,\hat{y_i}) L=∑i=1nl(yi,yi^)
square loss: l ( y i , y i ^ ) = ( y i − y i ^ ) 2 l(y_i,\hat{y_i})=(y_i-\hat{y_i})^2 l(yi,yi^)=(yi−yi^)2
logistic loss: l ( y i , y i ^ ) = y i l n ( 1 + e − y i ^ ) + ( 1 − y i ) l n ( 1 + e y i ^ ) l(y_i,\hat{y_i})=y_iln(1+e^{-\hat{y_i}})+(1-y_i)ln(1+e^{\hat{y_i}}) l(yi,yi^)=yiln(1+e−yi^)+(1−yi)ln(1+eyi^)
正则化惩罚:
L2 norm: Ω ( w ) = λ ∣ ∣ w ∣ ∣ 2 \Omega(w)=\lambda||w||^2 Ω(w)=λ∣∣w∣∣2
L1 norm(lasso): Ω ( w ) = λ ∣ ∣ w ∣ ∣ \Omega(w)=\lambda||w|| Ω(w)=λ∣∣w∣∣
机器学习实际上就是在给定的训练集上学习模型参数:优化训练误差使模型具有预测性;优化正则化让模型更简单,使预测更加稳定,降低过拟合风险。
一、xgboost
XGBoost是boosting算法的其中一种。Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。因为XGBoost是一种提升树模型,所以它是将许多树模型集成在一起,形成一个很强的分类器。而所用到的树模型则是CART回归树模型。
xgboost算法思想就是不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值。
xgboost目标函数objective: ∑ i = 1 n l ( y i , y i ^ ) + ∑ k = 1 k Ω ( f k ) \sum_{i=1}^{n}l(y_i,\hat{y_i})+\sum_{k=1}^{k}\Omega(f_k) ∑i=1nl(yi,yi^)+∑k=1kΩ(fk)
1、算法思想:
start from constant prediction, add a new function each time
y ^ ( 0 ) = 0 \hat y^{(0)}=0 y^(0)=0
y ^ ( 1 ) = f 1 ( x i ) = y ^ i ( 0 ) + f 1 ( x i ) \hat y^{(1)}=f_1(x_i)=\hat y_i^{(0)}+f_1(x_i) y^(1)=f1(xi)=y^i(0)+f1(xi)
y ^ ( 2 ) = f 1 ( x i ) + f 2 ( x i ) = y ^ i ( 1 ) + f 2 ( x i ) \hat y^{(2)}=f_1(x_i)+f_2(x_i)=\hat y_i^{(1)}+f_2(x_i) y^(2)=f1(xi)+f2(xi)=y^i(1)+f2(xi)
·······
y ^ ( t ) = ∑ k = 1 t f k ( x i ) = y ^ i ( t − 1 ) + f t ( x i ) \hat y^{(t)}=\sum_{k=1}^{t}f_k(x_i)=\hat y_i^{(t-1)}+f_t(x_i) y^