【问题标题】:Python SVM Classifier - issues with input NaNs and data shapePython SVM 分类器 - 输入 NaN 和数据形状的问题
【发布时间】:2020-08-15 23:07:16
【问题描述】:

我正在尝试使用 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 中删除相应的值以匹配样本?或者有更好的方法吗?

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

【问题讨论】:

  • 您似乎调整了X_Train 的大小,但没有调整Y_Train 的大小。尝试添加:Y_Train=Y_Train[~x.isin([np.nan, np.inf, -np.inf]).any(1)]
  • 您好,感谢您的回复!但是这段代码我得到了同样的错误:a = pd.DataFrame(data=X_train) b = pd.DataFrame(data=y_train) a=a[~a.isin([np.nan, np.inf, -np.inf]).any(1)] b=b[~b.isin([np.nan, np.inf, -np.inf]).any(1)]
  • 请您返回X_trainy_train的形状好吗?
  • x.shape = (11276, 9) y.shape = (11627, 1)
  • @SakshiKumar 在 cmets 的代码段中,您正在检查 b(或 y_train)中的 NaN。不要那样做,而是在aX_train 中检查NaN。像这样:a = pd.DataFrame(data=X_train) b = pd.DataFrame(data=y_train) a=a[~a.isin([np.nan, np.inf, -np.inf]).any(1)] b=b[~a.isin([np.nan, np.inf, -np.inf]).any(1)]

标签: python svm dimensions valueerror pywavelets


【解决方案1】:

没有样本数据,就无法进行测试。但是您正在测试 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 数据上测试有效数据。这是因为,我认为所有标签都是有效的。

【讨论】:

  • 这非常有效,我将其应用于测试样本。非常感谢!!
猜你喜欢
  • 2020-06-12
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2016-12-20
相关资源
最近更新 更多