Как построить оптимальную функцию ранжирования? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть набор числовых функций (f1, f2, f3, f4, f5), как указано ниже для каждого пользователя в моем наборе данных.

       f1   f2  f3  f4  f5
user1  0.1  1.1  0 1.7  1
user2  1.1  0.3  1 1.3  3
user3  0.8  0.3  0 1.1  2
user4  1.5  1.2  1 0.8  3
user5  1.6  1.3  3 0.3  0

Мой целевой вывод - список пользователей с приоритетом.то есть, как показано в примере ниже.

       f1   f2  f3  f4  f5  target_priority
user1  0.1  1.1  0 1.7  1       2
user2  1.1  0.3  1 1.3  3       1
user3  0.8  0.3  0 1.1  2       5
user4  1.5  1.2  1 0.8  3       3
user5  1.6  1.3  3 0.3  0       4

Я хочу использовать эти функции таким образом, чтобы отражать приоритет пользователя.

В настоящее время я многократно множу все функции каждого из них.пользователю, чтобы получить оценку и ранжировать пользователей на основе оценки (пример показан ниже).

       f1   f2  f3  f4  f5  multipled_score predicted_priority
user1  0.1  1.1  0 1.7  1        0              5
user2  1.1  0.3  1 1.3  3        1.287          2
user3  0.8  0.3  1 1.1  2        0.528          4
user4  1.5  1.2  1 0.8  3        4.32           1
user5  1.6  1.3  1 0.3  1        0.624          3

Однако простое умножение функций и ранга на основе multiplied score не сработало.Я думаю, что функции должны быть upweight или downweight на основе их вклада в правильное прогнозирование приоритета.

Поэтому я хотел бы знать, есть ли способ (в машинном обучении / науке о данных / статистике), чтобы получить оптимальную функцию ранжирования, используя оценки моих функций, чтобы получить список ранжирования, закрытый для реального рейтинга.

Я с удовольствием предоставлю более подробную информацию, если это необходимо.

1 Ответ

0 голосов
/ 21 февраля 2019

Одним из способов решения этой проблемы является использование алгоритма машинного обучения, который пытается изучить базовую функцию , чтобы предсказать наиболее вероятную оценку нового пользователя на основе его возможностей.

Обратите внимание, что модель не будет работать хорошо, если количество образцов недостаточно велико.Пять примеров явно недостаточны, это всего лишь набросок, чтобы дать вам представление о том, как вы могли бы подойти к этому, используя машинное обучение.

Я буду использовать RandomForestRegressor в качестве примера:

from sklearn.preprocessing import MinMaxScaler
from sklearn.ensemble import RandomForestRegressor

Давайте начнем с определения характеристик и цели, которые будут поданы в модель.

X_ = df.drop(['target_priority'], axis=1).values
scaler = MinMaxScaler()
X = scaler.fit_transform(X_)
y = df.target_priority

Теперь давайте подгоним модель:

rf = RandomForestRegressor()
rf.fit(X,y)

ЗдесьЯ не разделял данные в обучающих и тестовых наборах, но вы должны делать это, чтобы иметь представление о том, насколько хорошо работает ваша модель.Здесь, учитывая, что для каждой существующей цели существует один образец, я обучил модель всем образцам и создам набор тестов, добавив некоторый шум к тренировочным данным:

noise = np.random.normal(loc=0, scale=0.2, size=X.shape)
X_test = X + noise

А теперьВы можете получить прогнозы на тестовом наборе, используя обученную модель:

y_pred = rf.predict(X_test).round()
# array([2., 2., 4., 3., 4.])

A Вы можете видеть, что даже при небольшом количестве выборок, использованных для обучения модели, модель была в состоянии прогнозировать со среднимошибка только 0.4:

np.abs(y - y_pred).mean()
# 0.4
...