- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个这样的数据文件:
"id"; "a"; "b"; "c"; "d"; "e"; "f"; "outcome"
1144216938;1988;0;0;1;1965.115431348724;19.07168894289186;0
1093965329;2004;1;1;1;302.2244897959184;16.762951334379906;1
....
第一列代表每个案例的 id 标签,而最后一列代表二进制结果,即 0 或 1。中间的所有变量都用于逻辑回归模型(我尚未对它们进行标准化)。我在 Spark 中读取该文件:
JavaRDD<String> data = sc.textFile(filename);
JavaRDD<LabeledPoint> parseddata = data
.map((String line) -> {
String[] parts = line.split(";");
double[] points = new double[parts.length - 1];
for (int i = 0; i < (parts.length - 1); i++) {
points[i] = Double.valueOf(parts[i]);
}
return new LabeledPoint(Double.valueOf(parts[parts.length - 1]), Vectors.dense(points));
});
我不熟悉 LabeledPoint 数据结构,所以这可能很容易解决,但我不明白如何......所以我有三个相关问题:
编辑根据 Eliasah 的评论,这应该可以解决问题:
// retrieve the header
String first = data.first();
// filter it out
JavaRDD<String> filteredData = data.filter((String s) -> {
return !s.contains(first);
});
结束编辑
有没有办法将第一列映射为行名称,以便将其从回归模型中使用的点中排除 - 除了使用:
for (int i = 1; i < (parts.length - 1); i++) {
points[i] = Double.valueOf(parts[i]);
}
最后,当我使用以下方法从回归模型检索预测时,如何将预测映射到正确的“id”:
JavaRDD<Tuple2<Object, Object>> predictionAndLabels = test.map((LabeledPoint p) -> {
Double prediction = model.predict(p.features());
return new Tuple2<Object, Object>(prediction, p.label());
});
编辑2尽管答案说明了一切,但我能想到的是:
JavaRDD<Tuple2<Object, Object>> results = filteredData.map((String line) -> {
String[] parts = line.split(";");
double[] points = new double[parts.length - 1];
//skip first column with npi values
for (int i = 1; i < (parts.length - 1); i++) {
points[i] = Double.valueOf(parts[i]);
}
LabeledPoint labeledPoint = new LabeledPoint(Double.valueOf(parts[parts.length - 1]), Vectors.dense(points));
return new Tuple2<Object, Object>(parts[0], model.predict(labeledPoint.features()));
});
这很遗憾,因为我基本上又重新制作了 map ......这是正确的方法吗?
编辑3
感谢 eliasah 的其他评论,我现在过滤数据如下:
JavaRDD<Tuple2<String, LabeledPoint>> parsedData = filteredData.map((String line) -> {
String[] parts = line.split(";");
double[] points = new double[parts.length - 1];
for (int i = 1; i < (parts.length - 1); i++) {
points[i] = Double.valueOf(parts[i]);
}
return new Tuple2<String, LabeledPoint>(parts[0], new LabeledPoint(Double.valueOf(parts[parts.length - 1]), Vectors.dense(points)));
});
我用它来训练:
JavaRDD<LabeledPoint> training = parsedData
.map((Tuple2<String, LabeledPoint> z) -> {
return z._2();
});
并检索我的每个案例的概率:
JavaRDD<Tuple2<String, Double>> results = parsedData
.map((Tuple2<String, LabeledPoint> z) -> {
return new Tuple2<String, Double>(z._1(), model.predict(z._2().features()));
});
最佳答案
关于 header ,我通常使用 header 是 rdd.first() 来获取 header ,然后在 rdd 上使用过滤器:
String header = data.first();
JavaRDD<String> filteredData = data.filter((String s) -> {
return !s.contains(header);
});
关于最后一个问题,我使用 Scala 映射第二部分,然后根据 vector 是稀疏还是密集,我按如下方式创建 vector 。
你需要跟踪你的idlabeledpoint RDD[(Int,LabeledPoint)](对不起,我更熟悉scala)然后你可以通过这个rdd进行mapreduce来预测labeledpoint.feature
rdd.map{ case (id,p) => (id,model.predict(p.features)) }
关于java - 如何在 Spark 中管理 JavaRDD<LabeledPoint> 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33223152/
我的 LabeledPoint 中有一些不平衡的数据.我想要做的是选择所有正面和 n负数倍(随机)。例如,如果我有一个 100正面和 30000底片,我想创建新 LabeledPoint与所有 100
如果我有一个大约有 500 列和 2 亿行的 RDD,并且 RDD.columns.indexOf("target", 0)显示 Int = 77这告诉我我的目标因变量在第 77 列。但我对如何选择所
我有两个 LabeledPoints - Prediction1 和 Prediction2。这两个LabeledPoints都具有作为第一个元素的值和作为第二个元素的预测。我想检查 Predicti
我正在尝试使用 Apache Spark MLlib 实现文档分类器,但在表示数据时遇到了一些问题。我的代码如下: import org.apache.spark.sql.{Row, SQLConte
我有两个 LabeledPoints - lable1 和 label2: label1 = (label,[feature1,feature2,feature3]) label2 = (label,
我在使用 PySpark 的 saveAsHadoopFile() 时遇到错误,而在使用 saveAsSequenceFile() 时遇到同样的错误。我需要保存一个 (key,val) 的 RDD,其
我正在一个非常简单的数据集上运行一些测试,该数据集基本上由数字数据组成。可以查到here . 我在使用 pandas、numpy 和 scikit-learn 时效果很好,但在转向 Spark 时,我
我已经使用 Impala 构建了一个包含目标和数百个特征的表。我想使用 Spark MLlib 来训练模型。我知道为了通过 Spark 运行分布式监督模型,数据需要采用多种格式之一。 LabeledP
我是 Apache Spark 的新手,正在尝试将数据从 .csv 文件转换为 LabeledPoint 以使用 Apache Spark 的 MLlib 包。我尝试使用以下代码获取 LabeledP
我有一个这样的数据文件: "id"; "a"; "b"; "c"; "d"; "e"; "f"; "outcome" 1144216938;1988;0;0;1;1965.115431348724;1
我尝试将 PCA 应用于我的数据,然后将 RandomForest 应用于转换后的数据。但是,PCA.transform(data) 给了我一个 DataFrame,但我需要一个 mllib Labe
我有一个 LabeledPoint 我想运行逻辑回归: Data: org.apache.spark.rdd.RDD[org.apache.spark.mllib.regression.Labeled
我在 RDD[LabeledPoint] 中有数据(在下面的代码中表示为 sparse0.sparseData) 我想转换为RDD[(Long,Vector)],这样我就可以在mllib包中运行LDA
我正在尝试使用 Spark MLlib 实现一个简单的 SVM 分类算法。 我有一堆字符串和它们的标签,现在我想对它们执行 TF-IDF,并将结果提供给 SVM 算法。 所以我正在寻找的是从 Stri
我使用 python 中的什么 .map() 函数从 spark 数据帧创建一组 labeledPoints?如果标签/结果不是第一列,但我可以引用其列名“状态”,那么符号是什么? 我使用这个 .ma
我有以下使用 pyspark.ml 包进行线性回归的代码。但是,当模型适合时,我在最后一行收到此错误消息: IllegalArgumentException: u'requirement failed
我了解到,在使用 spark 数据框时,您会希望将任何数据源直接导入为 spark 数据框。在我的例子中,我需要使用 pandas 函数来破坏表格并创建虚拟变量。因此,在读取数据后,我在我的 .map
以下代码行将(即将弃用)mllib.regression.LabeledPoint 从文件加载到 RDD[LabeledPoint]: MLUtils.loadLibSVMFile(spark.spa
我正在准备包含 Id(标签)和关键字(功能)的数据,以将它们传递给 Java 中的 MLlib 算法。我的关键字是用逗号分隔的字符串。我的目标是使用多类分类算法来预测 id。问题是,如何构建 Labe
我正在使用 Apache-Spark 和 Scala 的 MLlib。我需要转换一组 Vector import org.apache.spark.mllib.linalg.{Vector, Vect
我是一名优秀的程序员,十分优秀!