1

我有一个数据集data和一个标记数组 ,target我用它在 scikit-learn 中使用 k-最近邻算法构建了一个监督模型。

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

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

neigh.score(data, target)


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

  • 如果是 python 列表,即使用 创建list()并用 填充target.append(),则 score 方法返回 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)

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

什么可以解释分数差异?

4

1 回答 1

2

@Harel 发现了问题,解释如下:

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

创建一个错误形状的数组。scikit-learn 估计器几乎总是需要一维数组,即shape=length. 这不会引发异常的事实是一个疏忽。

于 2013-07-16T19:07:56.990 回答