Причина в том, что вы запросили слишком низкое значение test_size
в вашем train_test_split
; test_size=0.1
в вашем наборе данных, состоящем только из 10 строк, соответствует одной точке данных в вашем наборе тестов:
x_test, y_test
# (array([[2, 3, 4, 5]]), array([15]))
, следовательно, ошибка (фактически предупреждение, поскольку nan
было возвращено).
Измените его как минимум на 0,2:
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
[...]
print(acc)
# -88.65298209559413
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=42)
[...]
print(acc)
# -0.5210446297916358
и подготовьтесь к диким колебаниям в результирующем R ^ 2 (как уже показано в примерах выше) из-за очень маленький размер ваших данных.
Дополнительно , обратите внимание, что в вашем CSV-файле фактически есть 6 полей, но только 5 имен столбцов, в результате pandas интерпретирует первый столбец как индекс при чтении кадра данных (обратите внимание на то, что 1
отсутствует в переменной x_test
, показанной выше). Вы должны добавить s5
в заголовок и удалить index_col=0
, то есть:
data = pd.read_csv('example.csv', sep=';')
Визуальная проверка ваших переменных, особенно в случае ошибок, всегда окупается.
Не имеет значения для Ваш вопрос, но обозначать R ^ 2 как acc
(подразумевая точность) не является хорошей практикой, поскольку R2 и точность являются различными показателями производительности, а точность не имеет значения в задачах регрессии (она имеет смысл только в классификации).