Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Курс по машинному обучению. Нормализация признаков

#python #python_3x #машинное_обучение #scikit_learn


Прохожу на курсере курс по машинному обучению и зависла на одном задании. 
Даны 2 csv файла: тренировочный и тестовый. Первый столбец - целевые данные, второй
и третий - признаки. Нужно использовать перцептрон (с ramdom_state = 241), посчитать
accuracy (с помощью accuracy_score). Затем произвести нормализацию признаков и посчитать
accuracy снова. Ответом является разница между accuracy до и после нормализации, округленная
до 3 знаков после запятой.
Я вроде бы делаю все правильно, но получаю неверный ответ. 
Если будет нужно, могу скинуть задание целиком и файлы.

import pandas
from sklearn.linear_model import Perceptron
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler

data_train = pandas.read_csv('train.csv', header=None)
data_test = pandas.read_csv('test.csv', header=None)

X_train = data_train[[1, 2]]
X_test = data_test[[1, 2]]
Y_train = data_train[0]
Y_test = data_test[0]

magic_number = 241

per = Perceptron(random_state=magic_number, max_iter=5, tol=None)
per.fit(X_train, Y_train)

predictions = per.predict(X_test)

accuracy = accuracy_score(Y_test, predictions)

scale = StandardScaler()

X_train_scaled = scale.fit_transform(X_train)
X_test_scaled = scale.fit_transform(X_test)

per.fit(X_train_scaled, Y_train)

predictions_scaled = per.predict(X_test_scaled)

accuracy_scaled = accuracy_score(Y_test, predictions_scaled)

answer = round(accuracy_scaled - accuracy, 3)

print(answer)

    


Ответы

Ответ 1



Скорее всего от вас хотят, чтобы вы при нормализации тестового набора использовали метод .transform() вместо .fit_transform(): X_test_scaled = scale.transform(X_test) PS метод .fit_transform() - переобучает модель и перезаписывает ранее полученные значения новыми, полученными при использовании тестовых данных.

Комментариев нет:

Отправить комментарий