【问题标题】:Apache Mahout - Read preference value from StringApache Mahout - 从字符串中读取首选项值
【发布时间】:2017-03-21 23:17:30
【问题描述】:

我的数据集包含经典的 UserID、ItemID 和偏好值,但它们都是字符串。

我已经设法通过覆盖 FileDataModel 类(它是 Mahout 库的一部分)中的 readItemIDFromString() 和 readUserIDFromString() 方法来读取 UserID 和 ItemID 字符串,但是,似乎没有任何支持转换如果我没记错的话。

如果有人对如何解决这个问题有一些意见,我将不胜感激。

为了说明我的意思,这里是我的 UserID 字符串“Conversion”的示例:

@Override
protected long readUserIDFromString(String value) {

    if (memIdMigtr == null) {
        memIdMigtr = new ItemMemIDMigrator();
    }

    long retValue = memIdMigtr.toLongID(value);
    if (null == memIdMigtr.toStringID(retValue)) {
        try {
            memIdMigtr.singleInit(value);
        } catch (TasteException e) {
            e.printStackTrace();
        }
    }
    return retValue;
}

String getUserIDAsString(long userId) {
    return memIdMigtr.toStringID(userId);
}   

以及AbstractIDMigrator的实现:

public class ItemMemIDMigrator extends AbstractIDMigrator {

private FastByIDMap<String> longToString;

public ItemMemIDMigrator() {
    this.longToString = new FastByIDMap<String>(10000);
}

public void storeMapping(long longID, String stringID) {
    longToString.put(longID, stringID);
}

public void singleInit(String stringID) throws TasteException {
    storeMapping(toLongID(stringID), stringID);
}

public String toStringID(long longID) {
    return longToString.get(longID);
}
}

【问题讨论】:

    标签: hadoop mahout


    【解决方案1】:

    Mahout 正在弃用基于 Hadoop 的旧推荐器。我们有一个更现代的产品,它基于一种名为 Correlated Cross-Occurrence (CCO) 的新算法。它使用 Spark 构建,速度提高了 10 倍,并在与查询服务器结合使用时提供实时查询结果。

    此方法提取用户 ID 和项目 ID 的字符串,并生成具有相同 ID 的结果,因此您无需再管理它们。你真的应该看看新系统,不知道旧系统会支持多久。

    Mahout 文档在这里:http://mahout.apache.org/users/algorithms/recommender-overview.html 和这里:http://mahout.apache.org/users/recommender/intro-cooccurrence-spark.html

    所描述的整个系统,包括 SDK、输入存储、模型训练和实时查询是 Apache PredictionIO 项目和 PIO 和“通用推荐器”文档的一部分,这里:http://predictionio.incubator.apache.org/ 和这里:@987654324 @

    【讨论】:

    • 哦,太棒了!谢谢你让我知道,一定会检查出来。太糟糕了,我的老师告诉全班特别要修复这部分,直到下一节课哈哈!
    • 我们在新代码中所做的是保留一个 BiMap(Guava 中的一个东西),它充当 string->int 和 int->string 映射的双向哈希图。这允许您保留内存中的哈希图,以将 Mahout int 行和列序数(您从推荐器获得的 id)转换为原始字符串。 BiMap 的增长与 id 的数量成正比,而不是数据量,查找也是 O(log(n)),因此可以很好地扩展。
    • 这听起来是一个非常聪明的想法,我想这也适用于偏好值?
    • 传入数据是 (user-id, event, item-id) 这些被认为是“偏好”指标,UR 使用多种类型的数据,但旧的 Mahout 推荐器和大多数推荐器仅使用转换数据- -电子商务案例中的购买。 BiMaps 必须是一个用于用户 ID 到 Mahout ordinal int 和一个用于项目 ID 到/来自 Mahout ordinal int。
    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2019-09-30
    • 2018-02-06
    • 1970-01-01
    • 2014-03-16
    相关资源
    最近更新 更多