scikit-learn报”ValueError: The parameter affinity must be one of {affinities}, but got ‘{affinity}’ “的原因以及解决办法

问题描述

使用scikit-learn中的聚类算法,可能会遇到以下报错信息:

ValueError: The parameter affinity must be one of {affinities}, but got '{affinity}'

问题分析

由于scikit-learn中不同的聚类算法使用的相似系数函数不同,所以affinity(相似系数函数)的可选值也不同。例如,在谱聚类(spectral clustering)中,可选的相似系数函数包括“rbf”、“nearest_neighbors”和“precomputed”,而在K均值聚类(K-means clustering)中,可选的相似系数函数只包括“euclidean”和“manhattan”。如果在使用聚类算法时指定了不支持的相似系数函数,就会出现以上的报错信息。

解决办法

  1. 检查指定的相似系数函数是否正确。可以参考文档查看不同聚类算法支持的相似系数函数。

  2. 如果输入的字符串大小写有问题,也会出现以上报错信息。对于支持大小写的参数,要确保大小写正确。

  3. 如果以上两种解决办法未能解决问题,可以尝试升级scikit-learn到最新版本。

示例代码

以下示例代码展示了使用K均值聚类算法进行聚类时,指定了不支持的相似系数函数(将“Euclidean”写成了“euclidne”)导致报错:

from sklearn.cluster import KMeans
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0],
              [4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, init='k-means++', 
                n_init=10, max_iter=300, 
                tol=0.0001, precompute_distances='auto', 
                verbose=0, random_state=None, 
                copy_x=True, n_jobs=None, 
                algorithm='auto', affinity='euclidne', 
                # 错误:将“Euclidean”写成了“euclidne”
                # 记得修改正确后才能运行
                compute_full_tree='auto')
kmeans.fit(X)

运行代码后,会出现以下报错信息:

ValueError: The parameter affinity must be one of {‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’, ‘cosine’, ‘precomputed’}, but got ‘euclidne’

修正代码,在"affinity"中将“euclidne”改成“euclidean”即可。

此文章发布者为:Python技术站作者[metahuber],转载请注明出处:http://pythonjishu.com/scikit-learn-error-32/

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2天前
下一篇 2天前

相关推荐