我正在做一个项目,我试图在使用简单的 PySpark ML 管道时预测评论是正面还是负面。一切似乎都正常,但是,我认为有些不对劲,我只是忽略了它。我得到的准确率是 0.9997,而其他人在这个数据集上得到的结果是 0.90(来自 Kaggle(。
输入数据由一个DF组成,其中"review"列包含一个带有评论的字符串和一个包含标签的"label"列。
我正在按如下方式设置我的管道:
# Configure pipeline stages
tok = Tokenizer(inputCol="review", outputCol="words")
htf = HashingTF(inputCol="words", outputCol="tf", numFeatures=200)
idf = IDF(inputCol="tf", outputCol="idf")
va = VectorAssembler(inputCols=["tf","idf", "label"], outputCol="features")
lr = LogisticRegression(maxIter=10, regParam=0.01).setLabelCol("label").setFeaturesCol("features")
# Build the pipeline
stages=[tok, htf, idf, va,lr]
pipeline = Pipeline(stages=stages)
# Fit the pipeline
pipeline_model = pipeline.fit(train)
# Make predictions
df_results = pipeline_model.transform(train)
df_results = df_results.select('review','label','prediction')
test_results = pipeline_model.transform(test)
test_results = test_results.select('review','label','prediction')
为什么会这样?我告诉 lr 标签列和功能列是什么......
您的要素包含标注
va = VectorAssembler(inputCols=["tf","idf", "label"], outputCol="features")
因此,您的 LR 将获得所需的输出作为输入:)只需将其从功能中删除:
va = VectorAssembler(inputCols=["tf","idf"], outputCol="features")