Python SVM分类器-输入NaN和数据形状问题

时间:2020-05-01 12:48:55

标签: python svm dimensions valueerror pywavelets

我正在尝试使用ECG数据构建二进制SVM分类器,以诊断睡眠呼吸暂停。使用16,000个奇数输入,我正在执行小波变换,手动提取HRV特征并将其存储在特征列表中,然后将此列表输入分类器。

在原始数据进行小波变换步骤进行预处理之前,这种方法可以很好地工作-变换后,功能列表中的某些值变为nan,这意味着我在以下代码行中遇到了此错误:

clf.fit(X_train, y_train)

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

所以我执行了这一步:

x = pd.DataFrame(data=X_train)
x=x[~x.isin([np.nan, np.inf, -np.inf]).any(1)]

解决了ValueError,但删除了“错误的”输入意味着X_train和y_train的形状不匹配:

clf.fit(x, y_train)

#error
Found input variables with inconsistent numbers of samples: [11255, 11627]

我正在努力找出如何从y_train中删除相应的值以匹配样本?还是有更好的方法呢?

如果您需要有关代码的更多信息,请告诉我。

1 个答案:

答案 0 :(得分:2)

没有示例数据,就无法测试。但是,您正在测试X_train数据框中的有效数据。哪个好现在,您只需要删除相应的Y_train标签即可。像这样:

x = pd.DataFrame(data=X_train)
valid_indexes = ~x.isin([np.nan, np.inf, -np.inf]).any(1)
x=x[valid_indexes]

Y_train = Y_train[valid_indexes]

确保始终在测试X_train数据上的有效数据。我认为这是因为所有标签都是有效的。