You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark训练LogisticRegression调用predict相关方法报AttributeError

报错原因

你混淆了PySpark ML库中**估计器(Estimator)和模型(Model)**的概念:

  • LogisticRegression类是估计器,仅用于定义训练参数、配置输入输出列,本身不承载训练结果,也没有predict、predictProbability这类预测相关方法。
  • 你调用fit()方法后会返回训练完成的LogisticRegressionModel实例,这才是承载训练结果、可以执行预测的模型对象,你代码里没有接收这个返回值,直接用原LogisticRegression实例调用预测方法才会触发属性不存在的报错。

解决方法

修改代码接收fit()返回的训练后模型,再调用预测相关方法即可,PySpark 3.x版本推荐直接用transform()方法批量预测整个DataFrame,不需要逐列调用预测接口:

from pyspark.ml.classification import LogisticRegression
# 1. 定义估计器,配置训练参数
lr_estimator = LogisticRegression(regParam=0.5, elasticNetParam=1.0)
lr_estimator.setFeaturesCol('features')
lr_estimator.setLabelCol('WinA')
lr_estimator.setPredictionCol('prediction') # 预测输出列不要和标签列重名,避免冲突

# 2. 训练得到模型,注意接收fit的返回值
lr_model = lr_estimator.fit(df_train)

# 3. 批量预测验证集
prediction_df = lr_model.transform(df_val)
# 预测结果会默认生成prediction(预测类别)、probability(各类别概率)、rawPrediction(原始输出)三列
# 你也可以单独取某一行的特征做预测,写法如下:
single_sample_prob = lr_model.predictProbability(df_val.first()['features'])
single_sample_pred = lr_model.predict(df_val.first()['features'])

注意:不要把预测输出列的名称设置为和标签列WinA同名,会导致列名冲突,后续评估模型时容易出错。

内容的提问来源于stack exchange,提问作者Memphis Meng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 17:48:04