使用带和不带管道的逻辑回归的不同 AUC-PR 分数
Posted
技术标签:
【中文标题】使用带和不带管道的逻辑回归的不同 AUC-PR 分数【英文标题】:Different AUC-PR scores using Logistic Regression with and without Pipeline 【发布时间】:2021-11-14 10:46:32 【问题描述】:我试图了解为什么我在使用和不使用 Pipeline 的 Logistic 回归时得到不同的 AUC-PR 分数。
这是我的代码 with 使用管道:
column_encoder = ColumnTransformer([
('ordinal_enc', OrdinalEncoder(), categorical_cols)
])
pipeline = Pipeline([
('column_encoder', column_enc),
('logreg', LogisticRegressionCV(random_state=777))
])
model = pipeline.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f'AUC-PR with Pipeline: average_precision_score(y_test, y_pred):.4f')
这是我的代码没有管道:
ord_enc = OrdinalEncoder()
ord_encoded_X_train = ord_enc.fit_transform(X_train[categorical_cols])
ord_encoded_X_test = ord_enc.transform(X_test[categorical_cols])
X_train_encoded = X_train.copy(deep=True)
X_test_encoded = X_test.copy(deep=True)
X_train_encoded.loc[:, categorical_cols] = copy.deepcopy(ord_encoded_X_train)
X_test_encoded.loc[:, categorical_cols] = copy.deepcopy(ord_encoded_X_test)
model = LogisticRegression(random_state=777, max_iter=2000)
model.fit(X_train_encoded, y_train)
y_pred = model.predict(X_test_encoded)
print(f'AUC-PR without Pipeline: average_precision_score(y_test, y_pred):.4f')
最后:
AUC-PR with Pipeline: 0.1133
AUC-PR without Pipeline: 0.2406
那么,这是为什么呢?
【问题讨论】:
不适合_transform 测试数据。仅使用训练集中的拟合统计数据进行变换。 @BenReiniger,谢谢,但这不会改变结果。差异仍然存在。 【参考方案1】:您的ColumnTransformer
正在删除所有不在categorical_cols
中的列,因为remainder
的默认值是"drop"
。添加remainder="passthrough"
以保留模型的非分类列。
其他小问题:
您在第二种方法中设置了max_iter
,但在第一种方法中没有。
当您应该使用概率预测时,您正在使用硬类预测计算 average_precision_score
。
【讨论】:
以上是关于使用带和不带管道的逻辑回归的不同 AUC-PR 分数的主要内容,如果未能解决你的问题,请参考以下文章