【发布时间】:2023-03-13 19:51:01
【问题描述】:
我正在为电信行业进行churn 分析,并且我有一个示例数据集。我在下面写了这段代码,我在Spark 到python 中使用decision tree 算法。在数据集中,我有多个列,我正在为我的feature 集选择我需要的列。
from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.tree import DecisionTree, DecisionTreeModel
from pyspark.mllib.util import MLUtils
import os.path
import numpy as np
inputPath = os.path.join('file1.csv')
file_name = os.path.join(inputPath)
data = sc.textFile(file_name).zipWithIndex().filter(lambda (line,rownum): rownum>0).map(lambda (line, rownum): line)
final_data = data.map(lambda line: line.split(",")).filter(lambda line: len(line)>1).map(lambda line:LabeledPoint(1 if line[5] == 'True' else 0,[line[6],line[7]]))
(trainingdata, testdata) = final_data.randomSplit([0.7, 0.3])
model = DecisionTree.trainRegressor(trainingdata, categoricalFeaturesInfo={},
impurity='variance', maxDepth=5, maxBins=32)
predictions = model.predict(testdata.map(lambda x: x.features))
prediction= predictions.collect()
labelsAndPredictions = testData.map(lambda lp: lp.label).zip(predictions)
现在这段代码可以正常工作并进行预测,但我缺少的是prediction 集合或testdata 中每个客户的标识符。在我的数据集中有一列customerid(第 4 列),到目前为止,我没有选择它,因为它不是模型中要考虑的特征。对于详细信息在testdata 中的客户,我很难将此customerid 列与testdata 关联起来。如果我在LabeledPoint 中形成的feature 向量中的数据集中添加此列,则这将导致错误,因为它不是特征值。
如何在我的分析中添加此列,以便获得流失价值较高的前 50 名客户?
【问题讨论】:
-
@zero323 你能帮我说说我是怎么做到的吗?
标签: python machine-learning apache-spark decision-tree pyspark