我的准确度是0.0,我不知道为什么?

时间:2019-11-02 01:21:52

标签: python scikit-learn

我的精度为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)

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

1 个答案:

答案 0 :(得分:1)

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

  

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

因此,如果您使用普通编码(例如标签不是来自连续数据的样本),则没有任何意义。例如,您将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%。