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)
在 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)
我将我的代码基于后一个示例,并让印象聚类在这种缩放下效果更好。然而,这种缩放“通过去除均值和缩放到单位方差来标准化特征”。我试图找到二维集群。如果我的集群分布在一个正方形区域中 - 比如说 100x100,我认为缩放没有问题。但是,如果它们分布在一个矩形区域中,例如 800x200,则缩放会“挤压”我的样本并在一维中改变它们之间的相对距离。这会恶化聚类,不是吗?还是我理解某事。错误的?我是否需要进行一些预处理,或者我可以简单地输入我的“原始”数据吗?