【发布时间】:2016-09-27 11:20:20
【问题描述】:
我正在使用词频向量并尝试Scikit Learns Pairwise Distances 中提供的一些不同的距离度量。我想将这些距离用于聚类和分类。
我通常有一个约 30,000 x 100 的特征矩阵。我的想法是选择一个距离度量,通过在具有距离度量 available in Scipy(例如欧几里得、Cityblock 等)的同一数据集上运行成对差异来最大化成对距离.) 以及每个指标
将为数据集计算的距离转换为 zscores 以跨指标进行标准化
获取这些 zscores 的范围,即距离的分布
使用可以提供最广泛距离的距离度量,因为它显然为我提供了在我的数据集上的最大分布和最大的方差。 (参见下面的代码)
我的问题:
非常感谢任何帮助!
我的代码:
matrix=np.random.uniform(0, .1, size=(10,300)) #test data set
scipy_distances=['euclidean', 'minkowski', ...] #these are the distance metrics
for d in scipy_distances: #iterate over distances
distmatrix=sklearn.metrics.pairwise.pairwise_distances(matrix, metric=d)
distzscores = scipy.stats.mstats.zscore(distmatrix, axis=0, ddof=1)
diststats=basicstatsmaker(distzscores)
range=np.ptp(distzscores, axis=0)
print "range of metric", d, np.ptp(range)
【问题讨论】:
-
这种方法是否有意义取决于您要达到的目标。使用一组分类/聚类算法,此功能集可能比其他功能集更有效。而其他功能可能适用于其他算法。您需要有一个您正在尝试优化的最终指标,并在此基础上您可以选择最适合的功能。该最终指标是您评估功能和算法的方式。
标签: python scipy nlp scikit-learn distance