Вполне может быть, что при наличии только двух признаков недостаточно информации для предсказания чисел c (т. Е. Регрессии); в то время как в «более мягкой» классификации (предсказывая только знак, как вы говорите) у вас есть некоторый успех.
Небольшое количество функций - не единственно возможная проблема; Судя по нескольким сэмплам, которые вы разместили, легко увидеть, что, например, ваши первые 5 сэмплов имеют идентичные функции ([1.0, 0.0002]
), в то время как их соответствующие значения y
могут быть где угодно в [-0.0002, 0.0003]
- и ситуация аналогично для ваших образцов # 29583 и 29584. С другой стороны, ваши образцы # 3 ([1.0, 0.0002]
) и # 29587 ([30.0, 0.0022]
) выглядят очень разными, но в конечном итоге они имеют одинаковое значение y
0.0002
,
Если остальная часть вашего набора данных имеет сходные характеристики, она может просто не подойти для моделирования достойной регрессии.
Последнее, но не менее важное, если ваши данные каким-либо образом «упорядочены» по какая-то особенность (они выглядят как, но я, конечно, не могу быть уверен с такой маленькой выборкой), ситуация ухудшается. Я предлагаю разделить ваши данные, используя train_test_split
вместо того, чтобы делать это вручную:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, shuffle=True)
, что, как мы надеемся, из-за перетасовки приведет к более благоприятному разделению. Возможно, вы захотите удалить дубликаты строк из кадра данных перед перетасовкой и разбиением (они никогда не являются хорошей идеей) - см. pandas.DataFrame.drop_duplicates
.