如何在Databricks中使用独立数据集验证AutoML模型结果
解决Databricks AutoML独立测试集验证的问题
核心错误原因
AttributeError: 'DataFrame' object has no attribute 'loc'是因为df是Spark DataFrame,而loc是Pandas DataFrame特有的索引方法,两者无法混用。
修正测试集加载代码
提供两种可行的修正方案:
方案1:Spark转Pandas DataFrame(适合小数据集)
将读取后的Spark表转为Pandas格式,即可正常使用loc操作:
# 读取Delta表并转为Pandas DataFrame df = spark.read.format('delta').load( 'dbfs:/user/hive/warehouse/test_df/', header=True, inferSchema=True ).toPandas() # 关键:添加toPandas()完成格式转换 # 过滤测试集 split_test_df = df.loc[df._automl_split_col_3da1 == 'test']
方案2:Spark先过滤再转Pandas(适合大数据集)
先用Spark语法过滤出测试集,再转为Pandas,减少内存占用:
# 读取Delta表 df_spark = spark.read.format('delta').load( 'dbfs:/user/hive/warehouse/test_df/', header=True, inferSchema=True ) # 使用Spark filter方法替代loc split_test_df = df_spark.filter(df_spark._automl_split_col_3da1 == 'test').toPandas()
完整验证模型流程(确保结果基于独立测试集)
修正测试集后,需加载AutoML模型并完成评估:
- 加载AutoML训练的模型
# 替换为你的AutoML运行ID run_id = "your_automl_run_id" model = mlflow.sklearn.load_model(f"runs:/{run_id}/model")
- 预处理测试数据
确保测试数据和训练数据用相同的预处理流程:
# 分离特征与目标列 X_test = split_test_df.drop([target_col, "_automl_split_col_3da1"], axis=1) y_test = split_test_df[target_col] # 用AutoML生成的preprocessor处理特征 X_test_processed = preprocessor.transform(X_test)
- 生成预测并评估指标
from sklearn.metrics import confusion_matrix, accuracy_score, classification_report # 生成预测结果 y_pred = model.predict(X_test_processed) # 计算并打印评估指标 print(f"测试集准确率: {accuracy_score(y_test, y_pred):.4f}") print("\n混淆矩阵:") print(confusion_matrix(y_test, y_pred)) print("\n分类报告:") print(classification_report(y_test, y_pred))
关于混淆矩阵与准确性的确认
- 只要
split_test_df来自你指定的独立test_df数据集,而非AutoML内部拆分的测试集,那么生成的混淆矩阵和准确率就是基于你的独立验证数据。 - 可通过打印
split_test_df.shape或样本信息,确认数据是预期的独立测试集。
内容的提问来源于stack exchange,提问作者Egorsky
相关产品推荐
相关产品推荐

