本文介绍: 逻辑回归模型是一种常用的统计建模方法用于处理二元分类问题,即将实例划分两个类别:正类和负类。它的主要思想是在每个实例上建立一个概率模型,以估计属于正类的概率。在逻辑回归模型中,首先定义一个非线性激活函数,如Sigmoid函数用于处理输入特征向量权重向量的内积。然后通过对这些概率进行最大化或最小化来求解模型参数的最佳值。逻辑回归模型的优点是计算简单解释性强,易于理解。但缺点是容易过拟合,且不能很好地处理分类问题。因此,通常情况下,需要与其他技术结合,如正则化和集成学习等,来改善模型。

wt+1=wtnαi=1n(pi(t)yi)xibt+1=btnαi=1n(pi(t)yi)

  • 其中,

    p

    i

    (

    t

    )

    =

    1

    1

    +

    exp

    (

    (

    w

    t

    ,

    x

    i

    +

    b

    t

    )

    )

    p_i^{(t)}=frac1{1+exp(-(langle w_t,x_irangle+b_t))}

    pi(t)=1+exp((⟨wt,xi+bt))1

  • 编程求解

    import numpy as np
    
    def sigma_fun(z):
        z = z.astype('float')
        z_ravel = z.ravel()  # 将 numpy 数组展平
        length = len(z_ravel)
        ls = []
        for index in range(length):
            if z_ravel[index] >= 0:
                ls.append(1.0 / (1 + np.exp(-z_ravel[index])))
            else:
                ls.append(np.exp(z_ravel[index]) / (np.exp(z_ravel[index]) + 1))
        return np.array(ls).reshape(z.shape)
    
    def cross_entropy(y, p):
        return -(y * np.log(p + 0.0000001) + (1 - y) * np.log(1 - p + 0.0000001))
    
    def gradient_descent(X, y, W, b, alpha, t):
        for i in range(t):
            z = np.dot(X, W) + b
            p = sigma_fun(z)
            loss = cross_entropy(y, p)
            print('第 {} 次迭代权重参数为:{}'.format(i, W.round(6).tolist()))
            print('第 {} 次迭代的偏置参数为:{}'.format(i, b))
            print('第 {} 次迭代平均损失为:{}'.format(i, np.mean(loss).round(6)))
            nablaLW = np.sum((p - y) * X, axis=0).reshape(X.shape[1], 1)
            W = W - (alpha / X.shape[0]) * nablaLW
            nablaLb = np.sum(p - y)
            b = b - (alpha / X.shape[0]) * nablaLb
            print('第 {} 次迭代梯度参数 W 为:{}'.format(i, nablaLW.round(6).tolist()))
            print('第 {} 次迭代梯度参数 b 为:{}n'.format(i, nablaLb))
    
    
    X = np.array([[0.5, 1], [1, 2], [-0.2, 1], [1, -3]])
    y = np.array([[0], [1], [1], [0]])
    
    b = -1
    W = np.ones((X.shape[1], 1))
    alpha = 0.5
    
    print('步长 α 为:{}n'.format(alpha))
    gradient_descent(X, y, W, b, alpha, 6)
    
    # output
    步长 α 为:0.50 次迭代的权重参数为:[[1.0], [1.0]]0 次迭代的偏置参数为:-10 次迭代的平均损失为:0.4869330 次迭代的梯度参数 W 为:[[0.349419], [-0.308058]]0 次迭代的梯度参数 b 为:0.00084828504482574451 次迭代的权重参数为:[[0.956323], [1.038507]]1 次迭代的偏置参数为:-1.00010603563060331 次迭代的平均损失为:0.4803791 次迭代的梯度参数 W 为:[[0.345769], [-0.265492]]1 次迭代的梯度参数 b 为:0.0131704400155699332 次迭代的权重参数为:[[0.913102], [1.071694]]2 次迭代的偏置参数为:-1.00175234063254952 次迭代的平均损失为:0.4745922 次迭代的梯度参数 W 为:[[0.341829], [-0.232955]]2 次迭代的梯度参数 b 为:0.022393390716281723 次迭代的权重参数为:[[0.870373], [1.100813]]3 次迭代的偏置参数为:-1.00455151447208473 次迭代的平均损失为:0.4693423 次迭代的梯度参数 W 为:[[0.337668], [-0.207736]]3 次迭代的梯度参数 b 为:0.029246570559326564 次迭代的权重参数为:[[0.828164], [1.12678]]4 次迭代的偏置参数为:-1.00820733579200054 次迭代的平均损失为:0.4644894 次迭代的梯度参数 W 为:[[0.333348], [-0.187982]]4 次迭代的梯度参数 b 为:0.034283852149878865 次迭代的权重参数为:[[0.786496], [1.150278]]5 次迭代的偏置参数为:-1.01249281731073535 次迭代的平均损失为:0.4599435 次迭代的梯度参数 W 为:[[0.328922], [-0.172379]]5 次迭代的梯度参数 b 为:0.03792999829875388
    

    sklearn 实现,并查看拟合指标

    from sklearn.linear_model import LogisticRegression as LR
    import pandas as pd
    import numpy as np
    
    X = np.array([[0.5, 1], [1, 2], [-0.2, 1], [1, -3]])
    y = np.array([0, 1, 1, 0])
    
    lr = LR()
    lr.fit(X, y)
    
    predicted = lr.predict(X)
    print('预测值:', predicted)
    
    Accuracy = ((predicted == y).sum() / len(y))
    print('准确率:', Accuracy)
    
    TP = sum((y == 1) & (predicted == 1))
    FP = sum((y == 0) & (predicted == 1))
    Precision = TP / (TP + FP)
    print('精确率:', round(Precision, 3))
    
    Recall = ((predicted == y).sum() / y.sum()).round(3)
    print('召回率:', Recall)
    
    F1 = 2 * Precision * Recall / (Precision + Recall)
    print('F1 score值:', round(F1, 3))
    
    # output
    预测值: [1 1 1 0]
    得分: 0.75
    准确率0.75
    精确率: 0.667
    召回率: 1.5
    F1 score值: 0.923
    

    原文地址:https://blog.csdn.net/qq_61828116/article/details/134656543

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

    如若转载,请注明出处:http://www.7code.cn/show_21642.html

    如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注