是否应该对sklearn.clustering.DBSCAN的输入进行预处理?
在示例http://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#example-cluster-plot-dbscan-py中,计算输入样本X之间的距离并进行标准化:
D = distance.squareform(distance.pdist(X))
S = 1 - (D / np.max(D))
db = DBSCAN(eps=0.95, min_samples=10).fit(S)
Run Code Online (Sandbox Code Playgroud)
在v0.14(http://jaquesgrobler.github.io/online-sklearn-build/auto_examples/cluster/plot_dbscan.html)的另一个示例中,完成了一些缩放:
X = StandardScaler().fit_transform(X)
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
Run Code Online (Sandbox Code Playgroud)
我的代码基于后一个示例,并且通过此缩放使印象聚类更好地工作.但是,这种缩放"通过删除均值和缩放到单位方差来标准化特征".我试着找到2d集群.如果我将我的星团分布在一个平方区域 - 让我们说100x100我看到缩放没有问题.然而,如果分布在矩形区域(例如800x200)中,缩放"挤压"我的样本并在一个维度上改变它们之间的相对距离.这会使聚类恶化,不是吗?或者我理解某事.错误?我是否需要应用一些预处理,或者我可以简单地输入我的"原始"数据?