嗯,聚类确实不是为序数数据设计的。我建议你看看OHE。查看此代码示例。
from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder(handle_unknown='ignore')
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X)
enc.categories_
enc.transform([['Female', 1], ['Male', 4]]).toarray()
enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]])
enc.get_feature_names(['gender', 'group'])
drop_enc = OneHotEncoder(drop='first').fit(X)
drop_enc.categories_
drop_enc.transform([['Female', 1], ['Male', 2]]).toarray()
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
或者,您可以使用 OE。这是更多示例代码。
from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder()
X = [['Male', 1], ['Female', 3], ['Female', 2]]
enc.fit(X)
enc.categories_
enc.transform([['Female', 3], ['Male', 1]])
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OrdinalEncoder.html#sklearn.preprocessing.OrdinalEncoder
最后,您可以考虑使用 Affinity Propagation、Hierarchical Clustering 或 DBSCAN;链接如下。
https://scikit-learn.org/stable/auto_examples/cluster/plot_affinity_propagation.html
https://scikit-learn.org/stable/auto_examples/cluster/plot_agglomerative_dendrogram.html
https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html
我认为结果对于聚类分类数据集没有意义或相关。红色、蓝色和绿色之间的“距离”是多少?有意义吗?