Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >K-均值不会导致弯头形状

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

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

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

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

我做错了什么吗?

代码语言:javascript
运行
AI代码解释
复制
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 00: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

复制
相关文章
C#-VsCode如何运行C#代码
VsCode作为一款优秀的代码编辑器,有调试代码的功能,我们必须要来玩一玩这个,这里就以运行c#代码为例子,简单的说一下吧。
kdyonly
2023/03/03
2.2K0
html语言代码超链接,html 超链接 word html超链接代码
“打开/保存”是因浏览者的浏览器而异的,假如浏览者的电脑没有装word软件,那么,无论什么情况,都是打不开的,你只能选择保存(选择打开的话,电脑会让你选择使用什么软件来打开);如果浏览者的电脑装了word软件,那么如果电脑的安全级别高一些,一样会提示“打开/保存”,为的是防止直接打开病毒文件。
全栈程序员站长
2022/09/14
21.2K0
如何让软件以 System 权限运行
本文只是告诉大家调试 System 运行软件时可以如何快速让一个应用以 System 权限运行。使用 PsExec 可以让软件以 System 账户运行
林德熙
2020/02/18
2.7K0
html中超链接使用_HTML超链接代码
html超链接的写法是e69da5e6ba903231313335323631343130323136353331333431353431使用a标签,如:百度一下,你就知道。
全栈程序员站长
2022/09/18
1.3K0
Outlook如何备份邮件
点击outlook菜单栏上的“文件”选项,可以看到主界面右侧有一个“添加账户”的选项。
周小董
2019/03/25
4.1K0
Outlook如何备份邮件
C#字符串截取
常用字符串截取 string str="123abc456"; int i=3; 1 取字符串的前i个字符 str=str.Substring(0,i); // or  str=str.Remove(i,str.Length-i);  2 去掉字符串的前i个字符: str=str.Remove(0,i);  // or str=str.Substring(i);  3 从右边开始取i个字符: str=str.Substring(str.Length-i); // or str=str.Remove(0,st
yaphetsfang
2020/07/30
2.3K0
按钮式超链接代码
其中, 鼠标经过超链接的时候 设置的样式 。padding属性意在通过内边距微调来改变文字位置
全栈程序员站长
2022/09/18
1.4K0
按钮式超链接代码
HTML超链接使用代码
HTML 超链接(链接) HTML使用标签来设置超文本链接。在标签 中使用了href属性来描述链接的地址。 超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。 当您把鼠标指针移动到网页中的某个链接上时,箭头会变为一只小手。
全栈程序员站长
2022/09/14
2.4K0
如何运行ruby代码
第一种,ruby -e 在命令行中运行下面命令,-e的意思是,把后面的字符串当作脚本执行 ruby -e "print 'hello'" 使用irb交互控制台 在命令行输入irb hello worldxingoo@xingoo-Lenovo:~/workspace/RubyTest$ irb irb(main):001:0> p "hello" "hello" => "hello" irb(main):002:0> p "中文hello" "中文hello" => "中文hello" irb(main):
用户1154259
2018/01/17
1.4K0
如何运行PHP代码_运行php网站
相信不少初学者会遇到不知道如何运行php这个尴尬的问题,小白博主就来一次比较详细的介绍
全栈程序员站长
2022/11/11
10.3K0
如何运行PHP代码_运行php网站
pycharm如何执行代码_pycharm如何运行代码
首先在pycharm 中的python 文件,比如:test.py,右键点击 show in explore,会弹出test.py的所在的文件夹,如图所示:
全栈程序员站长
2022/09/27
1.2K0
pycharm如何执行代码_pycharm如何运行代码
【改进和增强Microsoft Office应用程序】ExtendOffice软件产品介绍
ExtendOffice Technology Inc.成立于2008年,是一家提供专业Microsoft Office加载项的主要公司。早在2004年,该公司的创始人就启动了Addintools.com来销售Microsoft Office的加载项。
51Component
2022/11/09
11.4K0
【改进和增强Microsoft Office应用程序】ExtendOffice软件产品介绍
C# 字节数组截取
C# 字节数组截取 如: byte[] bt = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 方法一 截取位数规则 1)截取2位长度的字节数组 用BitConverter.ToInt16 例如,从第2位开始截取2个字节则 BitConverter.ToInt16(bt,2);
全栈程序员站长
2022/08/12
3.6K0
图片中加入超链接html代码,html网页超链接代码 怎样用HTML代码在图片插入超链接…
HTML使用定义锚创造链接,可用于文本,图片,HTML元素…… 一,将文本作为超链接 文本 二,将图像作为超链接 三,将书签作为超链接 (在网页上显示的)书签文本 ① 在同文档中创建指向该锚的链接。 文本 ② 在其他页面创建指向该锚的链接。
全栈程序员站长
2022/09/18
5.3K0
图片中加入超链接html代码,html网页超链接代码 怎样用HTML代码在图片插入超链接…
(3)apache的安装,配置Apache以运行PHP代码
配置apache.以运行PHP程序 将刚才的网页1base.php放到Apache的htdocs文件中,并通过浏览器“浏览”
孙寅
2020/06/02
2.1K0
(3)apache的安装,配置Apache以运行PHP代码
如何在 Linux 中以脚本模式运行 Top
在 Centos8 中,我们执行本文中的命令。下面命令按照 CPU 使用率对数据进行排序,并打印命令中指定的前 20 行。
用户9236362
2021/11/30
2.5K0
删除或关闭Word中的超链接
最近使用的word老是会把一些文字内容或者标题转换成乱七八糟的格式,看的莫名其妙的,找了好久也不知道什么问题,后来一查才知道是因为这些文字包含超链接,word自动转换了。。。你说是不是莫名其妙。
marsggbo
2019/05/26
2.6K0
SplitContainer(拆分条控件)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/161095.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/09
2.3K0
C#截取指定字符串函数
本文转载:http://www.cnblogs.com/liufei88866/archive/2012/05/12/2497395.html
跟着阿笨一起玩NET
2018/09/19
1.2K0
c语言数组截取,C# 字符串按数组截取方法(C/S)
private void button1_Click(object sender, EventArgs e) {
全栈程序员站长
2022/06/30
2.2K0

相似问题

如何在单击超链接时运行php代码

10

C#陷阱单击带有阅读窗格的Outlook (超链接)

10

Outlook邮件-禁止在超链接上单击鼠标左键或阻止Outlook跟随单击的超链接

11

如何使用Outlook AddIn插入可单击的超链接?

17

Visual 2015 Outlook AddIn + Office 365单击以运行

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文