KNeighborsClassifier .fit方法返回" ValueError:系列的真值是不明确的。"

时间:2018-01-04 15:33:32

标签: python knn ambiguous valueerror

我在主题标题上读过很多问答;但是,当我使用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 是目标列的列名。

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方法并执行相同的代码时,我收到了相同的错误消息。

我也读过" python语句需要真值。对于大熊猫,这些被认为是不明确的,所以你应该使用" bitwise" | (或)或& (和)运营。"但是,由于我没有明确使用语句,因此我不确定此语句是如何应用的。

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

1 个答案:

答案 0 :(得分:0)

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

  

在下面的代码中,我将数据框(Opt_report)中的元素分配给变量 opt_neighbors 。我认为这个赋值会创建一个标量值,但是,它是一个由索引号(135)和整数值(19)组成的熊猫系列。当我将此变量传递给KNeighborsClassifier函数中的n_neighbors参数时,它被理解为系列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