我正在 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。
添加回答
舉報
0/150
提交
取消