我得到的准确度为 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)
如何提高该数据集的准确性?
波士顿数据集用于回归问题。定义在the docs https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_boston.html#sklearn-datasets-load-boston:
加载并返回波士顿房价数据集(回归)。
因此,如果您使用普通编码(例如标签不是来自连续数据的样本),则没有意义。例如,您将 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%左右。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)