如何用java训练mahout?

Posted

技术标签:

【中文标题】如何用java训练mahout?【英文标题】:How to train mahout with java? 【发布时间】:2013-06-29 13:26:15 【问题描述】:

我需要按特征创建分类器,我有 1500 万行数据,例如:


    "app_entertainment" : 1,
    "app_widgets" : 2,
    "arcade" : 8,
    "books_and_reference" : 2,
    "comics" : 0,
    "brain" : 20,
    "business" : 0,
    "cards" : 5,
    "casual" : 1,
    "communication" : 4,
    "education" : 0,
    "finance" : 1,
    "game_wallpaper" : 0,
    "game_widgets" : 0,
    "health_fitness" : 0,
    "libraries_demo" : 0,
    "racing" : 1,
    "lifestyle" : 1,
    "media_video" : 0,
    "medical" : 0,
    "music_and_audio" : 7,
    "news_magazines" : 2,
    "personalization" : 1,
    "photography" : 0,
    "productivity" : 4,
    "shopping" : 1,
    "social" : 1,
    "sports_apps" : 1,
    "sports_games" : 7,
    "tools" : 15,
    "transportation" : 2,
    "travel_and_local" : 8,
    "weather" : 3,
    "app_wallpaper" : 0,
    "entertainment" : 0,
    "health_and_fitness" : 0,
    "libraries_and_demo" : 0,
    "media_and_video" : 0,
    "news_and_magazines" : 0,
    "sports" : 0

对于这样的每个数据集,我也知道它是真是假, 布尔值是拥有此数据集的用户是否点击了广告。

如何使用 mahout 训练分类器,训练后如何分类?

我在网上找到的一切都非常抽象,如何通过 java 做的例子并不多

【问题讨论】:

你试过什么 我试图弄清楚如何训练它 你试图弄清楚如何训练它? 你在哪里卡住了,错误是什么? 【参考方案1】:

网上关于 Mahout 的资料很少。我参考了 Mahout 源码和Mahout in Action中的源码。

分类可以参考20newsgroup源码。

使用 NavieBayes 分类器的简单示例。向量就是数据集。

public List<String> classifyCase(Vector vector) 
        TreeMap<Double, String> resultMap = new TreeMap<Double, String>();
        Vector result = classifier.classifyFull(vector);
        for (Vector.Element element: result) 
            int categoryId = element.index();
            double score = element.get();
            resultMap.put(-score, labels.get(categoryId));
        

        return new ArrayList<String>(resultMap.values());
    

【讨论】:

这是我见过的最糟糕的例子,我需要一个简单的代码示例来说明如何训练和如何分类,这不好 为什么你认为这是最坏的情况?我想大多数人会参考这些示例来编写 Java 代码,因为网上的示例很少。 因为不是用 4-5 行训练来做一些简单的例子,而是展示如何从文件目录中进行操作,我不需要它,而且它非常令人困惑,我知道如何从文件中读取,但是他们把它塞进了例子中,使它不可读...... 我猜你的意思是 HDFS 编码。 Mahout 使用 Hadoop,因此有许多 FileSystem 编码。但是您可以忽略这些代码,并在本地运行 Mahout。基本上,您可以只使用 Configuration c = new COConfiguration();文件系统 fs = FileSystem.get(配置);那么就不需要考虑其他Hadoop相关的代码了

以上是关于如何用java训练mahout?的主要内容,如果未能解决你的问题,请参考以下文章

如何用三种不同的笔迹训练相同数字的tesseract-ocr?

在 Java 的 Apache Mahout 中测试随机梯度下降模型

如何用数组训练分类器?

如何用OpenCV训练自己的分类器

如何用OpenCV训练自己的分类器

将 Mahout 模型输出导出为 Weka 输入