scikit-learn--逻辑回归应用

逻辑回归简介

logistic 回归,虽然名字里有 “回归” 二字,但实际上是解决分类问题的一类线性模型。
在某些文献中,logistic 回归又被称作 logit 回归,maximum-entropy classification(MaxEnt,最大熵分类),或 log-linear classifier(对数线性分类器)。该模型利用函数 logistic function 将单次试验(single trial)的可能结果输出为概率。

scikit-learn 中 logistic 回归在 LogisticRegression 类中实现了二分类(binary)、一对多分类(one-vs-rest)及多项式 logistic 回归,并带有可选的 L1 和 L2 正则化。

作为优化问题,带 L2 罚项的二分类 logistic 回归要最小化以下代价函数(cost function):
在这里插入图片描述
类似地,带 L1 正则的 logistic 回归解决的是如下优化问题:
在这里插入图片描述

逻辑回归实现的优化算法

在 LogisticRegression 类中实现了这些优化算法: “liblinear”, “newton-cg”, “lbfgs”, “sag” 和 “saga”。

liblinear

“liblinear” 应用了坐标下降算法(Coordinate Descent, CD),并基于 scikit-learn 内附的高性能 C++ 库 LIBLINEAR library 实现。不过 CD 算法训练的模型不是真正意义上的多分类模型,而是基于 “one-vs-rest” 思想分解了这个优化问题,为每个类别都训练了一个二元分类器。因为实现在底层使用该求解器的 LogisticRegression 实例对象表面上看是一个多元分类器。

其它

lbfgs”, “sag” 和 “newton-cg” solvers (求解器)只支持 L2 惩罚项,对某些高维数据收敛更快。这些求解器的参数 multi_class设为 “multinomial” 即可训练一个真正的多项式 logistic 回归 ,其预测的概率比默认的 “one-vs-rest” 设定更为准确。

sag” 求解器基于平均随机梯度下降算法(Stochastic Average Gradient descent)。在大数据集上的表现更快,大数据集指样本量大且特征数多。

saga” 求解器是 “sag” 的一类变体,它支持非平滑(non-smooth)的 L1 正则选项 penalty=“l1” 。因此对于稀疏多项式 logistic 回归 ,往往选用该求解器。

saga” 一般都是最佳的选择,但出于一些历史遗留原因默认的是 “liblinear” 。

对于大数据集,还可以用 SGDClassifier** ,并使用对数损失(’log’ loss)

具体使用可参鉴下图:
在这里插入图片描述

逻辑回归参数和方法详解

参考:https://blog.csdn.net/cqy_chen/article/details/78711353

参数

  1. penalty(正则化):参数可选择“L1”“L2”,默认参数为“L2”。 用于指定惩罚中使用的规范。【 ‘newton-cg’,'sag’和’lbfgs’解算器只支持l2惩罚】
  2. dual(样本大于特征时用): bool,默认值:False 双重或原始配方。 双配方仅用于利用liblinear解算器的l2惩罚。 当n_samples> n_features时,首选dual = False
  3. tol: float,默认值:1e-4 容忍停止标准。
  4. C: float,默认值:1.0 正规化强度逆; 必须是正数的浮动。 与支持向量机一样,较小的值指定更强的正则化。
  5. fit_intercept: bool,默认值:True 指定是否应将常量(a.k.a. bias或intercept)添加到决策函数中。
  6. intercept_scaling: float,默认值为1仅在使用求解器“liblinear”且self.fit_intercept设置为True时有用。 在这种情况下,x变为[xself.intercept_scaling]。注意! 合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。
  7. class_weight(权重设置): dict或’balanced’,默认值:无与{class_label:weight}形式的类相关联的权重。 如果没有给出,所有课程都应该有一个重量。“平衡”模式使用y的值自动调整与输入数据中的类频率成反比的权重,如n_samples /(n_classes * np.bincount(y))。请注意,如果指定了sample_weight,这些权重将与sample_weight(通过fit方法传递)相乘。
  8. random_state(随机种子): int或None,可选,默认值:None ; 在随机数据混洗时使用的伪随机数生成器的种子。 如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。 在求解器=='sag’或’liblinear’时使用。
  9. solver(处理器) :{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’},
    default:‘liblinear’ 在优化问题中使用的算法。对于小数据集,‘liblinear’是一个不错的选择,但是’sag’和’saga’对于 大数据集 来说更快。对于 多类问题 ,只有’newton-cg’,‘sag’,'saga’和’lbfgs’处理多项损失;
    'liblinear’仅限于 一对一休息方案。‘newton-cg’,'lbfgs’和’sag’只处理L2惩,而’liblinear’和’saga’处理L1惩罚。请注意,“sag”和“saga”快速收敛仅在具有大致相同比例的要素上得到保证。 您可以使用sklearn.preprocessing中的缩放器预处理数据。
  10. max_iter: int,默认值:100 ;
    仅适用于newton-cg,sag和lbfgs求解器。 求解器收敛的最大迭代次数。
  11. multi_class: str,{‘ovr’,‘multinomial’},默认值:‘ovr’;
    多类选项可以是’ovr’或’multinomial’。 'ovr’是表示one-vs-rest,'multinomial’是表示many-vs-many。
  12. verbose: int,默认值:0
    对于liblinear和lbfgs求解器,将verbose设置为正数以表示详细程度。
  13. warm_start: bool,默认值:False
    设置为True时,重用上一次调用的解决方案来初始化,否则,擦除以前的解决方案。 对于liblinear解算器没用。
  14. n_jobs(处理器个数的选择): int,默认值:1
    如果multi_class =‘ovr’“,则在对类进行并行化时使用的CPU核心数。 无论是否指定’multi_class’,当solver设置为’liblinear’时,都会忽略此参数。 如果给定值-1,则使用所有核心。

属性

  1. coef_: 形式为数组,形状为(1,n_features)或(n_classes,n_features)
    模型函数中的特征系数。当给定问题是二进制时,coef_具有形状(1,n_features)。
  2. intercept_: 形式为数组,形状为(n_classes,)
    截距(a.k.a. bias)添加到决策函数中。如果fit_intercept设置为False,则截距设置为零。 当问题是二进制时,intercept_是形状(1,)。
  3. n_iter_: 形式为数组,形状为(n_classes,)
    所有类的实际迭代次数。 如果是二进制或多项式,则只返回1个元素。 对于liblinear解算器,只给出了所有类的最大迭代次数。

方法

参考:
decision_function(X):预测样本的置信度分数。
densify():将系数矩阵转换为密集数组格式。
fit(X,y [,sample_weight]):根据给定的训练数据拟合模型。
get_params([deep]): 获取此估算器的参数。
predict(X): 预测X中样本的类标签。
predict_log_proba(X): 概率估计的对数。
predict_proba(X): 记录概率估计。
score(X,y [,sample_weight]): 返回给定测试数据和标签的平均准确度。
set_params(** params): 设置此估算器的参数。
sparsify(): 将系数矩阵转换为稀疏格式。
参考:scikit-learn逻辑回归的函数文档
实现例子:逻辑回归实现贷款者是否逾期数据的预测

展开阅读全文

没有更多推荐了,返回首页