购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 基于逻辑回归的分类概率建模

逻辑回归一般用于估计某种事物的可能性(“可能性”而非数学上的“概率”),不可以直接当作概率值来用。逻辑回归可以用于预测系统或产品的故障的可能性,还可用于市场营销应用程序,例如预测客户购买产品或中止订购的倾向等。在经济学中它可以用来预测一个人选择进入劳动力市场的可能性,而商业应用则可以用来预测房主拖欠抵押贷款的可能性。还可以根据逻辑回归模型,预测在不同的自变量情况下,发生某种情况的概率。

3.3.1 几个相关定义

逻辑回归是一种分类模型而非回归模型,在介绍逻辑回归前先来了解几个相关定义。

(1)让步比: ,代表阳性事件的概率,它指的是要预测的事件的可能性,例如:病人有某种疾病的可能性、某人买彩票中了的可能性等。

(2)让步比的对数形式: 。logit函数输入值的取值范围在0到1之间,转换或计算的结果值为整个实数范围,可以用它来表示特征值和对数概率之间的线性关系:

此处, p y =1| x )是某个特定样本属于 x 类给定特征标签为1的条件概率。

(3)sigmoid函数: ,它是logit函数的逆形式。sigmoid函数的形状如图3-2所示。

图3-2 sigmoid函数的形状

3.3.2 逻辑代价函数的权重

在建立逻辑回归模型时,想要最大化 L 的可能性,先要假设数据集中的样本都是相互独立的个体。公式如下:

在实践中,最大化该方程的自然对数,也被称为对数似然函数:

用梯度下降方法最小化代价函数 J

为更好地理解这个代价函数,计算一个样本训练实例的代价如下:

J ϕ z ), y w )=- y log( ϕ z ))-(1- y )log(1- ϕ z ))

从方程中可以看到,如果 y =0,第一项为0,如果 y =1,第二项为0:

下面代码实现绘制一张图,用于说明 ϕ z )不同样本实例分类的代价:

    import numpy as np
    from matplotlib import pyplot as plt
          
    def cost_1(z):
        return - np.log(sigmoid(z))
          
    def cost_0(z):
        return - np.log(1 - sigmoid(z))
    z = np.arange(-10,10,0.1)
    phi_z = sigmoid(z)
    c1 = [cost_1(x)for x in z]
    plt.plot(phi_z,c1,label='J(w)if y=1')
    c0 = [cost_0(x)for x in z]
    plt.plot(phi_z,c0,linestyle='--',label='J(w)if y=0')
    plt.ylim(0.0,5.1)
    plt.xlim([0,1])
    plt.xlabel('$\phi$(z)')
    plt.ylabel('J(w)')
    plt.legend(loc='best')
    plt.tight_layout()
    plt.show()

运行程序,效果如图3-3所示。

图3-3 不同样本实例分类的代价

由结果可得出结论:如果分类为1,则概率越小表示分类错误程度越高;如果分类为0,则概率越大表示分类错误程度越高。

【例3-1】 用sklearn训练逻辑回归模型。

    from sklearn.linear_model import LogisticRegression
          
    lr=LogisticRegression(C=100.0,random_state=1)
    lr.fit(X_train_std,y_train)
    plot_decision_regions(X_combined_std,y_combined,
                              classifier=lr,test_idx=range(105,150))
    plt.xlabel('花瓣长度[标准化]')
    plt.ylabel('花瓣宽度[标准化]')
    plt.legend(loc='左上角')
    plt.tight_layout()
    plt.show()

运行程序,效果如图3-4所示。

图3-4 sklearn训练逻辑回归模型效果

3.3.3 正则化解决过拟合问题

什么是过拟合?什么是欠拟合?过拟合是指模型在训练数据上表现良好,但无法概括未见过的新数据或测试数据;欠拟合是指模型不足以捕捉训练数据中的复杂模式,因此对未见过的数据表现不良。图3-5可以很好地阐明过拟合与欠拟合的情况。

图3-5 过拟合与欠拟合

正则化又是什么?正则化是处理共线性(特征之间的高相关性),消除数据中的噪声,并最终能避免过拟合的非常有效的方法。正则化的逻辑是引入额外偏置来惩罚极端的权重。

最常见的正则化是L2正则化,具体如下:

其中, λ 为正则化参数。

逻辑回归的代价函数可以通过增加一个简单的正则项来调整,这将在模型训练的过程中缩小权重:

可通过绘制两个权重系数的L2正则化路径实现可视化,代码如下:

    weights,params=[],[]
    for c in np.arange(-5,5):
        lr = LogisticRegression(C=10. * * c,random_state=1)
        lr.fit(X_train_std,y_train)
        weights.append(lr.coef_[1])
        params.append(10. * * c)
          
    weights = np.array(weights)
    plt.plot(params,weights[:,0],
                 label='花瓣长度')
    plt.plot(params,weights[:,1],linestyle='--',
                 label='花瓣宽度')
    plt.ylabel('权重系数')
    plt.xlabel('C')
    plt.legend(loc='左上角')
    plt.xscale('log')
    plt.show()

运行程序,效果如图3-6所示。

图3-6 两个权重系数的L2正则化

如图3-6所示,减小逆正则化参数C可以增大正则化的强度,权重系数会变小。 r843jpaXF/WLgVPZA4FjaS9ohG2oe4FA/jEmybfvX5u0lNBANnIElEgJ6NRovGHC

点击中间区域
呼出菜单
上一章
目录
下一章
×