Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的准确度为0.0,我不';我不知道为什么?_Python_Scikit Learn - Fatal编程技术网

Python 我的准确度为0.0,我不';我不知道为什么?

Python 我的准确度为0.0,我不';我不知道为什么?,python,scikit-learn,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_scor

我得到的精度是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)

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

波士顿数据集用于回归问题。定义如下:

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

因此,如果您使用普通编码,比如标签不是来自连续数据的样本,那么这是没有意义的。例如,您将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%左右。

您对目标变量进行标签编码的原因是什么?在我看来,这个问题对stackoverflow似乎不是特别相关/有用,尽管我很想听听其他人的意见。不客气。函数对浮点进行舍入或将浮点转换为整数,如将13.7转换为13
int()
函数进行转换。当我说“将标签四舍五入到零(到最接近零的整数)”时,我正试图对此进行解释。例如,如果输入是
[2.1,2.0,3.9,7.1,2.7]
,则输出将是
[2,2,3,7,2]
。在这个数据集中进行分类只是一个糟糕的例子。你可以尝试使用回归模型。