作排序的话用LR和NN比较多,像GBDT这种模型也是能够输出几率值。面试
能不能找一函数将连续的y值约束到某一个范围内,常见的范围是0-1(几率)。 算法
这是非凸函数,即有不少个洼点。 网络
损失函数不必定都要求是非凸的,神经网络里面用的loss function就是非凸的,不过他用的是SGD,保证随机找一个接近全局最优势便可。函数
在负样本的状况下,若是h_θ(x)预测出来是正样本几率很高0.99,那么损失函数负log以后的损失值也会很是大。学习
若是预测的值和我真实的值差异越大,那么损失函数计算的结果值就会越大。优化
可是现实中的分类通常是多分类,不是二分类,在多分类的状况下,使用的是上面式子的拓展形式。3d
在样本不均衡的状况,经过下采样等方式让样本尽可能均衡。cdn
上采样,经过拷贝样原本达到样本均衡会带来一个问题 过拟合。千万不要在样本的量级相差极大的状况下,试图用上采样的方式去解决unbalance的问题。blog
SVM+kernel理论上能够作非线性分割,可是他比较慢,另外若是样本不是很合适的话,效果也会不太好。工业界,特别是数据量大的时候,大部分用的都是linear LR或者linear SVM。 若是要完成一些非线性切分的话,你须要手动的去构造一些特征,已经设定好的,高次的,能够完成非线性切分的这样一些映射,可是在工业界你很难知道怎样去构造这些特征。 排序
分批次,在每一个批次上求梯度。BP算法是来帮助求梯度的。 神经网络里面最优化算法叫SGD,而SGD要使用到梯度,因此求梯度要借助于BP算法。
在手工设定了神经网络的层数,每层的神经元的个数,学习率 η(下面会提到)后,BP 算法会先随机初始化每条链接线权重和偏置,而后对于训练集中的每一个输入 x 和输出 y,BP 算法都会先执行前向传输获得预测值,而后根据真实值与预测值之间的偏差执行逆向反馈更新神经网络中每条链接线的权重和每层的偏好。在没有到达中止条件的状况下重复上述过程。
其中,中止条件能够是下面这三条:
● 权重的更新低于某个阈值的时候
● 预测的错误率低于某个阈值
● 达到预设必定的迭代次数
若是数据量不是那么大的话,能够用RBF kernel,用注意加正则化项。若是数据量特别大的话,建议把特征离散化,拉高维度,而后用linear SVM。
神经网络的学习能力特别强,但它是个黑盒不具解释性,可调性不高。
神经网络要注意控制层数和样本的个数。
LR的损失函数是交叉熵,SVM使用的是hinge loss。LR天生能够产出几率,而SVM须要根据样本到超平面的距离去作一个映射。LR简单,可解释性强。 SVM会有点慢,但他的健壮性很强,他不会由于样本的不一样分布,而使得决策边界左右移动。