【问题标题】:Create labeledPoints from a Spark DataFrame using Pyspark使用 Pyspark 从 Spark DataFrame 创建标记点
【发布时间】:2018-12-08 12:23:17
【问题描述】:

在将 Countvectorizer 应用于推文语料库后,我有一个带有两个“标签”和“稀疏向量”的 spark Dataframe。

在尝试训练随机森林回归模型时,我发现它只接受 Type LabeledPoint。

有谁知道如何将我的 spark DataFrame 转换为 LabeledPoint

【问题讨论】:

    标签: pyspark rdd apache-spark-mllib random-forest


    【解决方案1】:

    您使用的是哪个 spark 版本。 Spark 使用 spark ml 而不是 mllib。

    from pyspark.ml.feature import CountVectorizer
    from pyspark.ml.classification import RandomForestClassifier
    from pyspark.sql import functions as F
    
    # Input data: Each row is a bag of words with a ID.
    df = sqlContext.createDataFrame([
        (0, "a b c".split(" ")),
        (1, "a b b c a".split(" "))
    ], ["id", "words"])
    
    # fit a CountVectorizerModel from the corpus.
    cv = CountVectorizer(inputCol="words", outputCol="features", vocabSize=3, minDF=2.0)
    
    model = cv.fit(df)
    
    result = model.transform(df).withColumn('label', F.lit(0))
    rf = RandomForestClassifier(labelCol="label", featuresCol="features", numTrees=10)
    rf.fit(result)
    

    如果你坚持使用 mllib:

    from pyspark.mllib.regression import LabeledPoint
    from pyspark.mllib.tree import RandomForest
    
    rdd = result \ 
              .rdd \
              .map(lambda row: LabeledPoint(row['label'], row['features'].toArray()))
    RandomForest.trainClassifier(rdd, 2, {}, 3)
    

    【讨论】:

    • 您好,我使用的是 spark 2.3.0 版本
    • 嘿,它和我的版本一样。你能用ml模块代替ml吗?标记点正在使用 rdd。
    • 你能帮我设置它的参数吗事实上在 mlli 我使用了 Train regressor 但在这种情况下 ml 它是不同的类这是使用的方法 pyspark.ml.regression.RandomForestRegressor(self, featuresCol= “特征”,labelCol =“标签”,predictionCol =“预测”,maxDepth = 5,maxBins = 32,minInstancesPerNode = 1,minInfoGain = 0.0,maxMemoryInMB = 256,cacheNodeIds = False,checkpointInterval = 10,impurity =“方差”, subsamplingRate=1.0, seed=None, numTrees=20, featureSubsetStrategy="auto")
    • 您应该将 df 转换为 rdd,然后从 mllib.regression 导入标记点。答案已更新。
    • 是否支持 DataFrame 或 LabelledPoint 类型??
    猜你喜欢
    • 2015-12-09
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2016-05-02
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多