首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >K-均值不会导致弯头形状

K-均值不会导致弯头形状
EN

Stack Overflow用户
提问于 2019-11-04 05:37:03
回答 1查看 635关注 0票数 1

我正在尝试在this link提供的数据集中使用k-means,只使用有关客户端的变量。问题是8个变量中有7个是分类的,所以我对它们使用了一个热编码器。

为了使用肘部方法选择理想数量的集群,我对2到22个集群运行了KMeans,并绘制了inertia_值。但它的形状一点也不像肘部,它看起来更像一条直线。

我做错了什么吗?

代码语言:javascript
运行
复制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans 
from sklearn import preprocessing
from sklearn.preprocessing import StandardScaler

bank = pd.read_csv('bank-additional-full.csv', sep=';') #available at https://archive.ics.uci.edu/ml/datasets/Bank+Marketing# 

# 1. selecting only informations about the client
cli_vars = ['age', 'job', 'marital', 'education', 'default', 'housing', 'loan']
bank_cli = bank[cli_vars].copy()

#2. applying one hot encoder to categorical variables
X = bank_cli[['job', 'marital', 'education', 'default', 'housing', 'loan']]
le = preprocessing.LabelEncoder()
X_2 = X.apply(le.fit_transform)
X_2.values
enc = preprocessing.OneHotEncoder()
enc.fit(X_2)

one_hot_labels = enc.transform(X_2).toarray()
one_hot_labels.shape #(41188, 33)

#3. concatenating numeric and categorical variables
X = np.concatenate((bank_cli.values[:,0].reshape((41188,1)),one_hot_labels), axis = 1)
X.shape

X = X.astype(float)
X_fit = StandardScaler().fit_transform(X)

X_fit

#4. function to calculate k-means for 2 to 22 clusters
def calcular_cotovelo(data):
    wcss = []
    for i in range(2, 23):
        kmeans = KMeans(init = 'k-means++', n_init= 12, n_clusters = i)
        kmeans.fit(data)
        wcss.append(kmeans.inertia_)
    return wcss

cotovelo = calcular_cotovelo(X_fit)

#5. plot to see the elbow to select the ideal number of clusters
plt.plot(cotovelo)
plt.show()

这是选择集群的惯性图。它不是肘形的,而且它的值非常高。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-04 08:01:59

K-means不适合分类数据。您应该转而使用k-prototypes,它结合了k-modes和k-means,能够对混合的数值和分类数据进行聚类。

k-prototypes is available in Python的一个实现。

但是,如果只考虑数值变量,则可以看到具有k均值标准的弯头:

要理解为什么看不到任何弯头(在数值和分类数据上都使用k均值),您可以查看每个集群的点数。您可以观察到,每次增加聚类的数量,都会形成一个新的簇,其中只有几个点在上一步的大簇中,因此标准只比上一步少了几个。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58684924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档