#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() - переобучает модель и перезаписывает ранее полученные значения новыми, полученными при использовании тестовых данных.
Комментариев нет:
Отправить комментарий