我正在对具有 2 个类的 mulcross 数据库进行隔离林聚类。我将数据分为训练集和测试集,并尝试计算测试集的准确性分数、roc_auc_score和confusion_matrix。但是有两个问题:第一个是,在聚类方法中,我不应该在训练阶段使用标签,这意味着不应该提及"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#############################")
明白你为什么要聚类并将其划分为训练/测试集。在我看来,您正在混合分类/聚类或类似的东西。如果您有标签,请尝试使用监督方法。轻松的奖金是xgboost,随机森林,GLM,物流等...
如果要评估聚类方法,可以调查聚类间和聚类内距离。归根结底,您希望拥有小型且分隔良好的集群。你也可以看看一个叫做轮廓的指标。
您也可以尝试
print("Accuracy:", list(y_pred_test).count(1)/y_pred_test.shape[0])
另外,请在此处查看更多详细信息。