从头开始实现条件逻辑回归

问题描述

我正在尝试使用添加的脆弱性参数和 L1 正则化来实现条件逻辑回归。

方程一是对数似然,方程二是对数似然的梯度。

Frailty

Gradient

其中 X^W_rh 是比赛 r 中获胜马 h 的特征

W_rh 是脆弱参数

X_rh 是马 h 在比赛 r 中的特征

lambda 是 L1 正则化参数

Beta 是权重

以下是我目前的实现。

def log_likelihood(features,weights,frailty,l1,groups):
    
    # Generate scores
    scores = np.dot(features,weights) + frailty
    
    # Calculate unregularized log-likelihood
    ll = np.sum(scores - np.log(np.sum(scores + frailty)))
    
    # Calculate log-likelihood with regularization
    reg_ll = ll - (l1 * np.sum(abs(weights)))
    
    return reg_ll

def conditional_log_reg(features,target,num_steps,learning_rate,groups,l1):
    
    weights = np.zeros(features.shape(1))
    
    for step in range(num_steps):
        scores = np.dot(features,weights)
        
        predictions = np.exp(scores + frailty)
        
        # Here we need to sum the upper half within the group
        upper_pred = np.dot(features,predictions)
        
        
        # Here we need to sum the lower half by the group
        lower_pred = predictions
        
        # Here we need to sum features by group
        gradient = features - (upper_pred / lower_pred) + l1
        
        weights += learning_rate * gradient 
        
        # Print log_likelihood every few steps
        
        if step % 10000 == 0:
            print(log_likelihood(features,groups))
            
            
    return weights

我遇到的问题有两个:

  1. 我不确定真实变量或目标变量会去哪里,我的假设是 X^W_rh。然而,在 Silverman 博士的参考论文中,他将 X^W_rh 定义为 r 比赛中获胜马的特征。

  2. 我不知道如何使用 numpy 数组按组进行汇总。我熟悉使用 Pandas 按组进行汇总,但我试图避免在函数内转换为 Pandas df。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)