当前位置: 首页 > 面试题库 >

用于LogisticRegression的Spark MLLib TFIDF实现

通和裕
2023-03-14
问题内容

我尝试使用Spark
1.1.0提供的新的TFIDF算法。我正在用Java写MLLib的工作,但我不知道如何使TFIDF实现有效。由于某种原因,IDFModel仅接受JavaRDD作为方法转换的输入,而不接受简单的Vector。
如何使用给定的类为我的LabledPoints建模TFIDF向量?

注意:文档行的格式为[标签; 文本]

到目前为止,这里是我的代码:

        // 1.) Load the documents
        JavaRDD<String> data = sc.textFile("/home/johnny/data.data.new");

        // 2.) Hash all documents
        HashingTF tf = new HashingTF();
        JavaRDD<Tuple2<Double, Vector>> tupleData = data.map(new Function<String, Tuple2<Double, Vector>>() {
            @Override
            public Tuple2<Double, Vector> call(String v1) throws Exception {
                String[] data = v1.split(";");
                List<String> myList = Arrays.asList(data[1].split(" "));
                return new Tuple2<Double, Vector>(Double.parseDouble(data[0]), tf.transform(myList));
            }
        });

        tupleData.cache();

        // 3.) Create a flat RDD with all vectors
        JavaRDD<Vector> hashedData = tupleData.map(new Function<Tuple2<Double,Vector>, Vector>() {
            @Override
            public Vector call(Tuple2<Double, Vector> v1) throws Exception {
                return v1._2;
            }
        });

        // 4.) Create a IDFModel out of our flat vector RDD
        IDFModel idfModel = new IDF().fit(hashedData);

        // 5.) Create Labledpoint RDD with TFIDF
        ???

*肖恩·欧文(Sean Owen)的 *解决方案

        // 1.) Load the documents
        JavaRDD<String> data = sc.textFile("/home/johnny/data.data.new");

        // 2.) Hash all documents
        HashingTF tf = new HashingTF();
        JavaRDD<LabeledPoint> tupleData = data.map(v1 -> {
                String[] datas = v1.split(";");
                List<String> myList = Arrays.asList(datas[1].split(" "));
                return new LabeledPoint(Double.parseDouble(datas[0]), tf.transform(myList));
        }); 
        // 3.) Create a flat RDD with all vectors
        JavaRDD<Vector> hashedData = tupleData.map(label -> label.features());
        // 4.) Create a IDFModel out of our flat vector RDD
        IDFModel idfModel = new IDF().fit(hashedData);
        // 5.) Create tfidf RDD
        JavaRDD<Vector> idf = idfModel.transform(hashedData);
        // 6.) Create Labledpoint RDD
        JavaRDD<LabeledPoint> idfTransformed = idf.zip(tupleData).map(t -> {
            return new LabeledPoint(t._2.label(), t._1);
        });

问题答案:

IDFModel.transform()如您所见,接受JavaRDDRDDVector。在单个上计算模型没有任何意义Vector,所以这不是您想要的吗?

我假设您正在使用Java,因此您想将此应用到JavaRDD<LabeledPoint>LabeledPoint包含Vector和标签。IDF不是分类器或回归器,因此不需要标签。您可以map一堆LabeledPoint来提取它们Vector

但是你已经有了一个JavaRDD<Vector>以上。TF-
IDF仅仅是一种基于语料库中的词频将词映射到实值特征的方法。它还不输出标签。也许您的意思是想从TF-IDF衍生的特征向量以及其他一些已有的标签中开发分类器?

也许这可以解决问题,但否则,您必须极大地阐明您正在尝试使用TF-IDF实现的目标。



 类似资料:
  • 问题内容: 我有以下代码来测试sklearn python库的一些最流行的ML算法: 前两个工作正常,但在通话中出现以下错误: 输入数据与之前的调用中的数据相同,所以这里发生了什么? 顺便说一下,为什么会出现在第一预测一个巨大的性差异和算法? 问题答案: 您正在将浮点数传递给分类器,该分类器期望将分类值作为目标向量。如果将其转换为输入,那么它将被接受为输入(尽管这样做是否正确还是值得怀疑的)。 最

  • 问题内容: 我意识到,由于UNIX套接字是特定于平台的,因此必须包含一些非Java代码。具体来说,我们对使用JDBC连接到仅启用UNIX域套接字的MySQL实例感兴趣。 看起来好像不支持该功能,但是据我所读, 如果 我们能够找到一个适合Java的UNIX套接字的实现, 那么 至少应该可以为基于UNIX套接字的JDBC写一个SocketFactory 。 有人尝试过吗?有人知道这样的实现吗? 问题答

  • 本文向大家介绍Java基于ReadWriteLock实现锁的应用,包括了Java基于ReadWriteLock实现锁的应用的使用技巧和注意事项,需要的朋友参考一下 所有 ReadWriteLock 实现都必须保证 writeLock 操作的内存同步效果也要保持与相关 readLock 的联系。也就是说,成功获取读锁的线程会看到写入锁之前版本所做的所有更新。 与互斥锁相比,读-写锁允许对共享数据进行

  • 我是openNlp的新手。我开始训练一个模型(TokenNameFinderTrainer),以识别名称。到目前为止还不错,但现在我想识别组织(例如“Microsoft”)。 我的问题是:opennlp默认识别哪些类型的实体?(如果有的话...) 我看到它可以处理

  • 问题内容: 如何使用正在侦听套接字连接端口的Servlet来实现Web应用程序? 问题答案: 我假设您不是指通过servlet容器免费获得的前门HTTP连接。但是,如果您想添加例如admin服务,则可以创建一个侦听器线程来设置某些全局状态。 servlet。请注意,这不被认为是犹太洁食的(我相信甚至可能违反servlet标准)。

  • 我正在尝试为一个游戏创建一个AI播放器,使用带有alpha-beta修剪的minimax算法。我在正确地执行它时遇到了一些困难。我有两个功能要使用,一个用于评估给定玩家(返回一些分数)getBoardScore的当前棋盘状态,另一个用于返回每个可能移动(从给定玩家的给定棋盘状态)GetPossibleBoard创建的所有可能棋盘状态。 我的AI通过最初调用alphaBeta,将其传递到当前的板状态