Когда модель обучается на неотрицательной целевой метке, поведение модели на этапе предсказаний зависит от типа модели и её внутреннего устройства. Рассмотрим, что произойдет с предсказаниями в разных сценариях:
Не ограничивает свои предсказания, и они могут быть как положительными, так и отрицательными, даже если целевая метка в обучающем наборе данных была только неотрицательной.
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# Генерация данных
np.random.seed(42)
X = np.random.rand(100, 1) * 10
y = X.ravel() * 2 + np.random.randn(100) * 2 # Целевая метка может быть как положительной, так и отрицательной
# Удаление отрицательных значений
y = np.abs(y)
# Разделение данных
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Обучение модели
model = LinearRegression()
model.fit(X_train, y_train)
# Предсказание
y_pred = model.predict(X_test)
print(y_pred)
В линейной регрессии могут появляться отрицательные предсказания, даже если целевые метки в обучении были неотрицательными.
Некоторые модели, такие как регрессия Пуассона, могут быть специально разработаны для работы с неотрицательными целевыми метками и обеспечивать неотрицательные предсказания.
import numpy as np
from sklearn.linear_model import PoissonRegressor
from sklearn.model_selection import train_test_split
# Генерация данных
np.random.seed(42)
X = np.random.rand(100, 1) * 10
y = np.abs(X.ravel() * 2 + np.random.randn(100) * 2) # Убедимся, что целевая метка неотрицательна
# Разделение данных
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Обучение модели
model = PoissonRegressor()
model.fit(X_train, y_train)
# Предсказание
y_pred = model.predict(X_test)
print(y_pred)
Модели, разработанные для работы с неотрицательными целевыми метками, будут давать неотрицательные предсказания.
Могут обучаться на неотрицательных целевых метках, но предсказания могут включать как неотрицательные, так и отрицательные значения, если этого требует структура дерева.
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
# Генерация данных
np.random.seed(42)
X = np.random.rand(100, 1) * 10
y = np.abs(X.ravel() * 2 + np.random.randn(100) * 2) # Убедимся, что целевая метка неотрицательна
# Разделение данных
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Обучение модели
model = RandomForestRegressor()
model.fit(X_train, y_train)
# Предсказание
y_pred = model.predict(X_test)
print(y_pred)
Случайные леса и деревья решений могут предсказывать отрицательные значения, даже если обучались на неотрицательных целевых метках.
Если модель обучена на неотрицательных целевых метках, предсказания могут включать отрицательные значения в зависимости от типа модели. Линейные модели и деревья решений могут предсказывать отрицательные значения, тогда как модели, разработанные для работы с неотрицательными целевыми метками (например, регрессия Пуассона) и модели с применением трансформаций (например, логарифмическая трансформация) будут давать неотрицательные предсказания.