You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

手动实现Logistic Regression遇维度不匹配ValueError求助

Logistic Regression维度不匹配问题修复

核心错误点

  • 权重初始化错误:权重维度应与特征数一致,而非样本数。你的单个样本有4个特征,权重weights应初始化为(4,1),而非(87,1)。
  • 线性组合计算错误:原代码np.dot(x_train.T,weights)维度不匹配,正确计算应为np.dot(x_train, weights),让样本矩阵(87,4)与权重矩阵(4,1)做内积,得到对应每个样本的预测值(87,1)。
  • 梯度dw计算错误:原代码np.dot((A-y_train),x_train.T)维度不兼容,正确写法是np.dot(x_train.T, (A-y_train)),通过特征矩阵转置(4,87)与误差矩阵(87,1)内积,得到与权重同维度的梯度(4,1)。
  • loss列表初始化位置错误:循环内重复创建空列表会导致最终仅保留最后一次损失值,需将loss = []移至循环外。
  • 函数调用拼写错误:logisitic_regression应为logistic_regression。

修正后的代码

import numpy as np

def logistic_regression(x_train, y_train, learning_rate, iterations):
    m = len(x_train)
    n = len(x_train[0])
    # 权重初始化为特征数维度
    weights = np.zeros((n, 1))
    b = 0
    # loss列表移至循环外
    loss = []
    for i in range(iterations):
        # 正确计算线性组合z
        z = np.dot(x_train, weights) + b
        A = 1 / (1 + np.exp(-z))
        cost = (-1/m) * np.sum(y_train * np.log(A) + (1 - y_train) * np.log(1 - A))
        # 正确计算梯度dw
        dw = (1/m) * np.dot(x_train.T, (A - y_train))
        db = (1/m) * np.sum(A - y_train)
        # 权重更新无需转置
        weights = weights - learning_rate * dw
        b = b - learning_rate * db
        loss.append(cost)
        if (i % (iterations // 10) == 0):
            print("Cost after iteration %i: %f" % (i, cost))
    return weights, b, loss

iterations = 1000
learning_rate = 1e-3
# 修正函数名拼写
w, b, loss = logistic_regression(np.array(x_train), np.array(y_train), learning_rate, iterations)

内容的提问来源于stack exchange,提问作者daylightisminetocommand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:45:34