【问题标题】:Python: Evaluating an Isolation ForestPython:评估隔离森林
【发布时间】:2019-06-29 04:05:42
【问题描述】:

我正在 mulcross 数据库上使用 2 个类进行隔离林集群。我将我的数据分为训练集和测试集,并尝试计算我的测试集上的准确度分数、roc_auc_score 和混淆矩阵。但是有两个问题:第一个是在聚类方法中我不应该在训练阶段使用标签,这意味着“y_train”不应该被提及,但我没有找到另一个评估我的模型的解决方案。更多我发现的结果是错误的。 我的问题是如何评估像隔离森林这样的聚类模型。 这是我的代码:

df = pd.read_csv('db.csv')
y_true=df['Target']
df_data=df.drop('Target',1)

X_train, X_test, y_train, y_test = train_test_split(df_data, y_true, test_size=0.3, random_state=42)

alg=IsolationForest(n_estimators=100, max_samples= 256 , contamination=0.1, max_features=1.0, bootstrap=False, n_jobs=-1, random_state=42, verbose=0, behaviour="new")
model = alg.fit(X_train, y_train)
preds = alg.predict(X_test)

print("#############################\n#############################")
print(accuracy_score(y_test, preds))
print(roc_auc_score(y_test, preds))
cm = confusion_matrix(y_test, preds)
print(cm)
print("#############################\n#############################")

【问题讨论】:

  • 如果有标签,为什么要使用聚类?尝试一些有监督的东西,比如 RandomForest。
  • 我必须评估一个隔离林。对于实验室,我确实使用函数 drop() 删除了它们
  • 又是同样的问题。如果你不回答这个问题,人们总是会告诉你这是一个分类任务,因为你有标签。那么为什么你不使用监督学习?
  • 因为隔离森林的想法是仅使用标签来比较模型性能。模型本身看不到标签。我们实际上是在进行聚类。这是一个隔离森林的简单解释,以便理解link的思想
  • 隔离林没有集群。你也不会训练测试拆分,因为你实际上并没有训练任何东西。

标签: python scikit-learn cluster-analysis evaluation unsupervised-learning


【解决方案1】:

我不明白您为什么要聚类并将其划分为训练/测试集。在我看来,您正在混合分类/聚类或类似的东西。如果您有标签,请尝试使用监督方法。容易赢的有xgboost、随机森林、GLM、logistic等……

如果您想评估聚类方法,您可以调查聚类间和聚类内的距离。归根结底,您希望拥有小型且分离良好的集群。您也可以查看一个称为剪影的指标。

你也可以试试

print("Accuracy:", list(y_pred_test).count(1)/y_pred_test.shape[0])

另外,请查看here 了解更多详情。

【讨论】:

  • 你是对的。事实上,隔离森林是一种无监督方法,正如我所读到的这些方法,评估是根据算法完成的,这意味着没有像监督方法那样评估模型的通用方法。您是否知道要在我的代码中更改什么以便我可以评估隔离森林?谢谢。
  • 谢谢,但是你提到的链接是我第一个使用的。但我还没有找到正确的结果。我的问题是评估隔离林需要遵循哪些步骤。
  • 您可以运行我在答案中给您的代码,以获得您的森林的准确性。
  • 谢谢,但是 auc 分数呢?我发现它是 52.8%,这根本不是逻辑。
  • AUC 为 0.53 意味着您的模型几乎没有分类能力。
猜你喜欢
  • 1970-01-01
  • 2019-07-11
  • 2015-07-16
  • 2018-09-10
  • 2020-11-16
  • 2015-10-19
  • 2021-03-20
  • 2019-08-02
  • 2019-07-20
相关资源
最近更新 更多