Python算法总结(八)逻辑回归(附手写python实现代码)

本文介绍了逻辑回归算法,包括其作为有监督分类算法的类型、带L1和L2正则化的损失函数原理,以及批量、随机和小批量梯度下降的求解公式。并提供了手写Python代码实现及调包实现的详细过程。

通过手写python,加深了对算法原理及流程的理解。

一、算法类型

有监督的分类算法

二、算法原理

损失函数
在这里插入图片描述
带L1正则化的损失函数
在这里插入图片描述
下带L2正则化的损失函数
在这里插入图片描述
以下对不带正则化的损失函数求解w:
批量梯度下降法BGD求解w的公式
在这里插入图片描述
随机梯度下降法SGD求解w的公式
在这里插入图片描述
小批量梯度下降法MBGD求解w的公式
在这里插入图片描述

三、手写Python算法

注:不带正则化

# 辅助函数1:定义sigmoid函数
def sigmoid(x):
    s=1 / (1+ np.exp(-x))
    return s
# 辅助函数2:定义标准化函数

def normalizer(xmat):
    #xmat:特征矩阵
    inmat=xmat.copy()
    means=np.mean(inmat,axis=0)
    std=np.std(inmat,axis=0)
    result=(inmat-means)/std
    return result
# 主函数1:BDG算法,批量梯度下降

def BDG_LR(dataset,alpha=0.001,max_iter=500):
    #dataset:带标签的数据集,df格式
    #返回:weights各特征权重值w
    
    xmat=np.mat(dataset.iloc[:,:-1].values)
    ymat=np.mat(dataset.iloc[:,-1].values).T
    
    xmat=normalizer(xmat)
    n,m=xmat.shape
    
    weights=np.zeros((m,1))
    for i in range(max_iter):
        grad=xmat.T*(xmat*weights-ymat)/n  #参考批量梯度下降法求解公式,关键的一步
        weights=weights-alpha*grad
    return weights
# 主函数2:SGD算法,随机梯度下降

def SGD_LR(dataset,alpha=0.001,max_iter=500):
    #dataset:带标签的数据集,df格式
    #返回:weights各特征权重值w
    dataset=dataset.sample(max_iter,replace=True)
    dataset.index=range(max_iter)
   
    xmat=np.mat(dataset.iloc[:,:-1].values)
    ymat=np.mat(dataset.iloc[:,-1].values).T
    
    xmat=normalizer(xmat)
    n,m=xmat.shape
    
    weights=np.zeros((m,1))
    for i in range(n):
        grad=xmat[i].T*(xmat[i]*weights-ymat[i]) #关键的一步
        weights=weights-alpha*grad
    return weights
# 主函数3:封装以上函数,便于调用

def logistic(dataset,method,alpha=0.01,max_iter=500):
    #返回:p是分类标签,score是准确率accuracy
    weights=method(dataset,alpha=alpha,max_iter=max_iter)    
    
    xmat=np.mat(dataset.iloc[:,:-1].values)
    xmat=normalizer(xmat)
    
    p=sigmoid(xmat*weights).A.flatten()
    for i,j in enumerate(p):
        if j<0.5:
            p[i]=0
        else:
            p[i]=1

    y_ture=dataset.iloc[:,-1]
    y_pre=pd.Series(p)
    score=(y_ture==y_pre).mean()

    return p,score

四、Python调包实现

from sklearn.linear_model import LogisticRegression as LR
# 关键参数
'''
LR(
    penalty='l2',
    tol=0.0001,
    C=1.0,
    solver='warn',
    max_iter=100,
    multi_class='warn',
)
'''

五、附调用手写函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考:http://edu.cda.cn/course/966

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值