Как сообщить модели SciKit LinearRegression, что предсказанное значение не может быть меньше нуля? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть следующий код, который пытается оценить акции не на основе цены. чем 0. Однако я иногда получаю значение меньше 0 для некоторых точек в y_predicted.

Есть ли способ в Scikit сказать, что значение меньше 0 является неверным предсказанием? Я надеюсь, что это сделает мою модель более точной.

Прокомментируйте, если есть необходимость в дополнительных объяснениях.

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Чтобы сделать больше прогнозов больше 0, вы не должны использовать линейную регрессию. Вам следует рассмотреть обобщенную линейную регрессию (glm), такую ​​как регрессия Пуассона.

from sklearn.linear_model import PoissonRegressor

price = df.loc[:,'regularMarketPrice']
features = df.loc[:,feature_list]

# 
X_train, X_test, y_train, y_test = train_test_split(features, price, test_size = 0.15, random_state = 1)

if len(X_train.shape) < 2:
    X_train = np.array(X_train).reshape(-1,1)
    X_test = np.array(X_test).reshape(-1,1)

# 
model = PoissonRegressor()
model.fit(X_train,y_train)

# 
print('Train Score:', model.score(X_train,y_train))
print('Test Score:', model.score(X_test,y_test))


# 
y_predicted = model.predict(X_test)

Все прогнозы больше или равны 0

0 голосов
/ 27 мая 2020

Рассмотрите возможность использования чего-то другого, кроме переменной отклика Гаусса. Постройте ваши значения y с помощью гистограммы. Если данные искажены вправо, рассмотрим моделирование с использованием glm, гамма-распределения и ссылки журнала.

В качестве альтернативы вы можете установить y_predicted равным максимальному значению model.score и 0.

...