python 中分类数据的层次聚类
Hierarchical clustering for categorical data in python
我有一个包含字符串值的分类属性。其中三个包含日名(mon---sun)月名和时间间隔(早上下午晚上),我之前提到的另外两个包含地区和街道名称。其次是性别、角色、评论(它是一个预定义的固定字段,具有好、坏、强烈同意等值)姓氏,第一个 name.my 目的是将它们聚类并可视化。我使用这个 WEKA 应用了 k-mean 聚类,但它没有用。
现在我想对其应用层次聚类。我找到了这段代码:
import scipy
import scipy.cluster.hierarchy as sch
X = scipy.randn(100, 2) # 100 2-dimensional observations
d = sch.distance.pdist(X) # vector of (100 choose 2) pairwise distances
L = sch.linkage(d, method='complete')
ind = sch.fcluster(L, 0.5*d.max(), 'distance')
但是,上面代码中的X是数字;我有分类数据。
有什么方法可以使用分类数据的 numarray 来查找距离?
换句话说,我可以使用字符串值的分类数据来查找距离吗?
然后我会在 sch.linkage(d, method='complete')
中使用该距离
我想我们已经确定了问题,那么:您将 X
值保持原样,字符串数据。您可以将它们传递给 pdist
,但您还必须为距离度量提供一个 2 元函数(2 个输入,数字输出)。
最简单的是相等的class化验有0距离;其他都是 1。你可以用
d = sch.distance.pdist(X, lambda u, v: u != v)
如果您还有其他 class 歧视,只需将逻辑编码为 return 所需的距离,将其包装在一个函数中,然后将函数名称传递给 pdist
。我们对此无能为力,因为您没有告诉我们任何关于您的 classes 或模型语义的信息。
这让你感动吗?
另一种可能性是使用汉明距离。
Y = pdist(X, 'hamming')
Computes the normalized Hamming distance, or the proportion of those
vector elements between two n-vectors u and v which disagree. To save
memory, the matrix X can be of type boolean.
如果您的分类数据由单个字符表示,例如:"m"/"f",它可能就是您要查找的内容。
我有一个包含字符串值的分类属性。其中三个包含日名(mon---sun)月名和时间间隔(早上下午晚上),我之前提到的另外两个包含地区和街道名称。其次是性别、角色、评论(它是一个预定义的固定字段,具有好、坏、强烈同意等值)姓氏,第一个 name.my 目的是将它们聚类并可视化。我使用这个 WEKA 应用了 k-mean 聚类,但它没有用。 现在我想对其应用层次聚类。我找到了这段代码:
import scipy
import scipy.cluster.hierarchy as sch
X = scipy.randn(100, 2) # 100 2-dimensional observations
d = sch.distance.pdist(X) # vector of (100 choose 2) pairwise distances
L = sch.linkage(d, method='complete')
ind = sch.fcluster(L, 0.5*d.max(), 'distance')
但是,上面代码中的X是数字;我有分类数据。
有什么方法可以使用分类数据的 numarray 来查找距离?
换句话说,我可以使用字符串值的分类数据来查找距离吗?
然后我会在 sch.linkage(d, method='complete')
我想我们已经确定了问题,那么:您将 X
值保持原样,字符串数据。您可以将它们传递给 pdist
,但您还必须为距离度量提供一个 2 元函数(2 个输入,数字输出)。
最简单的是相等的class化验有0距离;其他都是 1。你可以用
d = sch.distance.pdist(X, lambda u, v: u != v)
如果您还有其他 class 歧视,只需将逻辑编码为 return 所需的距离,将其包装在一个函数中,然后将函数名称传递给 pdist
。我们对此无能为力,因为您没有告诉我们任何关于您的 classes 或模型语义的信息。
这让你感动吗?
另一种可能性是使用汉明距离。
Y = pdist(X, 'hamming')
Computes the normalized Hamming distance, or the proportion of those vector elements between two n-vectors u and v which disagree. To save memory, the matrix X can be of type boolean.
如果您的分类数据由单个字符表示,例如:"m"/"f",它可能就是您要查找的内容。