Моя точность в 0.0, и я не знаю почему? - PullRequest
4 голосов
/ 02 ноября 2019

Я получаю точность 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 Ответ

1 голос
/ 02 ноября 2019

Бостонский набор данных предназначен для проблем регрессии. Определение в документах :

Загрузка и возврат набора данных по ценам на жилье в Бостоне (регрессия).

Таким образом, это не имеет смысла, еслиВы используете обычную кодировку, например, метки не являются образцами непрерывных данных. Например, вы кодируете 12.3 и 12.4 для совершенно разных меток, но они довольно близки друг к другу, и вы неправильно оцениваете результат, если классификатор предсказывает 12.4, когда реальная цель равна 12.3, но это не двоичная ситуация. В классификации прогноз является правильным или нет, но в регрессии он рассчитывается по-другому, например, среднеквадратическая ошибка.

Эта часть не является необходимой, но я хотел бы привести вам пример длятот же набор данных и исходный код. Простая идея округлить метки до нуля (до ближайшего целого числа до нуля) даст вам некоторую интуицию.

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%.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...