如何构建最优排名函数?

我的数据集中每个用户都有一组数值特征 (f1, f2, f3, f4, f5),如下所示。

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

我的目标输出是一个优先级排序的用户列表。例如如下所示。

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

我想利用这些特征来反映用户的优先级。

目前,我是通过将每个用户的所有特征相乘来获得一个分数,并基于这个分数对用户进行排名(如下例所示)。

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

然而,仅仅是将特征相乘并基于multiplied score进行排名效果并不好。我认为应该根据特征在正确预测优先级时的贡献来upweightdownweight这些特征。

因此,我想知道是否有办法(在机器学习/数据科学/统计学中)使用我的特征分数来获得一个接近真实排名的最优排名函数。

如果需要,我很乐意提供更多细节。


回答:

解决这个问题的一种方法是使用机器学习算法,该算法试图学习underlying function,以便基于其特征预测新用户最可能的分数。

然而,请注意,除非样本量足够大,否则模型不会表现得很好。显然,五个样本是不够的,这只是一个草图,让你了解如何使用机器学习来解决这个问题。

我将使用RandomForestRegressor作为示例:

from sklearn.preprocessing import MinMaxScalerfrom sklearn.ensemble import RandomForestRegressor

首先定义将要输入模型的特征和目标。

X_ = df.drop(['target_priority'], axis=1).valuesscaler = 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.])

如你所见,即使使用了少量样本来训练模型,模型也能够以平均误差仅0.4的水平进行预测:

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注