【问题标题】:KNeighborsClassifier .fit method returns "ValueError: The truth value of a Series is ambiguous."KNeighborsClassifier .fit 方法返回“ValueError:Series 的真值不明确”。
【发布时间】:2018-06-14 09:02:27
【问题描述】:

我已经阅读了很多关于主题标题的问答;但是,我很难理解为什么在使用 KNeighborsClassifier .fit 方法时会引发模棱两可的真值错误。我拥有的代码和数据相对简单:

首先,我从 Opt_Data 数据框中沿行轴删除所有 nan 值,并将结果分配给名为 Training_Data 的变量。

Training_Data = Opt_Data.dropna(axis=0,how='any')

Screenshot of the sample dataset

接下来,我从 Training_Data 数据帧创建两个 numpy 数组。 X_Train 数组由 1 - 10 列的数据组成,Y_Train 数组由目标列的数据组成。在下面的代码中,变量名question就是Target Column的列名。

X_Train = np.array(Training_Data.loc[:,Training_Data.columns != question])

Y_Train = np.array(Training_Data[question])

创建数组后,我设置了 KNeighborsClassifier 函数并将结果传递给名为 knn 的变量。变量 opt_neighbors 是一个整数值 (29)。当我在 knn 上使用 .fit 方法时,我收到上述值错误“系列的真值不明确”。

knn = KNeighborsClassifier(n_neighbors=opt_neighbors,weights='distance',metric='hamming')

knn.fit(X_Train,Y_Train)

实际 X_Train 数组的形状为 (1783,10),实际 Y_Train 数组的形状为 (1783,)。

我阅读了一篇博客,其中指出重复的行可能是导致此错误的原因。但是,当我在 Training_Data 数据帧上使用 drop_duplicates 方法并执行相同的代码时,我收到了相同的错误消息。

我还读到“orand python 语句需要真值。对于熊猫,这些被认为是模棱两可的,所以你应该使用“按位”|(或)或 & (and) 操作。”但是,我不确定该语句如何应用,因为我没有明确使用 orand 语句。

我非常感谢任何人可以为我提供的任何帮助。谢谢!

【问题讨论】:

  • 从不提供数据截图;粘贴数据。也就是说,只需使用Traning_data.loc[:,Training_data.columns != 'Target column' ]。不确定问题 = '目标列'?此外,当您按 loc 切片时,它会产生一个 ndarray。你不需要把它变成一个。
  • 谢谢。我会试试这个方法。如果您能解释如何在不丢失格式的情况下从 excel 中粘贴表格,那将会很有帮助。这就是我能找到的全部:meta.stackexchange.com/questions/73566/…
  • “问题”变量是目标列的实际列名。例如,如果目标列是“你早餐吃什么?”,那么“问题”变量就是字符串“你早餐吃什么?”

标签: python knn ambiguous valueerror


【解决方案1】:

我认为我的代码中有一部分与问题无关;然而,事实证明这是导致问题的原因:

在下面的代码中,我将数据框 (Opt_report) 中的一个元素分配给变量 opt_neighbors。我认为这个赋值会创建一个标量值,但是,它是一个由索引号 (135) 和整数值 (19) 组成的熊猫系列。当我将此变量传递给KNeighborsClassifier函数中的n_neighbors参数时,它被理解为Series 135 19.0,如Out [3]第2行所示,n_neighbors = 135 19.0。我的 KNeighborsClassifier 执行不佳,导致 KNeighborsClassifier 的 .fit 方法无法正常工作。

In  [1]:  opt_neighbors = Opt_report['Optimal_Neighbors']
Out [1]:  135 19.0
          Name: Optimal_Neighbors, dtype: float64

In  [2]: type(opt_neighbors)
Out [2]: pandas.core.series.Series

In  [3]: knn = KNeighborsClassifier(n_neighbors=opt_neighbors,weights='distance',metric='hamming')
         knn
Out [3]: KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='hamming', metric_params=None, n_jobs=1,
         n_neighbors=135    19.0
         Name: Optimal_Neighbors, dtype: float64,p=2, weights='distance') 

如下所示更新代码可解决此问题。

In  [4]: opt_neighbors = int(Opt_report['Optimal_Neighbors'])
Out [4]: 19

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2020-08-03
    • 2018-07-05
    • 2017-12-22
    • 2016-12-01
    • 1970-01-01
    • 2019-01-24
    • 2018-07-09
    • 2020-05-27
    相关资源
    最近更新 更多