机器学习——逻辑回归(logistic regression)

大家好! 此开篇第一个机器学习方法。

逻辑回归

这里写图片描述

一、逻辑回归原理

首先,我们看一下,线性回归

用一个线性函数对提供的已知数据进行拟合,最终得到一个线性函数,利用这个函数,对给定的输入进行预测。
示例:
这里写图片描述

Sigmoid函数
用Sigmoid函数来拟合离散的目标值

P ( x ) = 1 1 + e ( β 0 + β 1 x )

其中 β 0 :截距 。 β 1 :系数

Odds:几率(发生概率/不发生概率= P 1 P
这里写图片描述

2 参数求解
2.1 最大似然估计:找到 β 0 β 1 值让似然概率最大化
2.2 目标函数 :损失函数(代价函数 cost functon)
参数估计优化的目标->损失最小化
对数似然损失函数 (log-likehood loss function)

C o s ( y , β ) = { l n ( P ) y = 1 l n ( 1 P ) y = 0

P = 1 l n ( P ) = 0
P = 0 l n ( P ) =

J ( β ) = 1 m i = 1 m C o s ( y , β )

对β 优化求解的算法:梯度下降

寻找让损失函数 J ( β ) 取得最小值时的 β

3 正则化:
损失函数中增加惩罚项:参数值越大惩罚越大-->让算法去尽量减少参数值

损失函数 J ( β ) :

J ( β ) = 1 m i = 1 m C o s ( y , β ) + λ 2 m j = 1 n β j 2

● 当模型参数 β 过多时,损失函数会很大,算法要努力减少 β 参数值来让损失函数最小。
● λ 正则项重要参数,λ 越大惩罚越厉害,模型越欠拟合,反之则倾向过拟合。
这里写图片描述
● L1 正则化得到稀疏的权重值(可理解为去掉特征项权值)
● L2 正则化得到平滑的权值(可理解为减少特征项权重的比重)

二、代码示例

2.1 Scikit-Learn(SkLearn)
http://scikit-learn.org/stable/index.html
代码:
from sklearn.linear_model import LogisticRegression  #逻辑回归
LogisticRegression(
                    penalty = '12',
                    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_state = False,
                    n_jobs = 1
                    )
一些重要的参数:
penalty:(惩罚项) str,'l1'or'l2', default:'l2'-L1和L2正则化
C: float,default:  1.0--正则化强度的倒数,越小-->越强的正则化(惩罚越大)
fit_intercept:      bool,default:True--是否拟合截距
class_weight:       dict or 'balanced',default:None--是否对样本加权
solver:             {'newton-cg','lbfgs','liblinear','sag'},\
                    default:'liblinear' ---参数优化求解算法
multi_class:        str,{'ovr','multinomial'},default:'ovr' --多分类问题处理方法
2.1.2逻辑回归模型的属性(结果)
    Coeficient-系数
    coef_:array,shape(n_classes,n_features)
    Coeficient of the feature in the decision function
    intercept_: array,shape(n_classes,)

2.2 逻辑回归示例

2.3 逻辑回归结果解释
Odd Ratio (比值 比)
In(Odds1/Odds0) = beta1

三、使用技巧

3.1 模型自动化调参
在 Sklearn中用 GridSearchCV 自动化调参
from sklearn.grid_search import GridSearchCV
GridSearchCV(
            esmtimator,
            param_grid,
            scoring = None,
            fit_params = None,
            n_jobs = 1,
            iid = True,
            refit = True,
            cv = None,
            verbose = 0
            pre_dispatch = '2*n_jobs',
            error_score = 'raise',
            return_train_score = True
            )
        一些重要的参数:
        esmtimator: esmtimator object --选择一个分类模型
        param_grid: dict or list of dictionaries --待搜索的所有参数组合
        scoring:--模型评估指标:accuracy,precision recall
        cv: ---K折 cross validtion的K值
3.2 多分类问题处理
    将多分类问题转换成多个二分类问题
    对每一个类训练一个逻辑回归模型,有多少个类就有多少个模型
    用每一个模型对新数据分别进行预测,取概率最大的模型决定新数据的预测类别
3.3 类别型特征变换
    onehot 独热编码
3.4 连续型特征变换
    把连续性变量 离散化 好处:
        非线性--> 线性
        提升稳定性,避免异常数值影响
        模型更易理解
3.5 特征组合
    特征组合前--对前特征离散化
    特征组合后--维度会急剧膨胀
    特征组合是用  高维特征 + 简单模型 来提升效果
3.6 预测概率转换为分数
    例如:芝麻信用

猜你喜欢

转载自blog.csdn.net/wsp_1138886114/article/details/80465707