使用分类变量的Kmeans

2024-06-11 20:55:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大数据集45421*12(行*列),其中包含所有分类变量。我的数据集中没有数字变量。我想用这个数据集来建立无监督聚类模型,但是在建模之前我想知道这个数据集的最佳特征选择模型。 我无法绘制肘部曲线到这个数据集。我在k-means肘部法中给出了范围k=1-1000,但它没有给出任何最佳聚类图,需要8-10个小时来执行。如果有人对这个问题提出更好的解决办法,那将是一个很大的帮助。你知道吗

代码:

data = {'UserName':['infuk_tof', 'infus_llk', 'infaus_kkn', 'infin_mdx'], 
       'UserClass':['high','low','low','medium','high'], 
       'UserCountry':['unitedkingdom','unitedstates','australia','india'], 
       'UserRegion':['EMEA','EMEA','APAC','APAC'], 
       'UserOrganization':['INFBLRPR','INFBLRHC','INFBLRPR','INFBLRHC'], 
       'UserAccesstype':['Region','country','country','region']} 

df = pd.DataFrame(data) 

Tags: 数据模型data分类数字聚类建模country
2条回答

对于这样的分类数据,K-means不是合适的聚类算法。您可能需要寻找一个K-modes方法,不幸的是,它目前没有包含在scikit学习包中。您可能需要查看github上可用的kmodes包:https://github.com/nicodv/kmodes,它遵循您从scikit学习到的许多语法。你知道吗

有关更多信息,请参见此处的讨论:https://datascience.stackexchange.com/questions/22/k-means-clustering-for-mixed-numeric-and-categorical-data

要运行Kmeans或任何其他模型,首先需要将分类变量转换为数值变量。

使用OneHotEncoder的示例:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

data={'UserAccesstype': ['Region', 'country', 'country', 'region'],
 'UserCountry': ['unitedkingdom', 'unitedstates', 'australia', 'india'],
 'UserOrganization': ['INFBLRPR', 'INFBLRHC', 'INFBLRPR', 'INFBLRHC'],
 'UserRegion': ['EMEA', 'EMEA', 'APAC', 'APAC']}

df = pd.DataFrame(data)

  UserAccesstype    UserCountry UserOrganization UserRegion
0         Region  unitedkingdom         INFBLRPR       EMEA
1        country   unitedstates         INFBLRHC       EMEA
2        country      australia         INFBLRPR       APAC
3         region          india         INFBLRHC       APAC

enc = OneHotEncoder(handle_unknown='ignore')
enc.fit(df.values)

X_for_Kmeans = enc.transform(df.values).toarray()

X_for_Kmeans
array([[1., 0., 0., 0., 0., 1., 0., 0., 1., 0., 1.],
       [0., 1., 0., 0., 0., 0., 1., 1., 0., 0., 1.],
       [0., 1., 0., 1., 0., 0., 0., 0., 1., 1., 0.],
       [0., 0., 1., 0., 1., 0., 0., 1., 0., 1., 0.]])

对Kmeans拟合使用X_for_Kmeans。干杯

相关问题 更多 >