PyMC输入维度不匹配问题求助:矩阵点积维度异常排查
PyMC中logit_p维度不匹配问题的解决
你的核心问题是点积计算方式错误:
- 代码里的
X_data * beta是元素级逐元素乘法,不是矩阵与向量的点积运算。X_data维度(198,37),beta维度(37,),逐元素相乘后得到的是(198,37)的二维张量,但Bernoulli分布要求logit_p必须和观测值y_data同维度(一维,198个元素),这直接导致了维度不匹配的错误。
修正步骤:
- 替换点积计算方式:
把X_data * beta改成pm.math.dot(X_data, beta)或者X_data @ beta,这两种方式都会正确计算矩阵与向量的点积,输出(198,)的一维向量,和y_data维度匹配。 - 清理冗余代码:
你定义了priors_for_covariates列表但完全没用到,建议删掉这段代码,避免混淆。
修正后的代码:
with pm.Model() as model: X_data = pm.Data("X", standard_scaler.transform(X)) y_data = pm.Data("y", y.values) beta = pm.Normal("beta", mu=0, tau=0.0001, shape=(X.shape[1])) # 改用矩阵点积计算logit_p logit_p = pm.Deterministic("logit_p", pm.math.dot(X_data, beta)) print(X_data.shape) likelihood = pm.Bernoulli("likelihood", logit_p=logit_p, observed=y_data)
内容的提问来源于stack exchange,提问作者Ariel Alvarez
相关产品推荐
相关产品推荐

