【发布时间】:2018-11-22 13:03:18
【问题描述】:
我想知道是否有办法在 sklearn 中对预测的标签进行后处理。
我的训练数据具有以下形式的基本事实标签
0, 1
但是,问题是我目前正在使用隔离森林,它预测:
-
-1表示异常值,相当于真实标签1 -
1用于普通数据,相当于真实标签0
如果我要编写一个函数来对预测进行后处理,那就很简单了:
def process_anomaly_labels(raw_y_pred):
y_pred = raw_y_pred.copy()
y_pred[raw_y_pred == 1] = 0
y_pred[raw_y_pred == -1] = 1
return y_pred
但是当我使用 RandomSearchCV 微调模型时,我不知道如何对预测标签进行后处理:
from sklearn.model_selection import RandomizedSearchCV
# fine tuning
forest_params = {
"n_estimators": [50, 200, 800],
"max_samples": [1000, 4000, 16000, 64000, 120000],
"max_features": [1, 5, 15, 30],
"contamination": [0.001, 0.1, 0.2, 0.5]
}
forest_grid_search = RandomizedSearchCV(
IsolationForest(),
param_distributions=forest_params,
scoring="f1",
n_jobs=8,
n_iter=50,
cv=3,
verbose=2
)
forest_grid_search.fit(X_train_trans, y_train)
我无法将真实标签转换为与预测标签匹配,因为我想在评估时使用 二进制 F1 分数。
【问题讨论】:
-
您可以提供您的自定义记分器,它将首先根据需要转换标签,然后发送到计算
f1。
标签: python machine-learning scikit-learn data-processing