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

逻辑回归场景下正负样本数据拆分numpy数组问题求助

逻辑回归正负样本拆分问题修复

问题场景

现有邮件ID数组input_x和对应标签数组input_y(0为负样本,1为正样本),需要将数据拆分为正负样本两组,分别对应各自的ID和标签:

import numpy as np
input_x = np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
input_y = np.array([0,1,0,0,1,1,1,0,0,0,0,1,0,1,0])

原编写的split_data函数运行后,标签数组输出正确,但ID数组错误地取了序列索引值,而非对应标签的ID。

错误原因

  1. 填充ID数组时,直接使用循环变量(如j/m)取x[j]/x[m],这是取数组的第j/m个元素,而非标签匹配位置的ID
  2. 嵌套循环逻辑混乱,例如填充正样本时错误判断y[n]==0,完全搞反了标签筛选条件
  3. 手动统计样本数量的循环冗余,可通过numpy内置函数简化

修复方案

方案1:修正循环逻辑

保留原函数结构,调整填充逻辑,用单独的索引变量跟踪正负样本数组的填充位置:

def split_data(x,y):
    # 用numpy内置函数统计正负样本数量,替代手动循环
    neg_count = np.sum(y == 0)
    pos_count = np.sum(y == 1)
    
    print(f"Number of negative (0) values = {neg_count}")
    print(f"Number of positive (1) values = {pos_count}")

    emp_neg_data_x = np.zeros(neg_count)
    emp_neg_data_y = np.zeros(neg_count)
    emp_pos_data_x = np.zeros(pos_count)
    emp_pos_data_y = np.ones(pos_count)  # 直接生成全1数组,无需循环赋值

    # 填充负样本:遍历所有数据,匹配标签0时填充
    neg_idx = 0
    for idx in range(len(y)):
        if y[idx] == 0:
            emp_neg_data_x[neg_idx] = x[idx]
            neg_idx += 1
    
    # 填充正样本:遍历所有数据,匹配标签1时填充
    pos_idx = 0
    for idx in range(len(y)):
        if y[idx] == 1:
            emp_pos_data_x[pos_idx] = x[idx]
            pos_idx += 1

    return emp_neg_data_x, emp_neg_data_y, emp_pos_data_x, emp_pos_data_y

方案2:使用numpy布尔索引(推荐)

利用numpy的布尔索引特性,直接筛选符合条件的数据,代码更简洁高效:

def split_data(x,y):
    # 生成正负样本的布尔掩码
    neg_mask = y == 0
    pos_mask = y == 1
    
    # 直接通过掩码筛选数据
    neg_x = x[neg_mask]
    neg_y = y[neg_mask]
    pos_x = x[pos_mask]
    pos_y = y[pos_mask]
    
    print(f"Number of negative (0) values = {len(neg_x)}")
    print(f"Number of positive (1) values = {len(pos_x)}")
    
    return neg_x, neg_y, pos_x, pos_y

验证结果

运行修复后的函数,将得到正确的结果:

  • 负样本ID:[ 1. 3. 4. 8. 9. 10. 11. 13. 15.]
  • 负样本标签:[0. 0. 0. 0. 0. 0. 0. 0. 0.]
  • 正样本ID:[ 2. 5. 6. 7. 12. 14.]
  • 正样本标签:[1. 1. 1. 1. 1. 1.]

内容的提问来源于stack exchange,提问作者Haris Bin Yousaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:35:24