【问题标题】:LeaveOneOut() - Key Error in an SVM ClassifierLeaveOneOut() - SVM 分类器中的关键错误
【发布时间】:2021-10-14 09:26:51
【问题描述】:

我正在处理一个 csv 文件:39 个参与者(行),每个参与者都有 30 个特征(列)的值。我正在尝试使用以下代码实现 LeaveOneOut() 。我遇到了一个关键错误...任何帮助将不胜感激!

# code
X = df.drop(labels=['Diagnosis'], axis=1) # dropped diagnosis 

Y = df['Diagnosis'].values
Y = Y.astype('int') 

loo = LeaveOneOut()
for train, test in loo.split(X, Y):
    X_train, X_test = X[train], X[test]
    Y_train, Y_test = Y[train], Y[test]

svm = SVC(kernel='linear')
svm.fit(X_train,Y_train)
pred_svm = svm.predict(X_test)
print(classification_report(Y_test, pred_svm))
print(confusion_matrix(Y_test, pred_svm))

【问题讨论】:

  • 什么是错误,如果问题是由此引起的,您能否分享您的 LeaveOneOut 实现?
  • 错误显示: raise KeyError(f"None of [{key}] are in the [{axis_name}]") KeyError: "None of [Int64Index([ 1, 2, 3, 4 , 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n... 当我将 print(X_train, X_test, Y_train, Y_test) 函数放在我的 ' for' 循环,它再次给出此错误并且不打印任何拆分。再次感谢

标签: python svm leave-one-out


【解决方案1】:

如果您可以分享 loo 的结果,我可以更准确地回答,但据我了解,它是索引列表而不是布尔掩码,因此您可以像这样更改代码。

for train, test in loo.split(X, Y):
    X_train, X_test = X.loc[train].copy(), X.loc[test].copy()
    Y_train, Y_test = Y[train], Y[test]

【讨论】:

  • 谢谢,虽然现在可以适当地拆分训练和测试数据,但新的警告消息是:SettingWithCopyWarning:正在尝试在 DataFrame 的切片副本上设置值。产生的混淆矩阵全为 1。再次感谢您的帮助,我是新手
  • 你只需要复制数据框。我正在编辑答案
  • 对不起,这不起作用。我已经想到了其他一些我可以尝试的解决方案!再次感谢您抢先一步!
猜你喜欢
  • 2015-06-28
  • 2018-05-15
  • 2020-06-01
  • 2013-12-08
  • 2013-06-07
  • 2023-04-08
  • 2016-03-16
  • 2020-06-12
  • 2018-08-11
相关资源
最近更新 更多