Ali*_*sef 3 python cluster-analysis machine-learning
我一直在尝试使用 DBSCAN 来检测离群值,根据我的理解,DBSCAN 输出 -1 作为离群值,1 作为内联值,但是在我运行代码之后,我得到的数字不是 -1 或 1,有人可以吗解释为什么?通过反复试验找到 eps 的最佳值也是正常的,因为我无法找到找到最佳 eps 值的方法。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.cluster import DBSCAN
df = pd.read_csv('Final After Simple Filtering.csv',index_col=None,low_memory=True)
# Dropping columns with low feature importance
del df['AmbTemp_DegC']
del df['NacelleOrientation_Deg']
del df['MeasuredYawError']
#applying DBSCAN
DBSCAN = DBSCAN(eps = 1.8, min_samples =10,n_jobs=-1)
df['anomaly'] = DBSCAN.fit_predict(df)
np.unique(df['anomaly'],return_counts=True)
Run Code Online (Sandbox Code Playgroud)
(array([ -1, 0, 1, ..., 8462, 8463, 8464]),
array([1737565, 3539278, 4455734, ..., 13, 8, 8]))
Run Code Online (Sandbox Code Playgroud)
谢谢。
好吧,您实际上并没有了解 DBSCAN 的真正想法。
\n\n这是维基百科的副本:
\n\n\n\n\n如果点 p 至少有 minPts 个点位于其距离 \xce\xb5 之内(包括 p),则该点是核心点。
\n\n如果点 q 与核心点 p 的距离在 \xce\xb5\n 之内,则点 q 可以从 p 直接到达。点仅表示可从核心点直接到达。
\n\n如果存在路径 p1, ..., pn 且 p1 =\np 且 pn = q,则从 p 可以到达点 q,其中每个 pi+1 都可以从 pi 直接到达。请注意,这意味着路径上的所有点都必须是核心点,除了 q 之外。
\n\n从任何其他点都无法到达的所有点都是异常值或噪声点。
\n
用更简单的话来说,这个想法是:
\n\n任何具有 min_samples 个邻居且距离为 epsilon 的样本都是核心样本。
任何非核心数据样本,但至少有一个核心邻居(距离小于 eps),都是直接可达样本,可以添加到集群中。
任何不可直接可达的数据样本,也不是核心,但至少有一个可直接可达的邻居(距离小于 eps),都是可达样本,将被添加到集群中。
任何其他示例都被视为噪声、异常值或任何您想要命名的内容。(这些示例将被标记为 -1)
根据聚类的参数(eps 和 min_samples),您很可能有两个以上的聚类。您会看到,这就是您在聚类结果中看到 0 和 -1 以外的其他值的原因。
\n\n回答你的第二个问题
\n\n\n\n\n通过反复试验找到 eps 的最佳值也是正常的,
\n
如果您的意思是进行交叉验证(在一组您知道聚类标签或可以近似正确聚类的集合上),是的,我认为这是正常的方法
\n\nPS:这篇论文很好,很全面。我强烈建议你看一下。祝你好运。
\n| 归档时间: |
|
| 查看次数: |
5125 次 |
| 最近记录: |