我尝试使用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()
如您所见,接受JavaRDD
或RDD
的Vector
。在单个上计算模型没有任何意义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,将其传递到当前的板状态