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

多分类逻辑回归中不同形状数组的掩码创建与NaN处理问题

解决多分类逻辑回归中数组形状不匹配与NaN移除问题

问题背景

需要基于以下数组执行多分类逻辑回归:

  • X:形状(293240, 4),包含NaN值
  • y:形状(29324,),包含NaN值
  • hours:形状(293240,),包含NaN值

目标是通过hours作为掩码筛选样本,同时移除所有含NaN的样本,但创建掩码时触发错误:

ValueError: operands could not be broadcast together with shapes (293240,) (29324,)

错误原因

报错核心是数组长度不匹配:

  • np.all(np.isfinite(x), 1)和hours == 40生成的掩码长度均为293240
  • np.isfinite(y)生成的掩码长度为29324
    三者无法进行按位与的广播运算。结合数组长度比例(293240 ÷ 29324 = 10),可推断每个y标签对应10个X/hours样本,需先将y扩展至与X、hours相同长度。

解决方案

步骤1:扩展y数组至匹配长度

使用np.repeat将y重复对应次数(此处为10次),使其形状变为(293240,):

import numpy as np
from sklearn.model_selection import train_test_split

# 按数组长度比例计算重复次数,适配实际数据对应关系
repeat_times = x.shape[0] // y.shape[0]
y_repeated = np.repeat(y, repeat_times)

步骤2:创建统一长度的掩码

分别生成三个维度一致的掩码,再合并为最终筛选条件:

# 掩码1:X所有特征均为非NaN
mask_x = np.all(np.isfinite(x), axis=1)
# 掩码2:扩展后的y为非NaN
mask_y = np.isfinite(y_repeated)
# 掩码3:hours等于目标值40
mask_hours = (hours == 40)

# 合并掩码:仅保留同时满足三个条件的样本
regmask = mask_x & mask_y & mask_hours

步骤3:筛选数据并拆分训练测试集

用掩码筛选所有数组,确保长度一致后执行数据集拆分:

# 筛选有效样本
x_filtered = x[regmask]
y_filtered = y_repeated[regmask]
hours_filtered = hours[regmask]

# 拆分训练测试集
X_train, X_test, y_train, y_test = train_test_split(x_filtered, y_filtered, 
                                                    test_size=0.25, random_state=42)

验证结果

筛选后可打印数组形状确认匹配:

print(f"筛选后X形状: {x_filtered.shape}, y形状: {y_filtered.shape}, hours形状: {hours_filtered.shape}")
print(f"有效样本数量: {np.sum(regmask)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:43:22