- 1.逻辑回归原理
逻辑回归(logistic regression)是机器学习模型中的基础模型,周志华老师的书中翻译为对数几率回归。很多模型都涉及到逻辑回归,比如SVM、GBDT、AdaBoost等。虽然名字当中有“回归”两个字,但是逻辑回归是用于分类,它可以理解为线性函数和一单调可微函数组成的复合函数。常用的单调可微函数为对数几率函数(Logistic function),也即Sigmoid函数:
它将自变量x的值转化为一个在0~1范围内的值,此函数在神经网络模型中具有重要作用,是神经网络常用的激活函数。将(1)式中的z换为线性函数得:
这就是逻辑回归的基本模型。
- 2.代价函数
- 3. 损失函数推导和求解
- 4.正则化
正则化是为了解决过拟合问题。 采用正则化方法会自动削弱不重要的特征变量,自动从许多的特征变量中”提取“重要的特征变量,减小特征变量的数量级。这个方法非常有效,当我们有很多特征变量时,其中每一个变量都能对预测产生一点影响。正如在房价预测的例子中看到的那样,我们可以有很多特征变量,其中每一个变量都是有用的,因此我们不希望把它们删掉,这就导致了正则化概念的发生。正则化的作用:(1)防止过拟合;(2)正则化项的引入其实是利用了先验知识,体现了人对问题的解的认知程度或者对解的估计。
- 5.分类模型评价标准
(1)对数损失函数(Log-loss)
在分类输出中,若输出不再是0-1,而是实数值,即属于每个类别的概率,那么可以使用Log-loss对分类结果进行评价。这个输出概率表示该记录所属的其对应的类别的置信度。比如如果样本本属于类别0,但是分类器则输出其属于类别1的概率为0.51,那么这种情况认为分类器出错了。该概率接近了分类器的分类的边界概率0.5。Log-loss是一个软的分类准确率度量方法,使用概率来表示其所属的类别的置信度。 其实,从数学上来看,Log-loss的表达式是非常漂亮的。我们仔细观察可以发现,其信息论中的交叉熵(Cross Entropy,即真实值与预测值的交叉熵),它与相对熵(Relative Entropy,也称为KL距离或KL散度, Kullback–Leibler divergence.)也非常像。信息熵是对事情的不确定性进行度量,不确定越大,熵越大。交叉熵包含了真实分布的熵加上假设与真实分布不同的分布的不确定性。因此,log-loss是对额外噪声(extra noise)的度量,这个噪声是由于预测值域实际值不同而产生的。因此最小化交叉熵,便是最大化分类器的准确率。
(2)精确率-召回率(Precision-Recall)
精确率-召回率其实是两个评价指标。但是它们一般都是同时使用。精确率是指分类器分类正确的正样本的个数占该分类器所有分类为正样本个数的比例。召回率是指分类器分类正确的正样本的个数占所有的正样本个数的比例。
F1-score: F1-score为精确率与召回率的调和平均值,它的值更接近于Precision与Recall中较小的值。
(3)AUC(Area under the Curve(Receiver Operating Characteristic, ROC))
AUC的全称是Area under the Curve,即曲线下的面积,这条曲线便是ROC曲线,全称为the Receiver Operating Characteristic曲线,它最开始使用是上世纪50年代的电信号分析中,在1978年的“Basic Principles of ROC Analysis ”开始流行起来。ROC曲线描述分类器的True Positive Rate(TPR,分类器分类正确的正样本个数占总正样本个数的比例)与False Positive Rate(FPR,分类器分类错误的负样本个数占总负样本个数的比例)之间的变化关系。
当使用ROC曲线对分类器进行评价时,如果对多个分类器进行比较时,如果直接使用ROC曲线很难去比较,只能通过将ROC分别画出来,然后进行肉眼比较,那么这种方法是非常不便的,因此我们需要一种定量的指标去比较,这个指标便是AUC了,即ROC曲线下的面积,面积越大,分类器的效果越好,AUC的值介于0.5到1.0之间。
AUC(Area Under Curve)被定义为ROC曲线下的面积,也可以认为是ROC曲线下面积占单位面积的比例,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。对应AUC更大的分类器效果更好。所以AUC是衡量分类器性能的一个很好的度量,并且它不像分类准确率那样,在类别比例差别很大的情况下,依然是很好的度量手段。在欺诈交易检测中,由于欺诈案例是很小的一部分,这时分类准确率就不再是一个良好的度量,而可以使用AUC来度量。 具体如何描绘ROC曲线,如在二分类中,我们需要设定一个阈值,大于阈值分类正类,否则分为负类。因此,我们可以变化阈值,根据不同的阈值进行分类,根据分类结果计算得到ROC空间中的一些点,连接这些点就形成ROC曲线。ROC曲线会经过(0,0)与(1,1)这两点,实际上这两点的连线形成的ROC代表一个随机分类器,一般情况下分类器的ROC曲线会在这条对角连线上方。
在ROC曲线中,点(0,0)表示TPR=0,FPR=0,即分类器将每个实例都预测为负类;点(1,1)表示TPR=1,FPR=1,即分类器将每个实例都预测为正类;点(0,0)表示TPR=1,FPR=0,即分类器将每个正类实例都预测为正类,将每个负类实例都预测为负类,这是一个理想模型。
ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中,经常会出现类别不平衡(class imbalance)现象,即负样本比正样本少很多(或者相反),而且测试数据集中的正负样本的分布也可能随时间发生变化。
- 6.类别不平衡的问题
7. sklearn参数
class sklearn.linear_model.LogisticRegression(penalty='l2',
dual=False, tol=0.0001, C=1.0, fit_intercept=True,
intercept_scaling=1, class_weight=None,
random_state=None, solver='liblinear', max_iter=100,
multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)
penalty='l2'
: 字符串‘l1’或‘l2’,默认‘l2’。- 用来指定惩罚的基准(正则化参数)。只有‘l2’支持‘newton-cg’、‘sag’和‘lbfgs’这三种算法。
- 如果选择‘l2’,solver参数可以选择‘liblinear’、‘newton-cg’、‘sag’和‘lbfgs’这四种算法;如果选择‘l1’的话就只能用‘liblinear’算法。
dual=False
: 对偶或者原始方法。Dual只适用于正则化相为l2的‘liblinear’的情况,通常样本数大于特征数的情况下,默认为False。C=1.0
: C为正则化系数λ的倒数,必须为正数,默认为1。和SVM中的C一样,值越小,代表正则化越强。- 从上面的描述可以看出,newton-cg、lbfgs和sag这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear通吃L1正则化和L2正则化。
同时,sag每次仅仅使用了部分样本进行梯度迭代,所以当样本量少的时候不要选择它,而如果样本量非常大,比如大于10万,sag是第一选择。但是sag不能用于L1正则化,所以当你有大量的样本,又需要L1正则化的话就要自己做取舍了。要么通过对样本采样来降低样本量,要么回到L2正则化。
但是liblinear也有自己的弱点!我们知道,逻辑回归有二元逻辑回归和多元逻辑回归。对于多元逻辑回归常见的有one-vs-rest(OvR)和many-vs-many(MvM)两种。而MvM一般比OvR分类相对准确一些。而liblinear只支持OvR,不支持MvM,这样如果我们需要相对精确的多元逻辑回归时,就不能选择liblinear了。也意味着如果我们需要相对精确的多元逻辑回归不能使用L1正则化了。 -
fit_intercept=True
: 是否存在截距,默认存在。 intercept_scaling=1
: 仅在正则化项为‘liblinear’,且fit_intercept设置为True时有用。solver='liblinear'
: solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择。- a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
- b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
- c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
- d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
备注: 此文为学习笔记,如有侵权,随时删除。