Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Spark MLlib中执行回归分析以确定电信行业的客户流失?_Python_Apache Spark_Machine Learning_Decision Tree_Apache Spark Mllib - Fatal编程技术网

Python 如何在Spark MLlib中执行回归分析以确定电信行业的客户流失?

Python 如何在Spark MLlib中执行回归分析以确定电信行业的客户流失?,python,apache-spark,machine-learning,decision-tree,apache-spark-mllib,Python,Apache Spark,Machine Learning,Decision Tree,Apache Spark Mllib,我正在使用决策树(监督学习)对电信行业的客户流失进行预测(客户是否转移到另一家公司)。我有一个具有以下结构的数据集(csvdata): 在这一列中,最后一列(chorn)是true或false值列,用作标签。在测试期间,我希望预测此列的值(true-false或0-1)。我的疑问是,如何使用sparkmlibs决策树算法来训练数据?我正在查看中给出的回归示例,我无法理解在培训阶段,他们在哪里提供标签。例如: val categoricalFeaturesInfo = Map[Int, Int](

我正在使用
决策树
监督学习
)对电信行业的客户流失进行
预测(客户是否转移到另一家公司)。我有一个具有以下结构的数据集(
csv
data):

在这一列中,最后一列(
chorn
)是
true
false
值列,用作标签。在测试期间,我希望预测此列的值(true-false或0-1)。我的疑问是,如何使用
sparkmlibs
决策树
算法来训练数据?我正在查看中给出的
回归示例
,我无法理解在培训阶段,他们在哪里提供
标签
。例如:

val categoricalFeaturesInfo = Map[Int, Int]()
val impurity = "variance"
val maxDepth = 5
val maxBins = 32

val model = DecisionTree.trainRegressor(trainingData, categoricalFeaturesInfo, impurity,
  maxDepth, maxBins) 
既然这是一种有监督的学习,我们在训练模型时不也应该提供标签吗


我如何在我的数据上训练我的模型,提供
标签
,然后测试预测测试数据的
标签

好吧,因为您尝试做的是监督学习,特别是分类问题。决策树所期望的输入是一个标签点。LabeledPoint基本上是一种结构,表示哪一个是目标变量(标签)和特征向量检查:

所以你可以使用它作为输入,如果你想训练和测试的话,你也可以分割标签点,或者为cv或任何需要的东西做一个循环

重要的是,在培训之前,将正确/错误案例映射为1/0,并且:

val categoricalFeaturesInfo = Map[Int, Int]()
用于告诉模型哪些功能是分类的,例如,假设功能1和功能2只是分类的,那么您应该将其写成:

val categoricalFeaturesInfo = Map[Int, Int]((1,2),(2,4))
这意味着功能1是分类的,有2个级别,功能2是分类的,有4个级别。这里的索引从0开始!!。你应该把你所有的分类特征映射到0,1,2,3…numberLevels

标签点的示例,基本上是映射数据,这一个假设值是双精度的,选择1作为标签点,选择2,3作为要素

val data = dataInput.rdd.map(x => LabeledPoint(x.getDouble(1),Vectors.dense(x.getDouble(2), x.getDouble(3)))

我希望这会有所帮助。

不确定您在阅读后对
csv
数据所做的转换,但您应该这样做,以便将其转换为@DrVComas所指出的
标签点

from pyspark.mllib.regression import LabeledPoint

def parseCsvLine(line):
    fl = line.split(',')
    l = len(fl)
    return LabeledPoint(fl[l-1], fl[0:l-1])
然后你传递给决策树的训练数据应该像这样映射

trainingData = rawData.map(parseCsvLine)

希望有帮助。

因此,就我的情况而言,我的所有功能(除“搅动”列外的所有列)都不是绝对的。搅动具有真/假(或0/1)值,但用于标签目的。那么,对于我来说,信息的分类特征应该是什么呢?此外,在Spark文档中给出的示例中,它们在哪里形成带有标签和特征向量的
标签点
?如果没有分类,则与第一种情况一样,使用空括号映射[Int,Int]()。你想要一个LabeledPoint的例子,我在那里编辑它。你能提供我如何用python将从csv文件读取的特定列的真/假值映射到Spark中的0/1吗?你提供的代码(LabledPoint示例)似乎是针对Scala的,对。你在python中是如何做到的?
trainingData = rawData.map(parseCsvLine)