用于学习排名应用程序的多标签分类

数据挖掘 scikit-学习 学习排名
2022-02-16 19:41:20

我正在寻找一些关于搜索引擎学习排名方法的建议。我用以下数据创建了一个数据集:

query_dependent_score, independent_score, (query_dependent_score*independent_score), classification_label

query_dependent_score是 TF-IDF 分数,即相似性 b/w 查询和文档。

independent_score是文档的查看时间。

将有3个班级:

  • 0(不相关),
  • 1(相关的种类),
  • 2(最相关)

我总共有 750 个查询,我收集了每个查询的前 10 个结果,所以我总共有 7500 个数据点。

我一直在考虑估计一个相关函数,例如:

w0 + w1*query_dependent_score + w2*independent_score + w3*(query_dependent_score*independent_score)

我可以清楚地看到这就像一个分类问题,但我想要一些关于这是否是解决这个问题的正确方法的信息。

我参考了机器学习技术来计算加权平均权重?一些想法。

以下是我编写的代码:

from sklearn.linear_model import LogisticRegression
import numpy as np

DATASET_PATH = "..."

search_data = np.genfromtxt(DATASET_PATH, delimiter=',', skip_header=1, usecols=(1, 2, 3, 4))
document_grades = search_data[:, 3:4]
document_signals = search_data[:, :3]  # This has 3 features.

total_rows = np.shape(search_data)[0]
split_point = int(total_rows * 0.8)

training_data_X, test_data_X = document_signals[:split_point, :], document_signals[split_point:, :]
training_data_y, test_data_y = document_grades[:split_point, :], document_grades[split_point:, :]

clf = LogisticRegression(multi_class="multinomial", solver="lbfgs")

clf.fit(X=training_data_X, y=training_data_y.ravel())

print(clf.classes_)  # [0, 1, 2]
print(clf.coef_)  # This is a 3 x 3 matrix?
print(clf.intercept_)  # An array of 3 elements?

基于sklearn的文档coef_应该给我的值w1w2w3,并且intercept_应该给我的值w0

但是我有一个矩阵和一个用于这些权重的数组。我不确定如何获取相关函数的权重值?

我正在研究第一次学习排名,所以欢迎任何建议。

1个回答

在该multinomial模式下,文档指定 和 的输出coef_intercept_您所见:每个目标类一个输出。底层模型是三个逻辑回归,其输出是 softmax 的(或使用 mode ovr,简单归一化)。

至于更广泛的问题,由于您的三个输出类是有序的,您可能会从使用该信息中受益。要么只执行回归(假设数字 0、1、2 有意义),要么使用“序数回归”。