我的精度为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)
如何提高此数据集的准确性?
答案 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%。