虽然名字中带有“回归”二字,但实际上逻辑回归是一个用于分类的线性模型,通常也称作最大熵分类或对数线性分类器。在该模型中,描述单个可能输出结果的概率通过一个逻辑函数进行建模。
逻辑回归的因变量既可以是二分类的,也可以是多分类的,但是二分类更常用一些。逻辑回归常用于数据挖掘、疾病自动诊断、经济预测等领域,例如可以挖掘引发疾病的主要因素,或根据这些因素来预测发生疾病的概率。
扩展库sklearn.linear_model中的LogisticRegression类实现了逻辑回归算法,其构造方法语法如下:
__init__(self, 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)
其中,比较常用的参数及含义如下表所示。
表 LogisticRegression类构造方法常用参数及含义
参数名称 | 含义 |
---|---|
penalty | 用来指定惩罚时的范数,默认为'l2',也可以为'l1',但求解器'newton-cg'、'sag'和'lbfgs'只支持'l2' |
C | 用来指定正则化强度的逆,必须为正实数,值越小表示正则化强度越大(这一点和支持向量机类似),默认值为1.0 |
solver | 用来指定优化时使用的算法,该参数可用的值有'newton-cg'、'lbfgs'、'liblinear'、'sag'、'saga',默认值为'liblinear',不同求解器的区别如下: l 'liblinear'使用坐标下降算法,对于小数据集是个不错的选择,而'sag'、'saga'对于大数据集的速度要快一些 l 对于多分类问题,只有'newton-cg'、'sag'、'saga'和'lbfgs'能够处理多项式损失,而'liblinear'局限于一对多问题(one-versus-rest schemes) l 'newton-cg'、'sag'和'lbfgs'只支持'l2'正则化或者没有正则化,对于某些高维数据的收敛速度也更快一些,而'liblinear'和'saga'也能处理'l1'惩罚 l 'sag'使用随机平均梯度下降算法,对于样本数量和特征数量都很大的数据集,速度比其他求解器更快一些 |
multi_class | 取值可以为'ovr'或'multinomial',默认值为'ovr'。如果设置为'ovr',对于每个标签拟合二分类问题,否则在整个概率分布中使用多项式损失进行拟合,该参数不适用于'liblinear'求解器 |
n_jobs | 用来指定当参数multi_class='ovr'时使用的CPU核的数量,值为-1时表示使用所有的核 |
LogisticRegression类对象常用方法如下表所示。
表 LogisticRegression类对象常用方法
方法 | 功能 |
---|---|
fit(self, X, y, sample_weight=None) | 根据给定的训练数据对模型进行拟合 |
predict_log_proba(self, X) | 对数概率估计,返回的估计值按分类的标签进行排序 |
predict_proba(self, X) | 概率估计,返回的估计值按分类的标签进行排序 |
predict(self, X) | 预测X中样本所属类的标签 |
score(self, X, y, sample_weight=None) | 返回给定测试数据和标签的平均准确率 |
densify(self) | 把系数矩阵转换为密集数组格式 |
sparsify(self) | 把系数矩阵转换为稀疏格式 |
下面的代码演示了逻辑回归算法的原理,可以调整其中的参数以便对工作原理有更深入的了解。
代码运行结果为:
代码绘制结果为:
在接下来的例子中,我们根据学生某门课程的复习时长和效率预测期末考试是否能够及格。首先构建逻辑回归模型并使用往年的调查结果数据训练模型,然后对本届学生的复习情况做出预测,并给出特定学习状态时考试及格和不及格的概率。在实际中,复习的越好通过考试的概率越大,但是由于心理素质强弱不同会对临场发挥有所影响,再加上考试题目对知识点的覆盖率也会影响最终成绩,所以复习的好也不能保证百分之百通过考试。
运行结果为: