下面这个人的笔记做的还不错
http://www.cnblogs.com/jianzhitanqiao/p/5488659.html
1. Logistic回归的决策函数是sigmoid函数,那么它的判定边界怎么求
突然想通了,是f(z) = sigmoid(z)
当z >0时,输出1
当z<0时,输出0
那么函数z=0就是判定边界
关于z的解析式可以是高次的多项式函数
逻辑回归的损失函数:---如果将sigmoid函数代入最小二乘会得到一条并不收敛的曲线
sigmoid最小二乘损失函数Logistic回归损失函数若使用最小二乘得到的是非凸函数,容易陷入局部的极小值。
解决方法:
似然函数costfunc似然函数进行极大似然估计
加入L2正则
LR对于样本的处理
样本太大怎么办?
1. 采样再 LR
2. 分布式上 spark mllib
3. 将特征 离散化为 0-1,这样虽然训练数据量没有变,特征向量还变长了,
但是 因为 0-1 操作,使得计算速度变快
4. 连续值的特征,最好 scaling一样,使得因子图 不是 特别的细长,而是 圆形,这样利于优化的速度,这个也是可以 加速训练的
--注意样本的平衡
·-》对样本分布敏感
--》下采样 --》上采样
--》修改loss func 给予不同权重
--》采样后的预测结果,用排序作ok,用作判定请还原
--使用LR 的tech关于特征的聚类
提前,将一些特征先 hash,比如 uuid?
---LR也能用于特征选择(去除theta为0的特征,选择theta大的特征)
-------------关于模型调优
假设只看模型:
---选择合适的正则化(L1,L2,L1+L2):L2的准确度高一些,但是收敛时间长一些。L1是截断性效益【可以做一定程度的特征选择,数据量特别大用L1】
--正则化系数C(lambda)【表示惩罚程度有多高】
--收敛阈值e,迭代次数
--调整loss func给定不同权重
Bagging或其他方式的模型融合
--最优化算法选择(‘newton-cg’,'lbfgs'--spark里面用的这个,'liblinear'--默认使用梯度下降,'sag')
小样本liblinear
大样本sag
多分类‘newton-cg’和‘lbfgs’【也可以用liblinear和sag的one-vs-rest】
-----liblinear--常用库【台湾大学】
--------存储方式:libsvm稀疏向量存储格式,海量数据下单机速度还ok
-------高维度离散化特征,准确率逼近非线性切分
------参数调节方便
SKlearn中的LR实际上就是liblinear封装的
L1正则和L2正则的区别
L2正则是一种缩放效应,会让大部分特征都拿到权重但是,幅度小
L1正则是截断式效应,有可能很多特征的权重会变为0
2. SVM适合数据量比较小的情况,因为计算量大
并且对于非均衡样本,效果较差
网友评论