首页 > 解决方案 > 我的准确率是 0.0,我不知道为什么?

问题描述

我的准确度为 0.0。我正在使用波士顿住房数据集。

这是我的代码:

import sklearn
from sklearn import datasets
from sklearn import svm, metrics
from sklearn import linear_model, preprocessing
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
boston = datasets.load_boston()

x = boston.data
y = boston.target

train_data, test_data, train_label, test_label = sklearn.model_selection.train_test_split(x, y, test_size=0.2)

model = KNeighborsClassifier()

lab_enc = preprocessing.LabelEncoder()
train_label_encoded = lab_enc.fit_transform(train_label)
test_label_encoded = lab_enc.fit_transform(test_label)

model.fit(train_data, train_label_encoded)
predicted = model.predict(test_data)
accuracy = model.score(test_data, test_label_encoded)
print(accuracy)

如何提高此数据集的准确性?

标签: pythonscikit-learn

解决方案


波士顿数据集用于回归问题。文档中的定义:

加载并返回波士顿房价数据集(回归)。

因此,如果您使用普通编码(例如标签不是来自连续数据的样本),那是没有意义的。例如,您将 12.3 和 12.4 编码为完全不同的标签,但它们彼此非常接近,如果分类器在实际目标为 12.3 时预测为 12.4,则您评估结果错误,但这不是二元情况。在分类中,预测是否正确,但在回归中,它以不同的方式计算,例如均方误差。

这部分不是必需的,但我想给你一个相同数据集和源代码的例子。通过将标签四舍五入到零(到最接近的整数到零)的简单想法会给你一些直觉。

5.0-5.9 -> 5
6.0-6.9 -> 6
...
50.0-50.9 -> 50

让我们稍微更改一下您的代码。

import numpy as np

def encode_func(labels):
    return np.array([int(l) for l in labels])

...

train_label_encoded = encode_func(train_label)
test_label_encoded = encode_func(test_label)

输出将在 10% 左右。


推荐阅读