Как повысить точность прогнозирования в scikit-learn

1

Я хочу предсказать параметр на основе 3 функций и 1 цели. Вот мой входной файл (data.csv):

feature.1   feature.2   feature.3   target
    1           1          1        0.0625
    0.5         0.5        0.5      0.125
    0.25        0.25       0.25     0.25
    0.125       0.125      0.125    0.5
    0.0625      0.0625     0.0625   1

Вот мой код:

import pandas as pd
from sklearn.model_selection import train_test_split
from collections import *
from sklearn.linear_model import LinearRegression

features = pd.read_csv('data.csv')

features.head()
features_name = ['feature.1' , 'feature.2' , 'feature.3']
target_name = ['target']

X = features[features_name]
y = features[target_name]

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.1, random_state = 42)

linear_regression_model = LinearRegression()
linear_regression_model.fit(X_train,y_train)

#Here is where I want to predict the target value for these inputs for 3 features
new_data  = OrderedDict([('feature.1',0.375) ,('feature.2',0.375),('feature.3',0.375) ])

new_data = pd.Series(new_data).values.reshape(1,-1)
ss = linear_regression_model.predict(new_data)
print (ss)

В соответствии с этой тенденцией, я ожидаю получить значение около 0,1875, если я дам 0,375 в качестве входных данных для всех функций. Однако код предсказывает это:

[[0.44203368]]

Что не правильно. Я не знаю, где проблема. Кто-нибудь знает, как я могу это исправить?

Спасибо

  • 5
    Все ваши данные тренировок имеют одинаковые все 3 характеристики, что поднимает возможные проблемы коллинеарности; если это всегда так, вы должны просто избавиться от всех функций, кроме одной. Если нет, то вы должны включить некоторые точки данных в свой набор обучения, где это условие не выполняется ...
  • 2
    Эта коллинеарность ваших функций приведет к проблемам с допущениями о линейной регрессии.
Теги:
scikit-learn
prediction
linear-regression

2 ответа

0

Вы должны использовать sklearn.pipeline чтобы объявить степень predictor line.

polynomial_features = PolynomialFeatures(degree=1, include_bias=False)
    linear_regression = LinearRegression()
    pipeline = Pipeline([("polynomial_features", polynomial_features),
                         ("linear_regression", linear_regression)])
    pipeline.fit(X[:, np.newaxis], y)

Если вы сделаете это, вы получите ожидаемое значение.

0

Ваши данные не являются линейными. Я нарисовал только одно измерение, так как функции идентичны:

Изображение 174551

Аппроксимация нелинейной функции с помощью модели LinearRegression приводит к плохим результатам, как вы уже видели. Вы можете попытаться смоделировать более подходящую функцию и подобрать ее параметры с помощью scipy: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню