【发布时间】:2016-04-09 20:15:46
【问题描述】:
我正在尝试在this 电信数据集上运行多个分类器来预测客户流失。到目前为止,我已将我的数据集加载到 Spark RDD 中,但我不确定如何选择一列作为标签 - 在本例中为最后一列。不要求代码,而是简要说明 RDD 和 LabeledPoint 如何协同工作。我查看了官方 Spark github 中提供的示例,但它们似乎使用的是 libsvm 格式。
问题:LabeledPoint 是如何工作的,如何指定我的标签是什么?
到目前为止我的代码,如果有帮助的话:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.ml.classification.{RandomForestClassificationModel, RandomForestClassifier}
import org.apache.spark.ml.feature.StandardScaler
import org.apache.spark.mllib.classification.{SVMModel, SVMWithSGD, LogisticRegressionWithLBFGS, LogisticRegressionModel, NaiveBayes, NaiveBayesModel}
object{
def main(args: Array[String]): Unit = {
//setting spark context
val conf = new SparkConf().setAppName("Churn")
val sc = new SparkContext(conf)
//loading and mapping data into RDD
val csv = sc.textFile("file://filename.csv")
val data = csv.map(line => line.split(",").map(elem => elem.trim))
/* computer learns which points are features and labels here */
}
}
数据集如下所示:
State,Account Length,Area Code,Phone,Int'l Plan,VMail Plan,VMail Message,Day Mins,Day Calls,Day Charge,Eve Mins,Eve Calls,Eve Charge,Night Mins,Night Calls,Night Charge,Intl Mins,Intl Calls,Intl Charge,CustServ Calls,Churn?
KS,128,415,382-4657,no,yes,25,265.100000,110,45.070000,197.400000,99,16.780000,244.700000,91,11.010000,10.000000,3,2.700000,1,False.
OH,107,415,371-7191,no,yes,26,161.600000,123,27.470000,195.500000,103,16.620000,254.400000,103,11.450000,13.700000,3,3.700000,1,False.
NJ,137,415,358-1921,no,no,0,243.400000,114,41.380000,121.200000,110,10.300000,162.600000,104,7.320000,12.200000,5,3.290000,0,False.
【问题讨论】:
-
我不确定你的问题是什么?
-
我将对其进行编辑以使其更清晰 - 我的问题是:LabeledPoint 是如何工作的,我如何指定我的标签是什么?
-
LalebedPoint 是一个带有标签的数字向量。为了将您当前的数据转换为 LabeledPoints,您需要进行一些特征工程和一些转换。我建议您先阅读整个 MLlib 和 ML 文档,以便了解它的 DataTypes、Transformers 等,因为您的问题太宽泛,无法在 SO 范围内回答。
-
你能更新/修复数据集的链接吗?
标签: scala apache-spark