我正在尝试用ECG数据建立一个二进制SVM分类器来诊断睡眠呼吸暂停。在有16000个奇数输入的情况下,我正在进行小波变换,手动提取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中删除相应的值来匹配样本?或者有什么更好的方法吗?
如果你需要更多的代码信息,请告诉我。
没有样本数据,就无法测试。但是你在测试有效数据的时候 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
的数据,这是因为,我假定所有的标签都是有效的。这是因为,我推测所有的标签都是有效的。