模型思想(为什么要正则):
众所周知,同样表现下模型参数值(自变量系数)越小越好,因为y = 214124x1 + 24421x2 + 3x3 这样的x有轻微变化都会引起y剧烈抖动,在高维情况更为明显。因此,在损失函数后加入正则可以减少这个问题从而防止过拟合。
正则:
L0 正则,NP-hard问题,e.g. 想让100个参数里只有10个参数不为0,那么哪10个呢?这就是个即使联立方程难以解决的问题。
L1正则,也叫Lasso,思想是在损失函数后面加上 系数 之和,从而让系数尽可能稀疏(让为0的参数尽可能多),因此可以被用来降维。
L2正则,也叫Ridge,思想是在损失函数后面加上 系数平方 之和,从而让每个系数值尽可能小。为什么呢?因为特征之间很难做到完全独立,因此,如果让系数稀疏的话会是的部分不为0的系数值会很大,从而使得平方会大---> 损失大。 因此,L2会让大多数系数 不为0,但是尽可能的小。
数据预处理:
为了减少数据相关性以及量纲对正则的影响,推荐Z-score标准化,同时使得每个特征均值为0,方差为1。
h(x1) = (h(x1)-mean(h(X)) / squareroot(sum of h(xi)*h(xi))
损失函数最小化方法:梯度下降,最小二乘,牛顿法,拟牛顿法。
Lasso是部分可导,因此可以用坐标轴下降法(分别在每个坐标轴找方向迭代寻优,不需要像梯度下降一样求导)和最小角回归法(找到与y最接近的x1,顺着x1走直到残差在x1和x2角平分线即根据最相关自变量系数开始?)。
logistic回归损失函数为对数似然函数。
目前效果好的求解方法:Momentum,Adam,RMSProp (简而言之,每次参数更新考虑了历史n个状态的参数更新)
FM(Factorization Machine)算法:
在线性回归基础上引入交叉项,考虑特征之间的关系。复杂度为线性,可以在稀疏情况下合理地估计参数。
度为2的模型为
需要xi与xj都不为0才可以训练wij,在稀疏情况下很难满足这个条件。因此为每个特征引入个长度为k的辅助向量V,使得Vi乘以VjT等于Wij。也就是为每个特征对应一个隐变量。
FFM则为每个特征对应n个隐变量(由于经过了one hot编码,可以根据实际特征种类来设置n)。
迭代求参时可以设置自适应学习率(随着迭代次数增加减少学习率)。