小编Csa*_*ton的帖子

如何在sklearn中使用gower距离实现pam聚类算法?

我想使用高尔距离实现 pam ( KMedoid, method='pam' ) 算法。

我的数据集包含混合特征、数字特征和分类特征,一些猫特征有 1000 多个不同的值。

我在这里找到了合适的高尔距离实现:https://github.com/wwwjk366/gower/blob/master/gower/gower_dist.py

我的问题是我使用的PAM 的sklearn-extra实现没有metric='gower'实现该选项。所以我尝试创建一个可调用的,但我似乎发现很难将它们连接在一起。

D = gower.gower_matrix(df_ext, cat_features=cat_mask) # cat_mask is a boolean list marking what the 
                                                    categorical features are in the df_ext

# https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise_distances.html
def get_gower():
    return sklearn.metrics.pairwise_distances(D, metric='precomputed')

# https://scikit-learn-extra.readthedocs.io/en/latest/generated/sklearn_extra.cluster.KMedoids.html
kmedoids = sklearn_extra.cluster.KMedoids(df_ext, metric=get_gower, method='pam')
kmedoids.fit(df_ext)
Run Code Online (Sandbox Code Playgroud)

我得到这个值错误:

ValueError                                Traceback (most recent call last)
<ipython-input-13-9ae677cd636a> in <module>
      1 # https://scikit-learn-extra.readthedocs.io/en/latest/generated/sklearn_extra.cluster.KMedoids.html
      2 kmedoids = KMedoids(df_ext, metric=get_gower, method='pam')
----> 3 kmedoids.fit(df_ext)

D:\ProgramFiles\anaconda3\lib\site-packages\sklearn_extra\cluster\_k_medoids.py in fit(self, X, y)
    183         random_state_ …
Run Code Online (Sandbox Code Playgroud)

cluster-analysis python-3.x scikit-learn

1
推荐指数
1
解决办法
4048
查看次数