Ну, кластеризация действительно не предназначена для обычных данных. Я бы посоветовал вам взглянуть на 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
Я не думаю, что результаты будут значимыми или уместными для кластеризации категориальных наборов данных. Каково «расстояние» между красным, синим и зеленым? Имеет смысл?