为了账号安全,请及时绑定邮箱和手机立即绑定

从头开始逻辑回归

从头开始逻辑回归

阿波罗的战车 2023-10-06 19:27:05
我正在 MNIST 数据集上使用梯度下降 + L2 正则化实现多项逻辑回归。我的训练数据是一个形状为(n_samples=1198,features=65)的数据框。在梯度下降的每次迭代中,我采用权重和输入的线性组合来获得 1198 次激活 (beta^T * X)。然后我通过 softmax 函数传递这些激活。但是,我对如何获得每个激活的 10 个输出类的概率分布感到困惑?我的权重是这样初始化的n_features = 65# init random weightsbeta = np.random.uniform(0, 1, n_features).reshape(1, -1)这是我当前的实现。def softmax(x:np.ndarray):     exps = np.exp(x)    return exps/np.sum(exps, axis=0)def cross_entropy(y_hat:np.ndarray, y:np.ndarray, beta:np.ndarray) -> float:    """    Computes cross entropy for multiclass classification      y_hat: predicted classes, n_samples x n_feats    y: ground truth classes, n_samples x 1    """    n = len(y)    return - np.sum(y * np.log(y_hat) + beta**2 / n)    def gd(X:pd.DataFrame, y:pd.Series, beta:np.ndarray,       lr:float, N:int, iterations:int) -> (np.ndarray,np.ndarray):        """    Gradient descent    """    n = len(y)    cost_history = np.zeros(iterations)        for it in range(iterations):                activations = X.dot(beta.T).values                y_hat = softmax(activations)                        cost_history[it] = cross_entropy(y_hat, y, beta)                        # gradient of weights        grads = np.sum((y_hat - y) * X).values                # update weights        beta = beta - lr * (grads + 2/n * beta)            return beta, cost_history
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

在多项式 Logistic 回归中,您需要为每个类提供一组单独的参数(在您的情况下为像素权重)。然后,实例属于某个类别的概率被估计为该类别的实例得分的 softmax 函数。softmax 函数确保所有类别的估计概率之和为 1。



查看完整回答
反对 回复 2023-10-06
  • 1 回答
  • 0 关注
  • 73 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信