Вопрос или проблема
Учитывая набор данных с 100 наблюдениями и 3 признаками плюс одна метка (регрессия), мы обучаем модель на данных 100 * 4 (3 признака + 1 метка). Теперь можем ли мы предсказать признаки, когда метка задана в качестве входных данных. Например:
f1 f2 f3 Метка
2 2 3 12.5
3 6 5 3.8
6 5 4 9.2
……….
……….
……….
……….
Теперь вопрос заключается в том, чтобы предсказать f1, f2 и f3, когда метка задана (если метка=6.7, то предсказать f1, f2, f3). Будет полезно, если будут предложены какие-либо рекомендации или ресурсы.
Потенциальные решения – это линейные или случайные леса регрессоров. Вот пример кода с данными, сгенерированными как у вас:
from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
#%%
X, y = make_regression(n_samples=100, n_features=1, n_targets=3,
n_informative=1,
random_state=0, shuffle=False)
print(X)
print(y)
#%%
model = LinearRegression()
# обучить модель
model.fit(X, y)
# сделать прогноз
row = [0.21947749]
yhat = model.predict([row])
# обобщить прогноз
print(yhat[0])
model = RandomForestRegressor()
# обучить модель
model.fit(X, y)
# сделать прогноз
row = [0.21947749]
yhat = model.predict([row])
# обобщить прогноз
print(yhat[0])
Если линейная регрессия окажется недостаточно эффективной, вы также можете попробовать логистическую регрессию:
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
Более подробная информация о регрессе случайного леса:
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html?highlight=random+forest+regressor#sklearn.ensemble.RandomForestRegressor
См. также:
https://machinelearningmastery.com/multi-output-regression-models-with-python/
Ответ или решение
Можно ли предсказать признаки по меткам в машинном обучении?
Введение
Вопрос о том, возможно ли предсказать признаки (функции) на основе меток (целевых переменных) в машинном обучении, является довольно интересным и сложным. В данной ситуации мы рассматриваем набор данных с 100 наблюдениями, содержащим три признака и одну метку, для которых мы хотим сделать предсказания. Давайте глубже разберемся в этом.
Постановка задачи
Имеется набор данных, где каждый экземпляр описан тремя признаками (f1, f2, f3) и одной меткой (Label). Для примера:
f1 f2 f3 Label
2 2 3 12.5
3 6 5 3.8
6 5 4 9.2
...
Цель состоит в том, чтобы предсказать значения f1, f2 и f3, если задано значение метки (например, Label = 6.7).
Определение задачи
В общем случае задача предсказания признаков на основе меток называется обратной задачей регрессии. Однако, важно отметить, что обычно машинное обучение работает в прямом направлении: от признаков к меткам. Поэтому предсказание признаков на основании меток может потребовать применения специальных методов и моделей.
Возможные подходы
-
Обратная регрессия: Можем рассмотреть возможность построения модели регрессии для предсказания каждого из признаков на основе значения метки. Это можно реализовать с помощью таких алгоритмов, как линейная регрессия или регрессоры, основанные на деревьях, такие как Random Forest. Но важно понимать, что эта модель должна быть специально обучена с учётом зависимости признаков от меток.
-
Мультимодальная регрессия: Если существует достаточно данных, возможно, имеет смысл рассмотреть модели мультимодальной регрессии. Они могут обрабатывать случаи с несколькими выходными данными.
-
Обучение с учителем: Обучение модели включит создание сопоставления между метками и признаками. Например, для значений меток в диапазоне возможных (например, [0, 15]) мы можем создавать дополнительные точки данных, проводя интерполяцию, экстраполяцию или используя алгоритмы класса «nearest neighbor».
Параметры моделей
-
Линейная регрессия: Подходит для линейных зависимостей между признаками и метками, но может быть недостаточно эффективной для более сложных зависимостей.
-
Random Forest: Является более сложной технологией, которая может уловить нелинейные зависимости и взаимодействия между признаками.
Пример кода
Предположим, ваши данные оформлены в виде NumPy массивов или Pandas DataFrames. Вот простой пример кода на Python с использованием sklearn
для создания модели:
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
# Создаём пример данных
data = {
'f1': [2, 3, 6],
'f2': [2, 6, 5],
'f3': [3, 5, 4],
'Label': [12.5, 3.8, 9.2]
}
df = pd.DataFrame(data)
# Выделяем признаки и метку
X = df['Label'].values.reshape(-1, 1) # Метка как входные данные
y = df[['f1', 'f2', 'f3']].values # Признаки
# Обучение модели
model = RandomForestRegressor()
model.fit(X, y)
# Прогнозирование
predictions = model.predict([[6.7]])
print(f'Предсказанные значения: f1={predictions[0][0]}, f2={predictions[0][1]}, f3={predictions[0][2]}')
Заключение
Возможность предсказания признаков из меток в машинном обучении интересна и имеет свои ограничения. Подходы, такие как линейная регрессия и случайные леса, могут быть использованы в этой задаче. Тем не менее, следует помнить, что качество предсказаний будет сильно зависеть от качества и характера имеющихся данных. Рекомендуется проводить предварительный анализ, чтобы лучше понять структуру данных и обнаружить возможные зависимости между признаками и метками.
Рекомендации и ресурсы
Еще более подробные сведения о данной теме можно найти в следующих источниках:
- Документация по Random Forest Regressor.
- Учебник по мультимодальной регрессии.
- Основы линейной регрессии – https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html.
Эти ресурсы помогут углубить ваше понимание и навыки в области машинного обучения и регрессии.