【发布时间】: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