使用分类变量的Kmeans

时间:2019-12-12 18:09:45

标签: python machine-learning scikit-learn data-science unsupervised-learning

我有一个大型数据集45421 * 12(行*列),其中包含所有分类变量。我的数据集中没有数值变量。我想使用此数据集构建无监督的聚类模型,但是在建模之前,我想知道此数据集的最佳特征选择模型。 而且我无法将肘部曲线绘制到该数据集。我用k均值弯头法给出范围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) 

2 个答案:

答案 0 :(得分:-1)

对于这样的分类数据,K-means不是合适的聚类算法。您可能需要寻找一种K模式方法,但很遗憾,该方法当前未包含在scikit-learn软件包中。您可能需要查看此程序包,以获取github上可用的kmode:https://github.com/nicodv/kmodes,它遵循了您从scikit-learn惯用的许多语法。

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

答案 1 :(得分:-1)

要能够运行import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Servlet") public class Servlet extends HttpServlet { private static final long serialVersionUID = 1; public Servlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); String Value = request.getParameter("Binary_Number"); Exc_1 Converter = new Exc_1(); String result = Exc_1.Converter(Value); response.getWriter().append(result); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } 或任何其他模型,您首先需要将分类变量转换为数字变量。

使用Kmeans的示例:

OneHotEncoder

对Kmeans拟合使用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.]]) 。干杯