我有一个数据集data
和一个标记数组target
,我用它在scikit中构建,使用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)
在每种情况下。结果是一样的
什么可以解释分数差异
@Harel发现了问题,以下是解释:
np.empty(shape=(length, 1), dtype="S36")
创建了一个形状错误的数组。scikit学习估计器几乎总是想要一维数组,即shape=length
。事实上,这并没有引起一个例外是一个疏忽。