Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性。可以用来回归,也可以用来分类,主要是二分类。
python实现
逻辑回归模型pythonAPI:
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惩罚项 str, ‘l1’ or ‘l2’, 默认: ‘l2’ (L1,L2范数,指定正则项的形式)
注:在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化。另外,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。
dual:对偶或原始方法,bool类型,默认为False。对偶方法只用在求解线性多核(liblinear)的L2惩罚项上。当样本数量>样本特征的时候,dual通常设置为False
tol:停止求解的标准,float类型,默认为1e-4。就是求解到多少的时候,停止,认为已经求出最优解
C:正则项权重,C越大正则项的权重越小,模型容易出现过拟合,反之正则项的权重越大,容易出现欠拟合(像SVM一样,越小的数值表示越强的正则化。)
intercept_scaling:仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。float类型,默认为1。
class_weight:用于标示分类模型中各种类型的权重
random_state :数据洗牌时的种子值,int值,仅在正则化优化算法为sag,liblinear时有用
solver优化方法
(1)liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
(2)lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
(3)newton-cg:牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
(4)sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用部分的样本来计算梯度,适合于样本数据多的时候,SAG是一种线性收敛算法,速度远比SGD快。
注:从上面的描述可以看出,newton-cg, lbfgs和sag这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear通吃L1正则化和L2正则化。
max_iter只适用于newton-cg、sag和lbfgs解决方案。为了使解决者收敛,最大的迭代次数。
class_weight :类别的权重,字典形式传递。
n_jobs:并行数。int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序
属性:
coef_ array, shape (1, n_features) or (n_classes, n_features) 决策函数的特征系数。
intercept_ : array, shape (1,) or (n_classes,) 截距(又称偏差)添加到决策函数中
使用自带的数据集,通过datasets加载自带的医学数据集
把数据集按照4:1的比例,分成训练集和测试集
代码如下:
python逻辑回归模型模型评估方法
1,混淆矩阵
也称列联表分析(Contingency table),它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监督学习。其每一列代表预测值,每一行代表的是实际的类别。这个名字来源于它可以非常容易的表明多个类别是否有混淆(也就是一个类被预测成另一类)
通过自带的函数生成混淆矩阵
混淆矩阵结果
表示,把属于0类中的5个样本误分给1类,37个样本分类成果
把属于1类的全部分到1类中,没有误分的样本
2, 准确率、精确率、召回率、综合评价指标的交叉验证
准确率是分类器预测正确性的评估指标。scikit-learn提供了accuracy_score来计算:
print(accuracy_score(y_true, y_pred))
在逻辑回归中,也可以使用LogisticRegression.score()来计算模型预测的准确率:
准确率是分类器预测正确性的比例,但是并不能分辨出假阳性错误和假阴性错误。在有些问题里面,比如在医学预测问题中,假阴性与假阳性要严重得多,其他的问题里可能相反。另外,有时准确率并非一个有效的衡量指标,如果分类的比例在样本中严重失调。比如,分类器预测信用卡交易是否为虚假交易时,假阴性比假阳性更敏感。为了提高客户满意度,信用卡部门更倾向于对合法的交易进行风险检查,往往会忽略虚假交易。因为绝大部分交易都是合法的,这里准确率不是一个有效的衡量指标。经常预测出虚假交易的分类器可能有很高的准确率,但是实际情况可能并非如此。因此,分类器的预测效果还需要另外两个指标:精确率和召回率
精确率是指分类器预测出的正类中真的是正类的比例
召回率在医学领域也叫做灵敏度,是指所有真的正类被分类器正确找出来的比例。
综合评价指标(F1 measure)是精确率和召回率的调和均值,或加权平均值,也称为F-measure或fF-score。
综合评价指标平衡了精确率和召回率。一个二元分类模型,精确率和召回率为1,那么综合评价指标为1。如果精确率或召回率为0,那么综合评价指标为0。可以通过交叉验证函数cross_val_score来得到
3,ROC曲线
ROC曲线(Receiver Operating Characteristic,ROC curve)可以用来可视化分类器的效果。和准确率不同,ROC曲线对分类比例不平衡的数据集不敏感,ROC曲线显示的是对超过限定阈值的所有预测结果的分类器效果。ROC曲线画的是分类器的召回率与误警率(fall-out)的曲线。误警率也称假阳性率,是所有阴性样本中分类器识别为阳性的样本所占比例
AUC是ROC曲线下方的面积,它把ROC曲线变成一个值,表示分类器随机预测的效果。scikit-learn提供了计算ROC和AUC指标的函数,roc_curve和auc
AUC面积越大,模型越好
| 留言与评论(共有 0 条评论) |