我想使用高尔距离实现 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)