无论是在scikit-learn中使用列表还是numpy数组,结果都不同

时间:2013-07-16 10:46:35

标签: python numpy classification scikit-learn

我有一个数据集data和一个带标签的数组target,我使用k-Nearest Neighbors算法构建了一个监督模型。

neigh = KNeighborsClassifier()
neigh.fit(data, target)

我现在能够使用这个模型对我的学习集进行分类。获得分类分数:

neigh.score(data, target)


现在我的问题是这个分数取决于target对象的类型。

  • 如果是python列表,即使用list()创建并填入target.append(),则分数方法返回0.68。
  • 如果它是一个numpy数组,使用target = np.empty(shape=(length,1), dtype="S36")创建(它只包含36个字符的字符串),并用target[k] = value填充,则score方法返回0.008。

为了确定结果是否真的不同,我创建了列出

结果的文本文件
for k in data:
    neigh.predict(k)

在每种情况下。结果是一样的。

什么可以解释分数差异?

1 个答案:

答案 0 :(得分:2)

@Harel发现了这个问题,这是解释:

np.empty(shape=(length, 1), dtype="S36")

创建一个错误形状的数组。 scikit-learn估算器几乎总是需要一维数组,即shape=length。这不会导致例外的事实是疏忽。