【发布时间】:2021-12-16 21:03:14
【问题描述】:
我可以通过以下方式对电影评分执行多热编码:
from sklearn.preprocessing import MultiLabelBinarizer
def multihot_encode(actual_values, ordered_possible_values) -> np.array:
""" Converts a categorical feature with multiple values to a multi-label binary encoding """
mlb = MultiLabelBinarizer(classes=ordered_possible_values)
binary_format = mlb.fit_transform(actual_values)
return binary_format
user_matrix = multihot_encode(lists_of_movieIds, all_movieIds)
其中arr_of_movieIds 是一个batch_size 大小的可变长度电影ID 列表(字符串)列表,all_movieIds 是所有可能的电影ID 字符串。
但是,我希望得到用户对电影的实际评分,而不是结果矩阵上的 1。就像list_of_movieIds 一样,我也可以访问与list_of_ratings 的“平行”。
我该如何有效地做到这一点?是否有另一个 MultiLabelBinarizer 将它们作为参数?我可以做一些花哨的线性代数吗?
我试着这样做:
user_matrix[user_matrix == 1] = np.concatenate(list_of_ratings)
但评级放错了,因为list_of_ratings 的排序方式与all_movieIds 不同...
【问题讨论】:
标签: python numpy scikit-learn one-hot-encoding multi-hot-encoding