如何在 Logistic 回归中估计权重 (theta) 的值?

问题描述

我正在训练一个数据集,其中我必须根据性别、受抚养人、总收入、贷款金额、贷款期限、毕业、已婚、财产、自雇等特征预测贷款状态(是/否) .我已经为它编写了一个逻辑回归模型。我面临的问题是,获得贷款的概率介于 [0,1] 之间的标签 (y_label) 对于所有条目返回等于 1(或 0.9999)。 sigmoid 函数已用于评估权重 (theta) 和特征向量(每个条目的特征的 NumPy 数组)的点积的概率。 你能告诉我为什么当theta(向量)的初始值很大时最终概率等于1,同样当theta初始值很小时它等于0?

我的代码看起来像这样 计算y个预测标签的概率是一个sigmoid函数

def calc_sigmoid(z):
    p=1/(1+ np.exp(-z))
    p=np.minimum(p,0.9999)
    p = np.maximum(p,0.0001)
    #print("value of sigmoid",p)
    return p

计算成本的函数

def calc_cost_func(theta,x):
    y=np.dot(theta,np.transpose(x))
    return calc_sigmoid(y)

计算误差的函数

def calc_error(y_pred,y_label):
    len_label=len(y_label)
    cost= (-y_label*np.log(y_pred) - (1-y_label)*np.log(1-y_pred)).sum()/len_label
    return cost

计算梯度下降的函数

def gradient_descent(y_pred,y_label,x,learning_rate,theta):
    len_label=len(y_label)
    J= (-(np.dot(np.transpose(x),(y_label-y_pred)))/len_label)
    theta-= learning_rate*J
    return theta

训练数据的函数

def train(y_label,theta,iterations):
    list_cost=[]
    for i in range(iterations):
        y_pred=calc_cost_func(theta,x)
        
        theta=gradient_descent(y_pred,theta)
        if i%100==0:
            print("\n iteration",i)
            print("y_label:",y_pred)
            print("theta:",theta)
    
        cost=calc_error(y_pred,y_label)
        list_cost.append(cost)
    
    return theta,cost

从数据框贷款中提取数据:

'''
    theta: array(1,no. of features)
    theta_0: array(1,length of data)
    x: array(no. of features,length of data)
    y_label,y_pred: array(length of data)
'''

x_label=loan.iloc[:500,1:10].values

x_rows,x_columns= x_label.shape

z = np.ones((x_rows,1),dtype=float)

x_label=np.append(x_label,z,axis=1)

x_label=x_label.astype(float)

y_label=loan.loc[:499,"Status_New" ].values

y_label=y_label.astype(float)

#theta=np.array([0.0000005,0.0000000455547,0.000000222203,0.0000066005,0.000000022505,0.0000000025059,0.000000002585,0.000025500049,0.00000000034,0.00000000068])
theta=np.array([50.0,20.0,40.0,10.0,5.0,35.0,12.0,69.0,40.5])

train(y_label,x_label,0.2,1000)

请帮帮我,为什么大 theta 值的概率等于 1,小 theta 值的概率为 0?

解决方法

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

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

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