Python使用K-means聚类分析

news2024/9/27 5:48:48

Python使用K-means聚类分析


文章目录

  • Python使用K-means聚类分析
  • 介绍
    • 1.集群标签作为特征
  • 一、k-均值聚类
  • 二、示例 - 加州住房
    • 2.KMeans
  • 总结


介绍

提示:这里可以添加本文要记录的大概内容:

本文将使用所谓的无监督学习算法。 无监督算法不使用目标; 相反,它们的目的是学习数据的某些属性,以某种方式表示特征的结构。 在用于预测的特征工程的上下文中,您可以将无监督算法视为一种“特征发现”技术。

聚类只是意味着根据点之间的相似程度将数据点分配给组。 可以说,聚类算法使“物以类聚”。

当用于特征工程时,我们可以尝试发现代表细分市场或具有相似天气模式的地理区域的客户群。 添加集群标签的功能可以帮助机器学习模型理清复杂的空间或邻近关系。

1.集群标签作为特征

应用于单个实值特征,聚类就像传统的“分箱”或“离散化”变换。 在多个特征上,它就像“多维合并”(有时称为矢量量化)。
在这里插入图片描述添加到数据框,集群标签的功能可能如下所示:
在这里插入图片描述

请务必记住,此聚类功能是分类的。 在这里,它显示为典型的聚类算法会产生的标签编码(即,作为整数序列); 根据您的模型,单热编码可能更合适。添加聚类标签的动机是聚类会将特征之间的复杂关系分解为更简单的块。 然后,我们的模型可以一个接一个地学习更简单的块,而不必一次学习所有复杂的整体。 这是一种“分而治之”的策略。
在这里插入图片描述
该图显示了聚类如何改进简单的线性模型。 YearBuilt 和 SalePrice 之间的曲线关系对于这种模型来说太复杂了——它欠拟合。 然而,在较小的块上,这种关系几乎是线性的,并且模型可以轻松学习。


提示:以下是本篇文章正文内容,下面案例可供参考

一、k-均值聚类

有很多聚类算法。 它们的主要区别在于如何衡量“相似性”或“接近性”,以及它们使用的特征类型。 我们将使用的算法 k-means 直观且易于在特征工程环境中应用。 根据您的应用程序,另一种算法可能更合适。

K 均值聚类使用普通直线距离(换言之,欧几里德距离)来衡量相似性。 它通过在特征空间内放置一些称为质心的点来创建聚类。 数据集中的每个点都分配给它最接近的质心的集群。 “k-means”中的“k”是它创建的质心(即簇)的数量。 您自己定义 k。

您可以想象每个质心通过一系列辐射圆捕获点。 当来自竞争质心的多组圆圈重叠时,它们会形成一条线。 结果就是所谓的 Voronoi 镶嵌。 曲面细分向您展示了未来数据将被分配到哪些集群; 曲面细分本质上是 k-means 从其训练数据中学到的东西。

上述 Ames 数据集上的聚类是 k 均值聚类。 这是同一张图,显示了曲面细分和质心。
在这里插入图片描述
让我们回顾一下 k-means 算法如何学习聚类以及这对特征工程意味着什么。 我们将重点关注 scikit-learn 实现中的三个参数:n_clusters、max_iter 和 n_init。

这是一个简单的两步过程。 该算法首先随机初始化一些预定义数量 (n_clusters) 的质心。 然后迭代这两个操作:

将点分配给最近的簇质心
移动每个质心以最小化到其点的距离
它迭代这两个步骤,直到质心不再移动,或者直到达到某个最大迭代次数 (max_iter)。

质心的初始随机位置经常会以较差的聚类结束。 由于这个原因,该算法重复多次(n_init)并返回每个点与其质心之间的总距离最小的聚类,即最佳聚类。

下面的动画显示了正在运行的算法。 它说明了结果对初始质心的依赖性以及迭代直到收敛的重要性。
在这里插入图片描述
您可能需要为大量集群增加 max_iter 或为复杂数据集增加 n_init。 通常,您需要自己选择的唯一参数是 n_clusters(即 k)。 一组特征的最佳划分取决于您使用的模型和您试图预测的内容,因此最好像任何超参数一样调整它(例如通过交叉验证)。

二、示例 - 加州住房

作为空间特征,California Housing 的“纬度”和“经度”自然成为 k-means 聚类的候选对象。 在此示例中,我们将这些与“MedInc”(收入中位数)进行聚类,以创建加利福尼亚不同地区的经济细分。

代码如下(示例):

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from sklearn.cluster import KMeans

plt.style.use("seaborn-whitegrid")
plt.rc("figure", autolayout=True)
plt.rc(
    "axes",
    labelweight="bold",
    labelsize="large",
    titleweight="bold",
    titlesize=14,
    titlepad=10,
)

df = pd.read_csv("../input/fe-course-data/housing.csv")
X = df.loc[:, ["MedInc", "Latitude", "Longitude"]]
X.head()

在这里插入图片描述

2.KMeans

由于 k 均值聚类对尺度敏感,因此使用极值重新尺度或规范化数据可能是个好主意。 我们的功能已经大致处于相同的规模,所以我们将保持原样

# Create cluster feature
kmeans = KMeans(n_clusters=6)
X["Cluster"] = kmeans.fit_predict(X)
X["Cluster"] = X["Cluster"].astype("category")

X.head()

该处使用的url网络请求的数据。

现在让我们看几幅图,看看它的效果如何。 首先,显示集群地理分布的散点图。 该算法似乎为沿海的高收入地区创建了单独的细分市场。

sns.relplot(
    x="Longitude", y="Latitude", hue="Cluster", data=X, height=6,
);

在这里插入图片描述
此数据集中的目标是 MedHouseVal(房屋中值)。 这些箱线图显示了目标在每个集群中的分布。 如果聚类提供信息,这些分布在大多数情况下应该在 MedHouseVal 中分离,这确实是我们所看到的。

X["MedHouseVal"] = df["MedHouseVal"]
sns.catplot(x="MedHouseVal", y="Cluster", data=X, kind="boxen", height=6);

在这里插入图片描述


总结

提示:这里对文章进行总结:

以上就是今天要讲的内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/175553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试复习11:自动化测试

专栏:《软件测试》 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录自动化测试的前提自动化测试的过程自动化测试的5个级别自动化测试的局限自动化测试的前提 自动化测试可以很好地代替人&#xf…

Facebook运营策略中的SEO优化:10个提示

在过去的一年中, Facebook上的品牌营销预算激增,这就是为什么许多人正在使用 Facebook来推广其业务。然而,并非所有新品牌都可以通过在社交媒体上进行成功的 SEO优化而获得成功。如果你想在 Facebook上销售你的产品或服务,你需要从…

2022年终总结——从打工到创业的转折

目录一、机会的创造和紧抓二、时间线的诉说1.1-4月份,在外面工作的过程中也在考虑这个事情;是在一个自己刚熟悉的金融行业学习提升?还是回归到自己铺垫了很久的教育行业深耕?2.5月份,孤身一人奔赴创业之路;…

《深入浅出计算机组成原理》学习笔记 Day7

电路基础1. 使用电信号的优势2. 继电器3. “与”、“或”、“非”参考1. 使用电信号的优势 从信息编码的角度来说,金、鼓、灯塔、烽火台类似电报的二进制编码。 电报传输的信号有两种,一种是短促的点信号(dot 信号),…

【Go基础】包与工程化和常用标准库

文章目录一、包与工程化1. 用go mod管理工程2. 包引入规则3. init调用链4. 可见性二、常用标准库1. 数学计算2. 时间函数3. I/O操作4. 编码一、包与工程化 1. 用go mod管理工程 初始化项目: go mod init $module_name$module_name和目录名可以不一样 上述命令会生…

OpenMP 原子指令设计与实现

OpenMP 原子指令设计与实现 前言 在本篇文章当中主要与大家分享一下 openmp 当中的原子指令 atomic,分析 #pragma omp atomic 在背后究竟做了什么,编译器是如何处理这条指令的。 为什么需要原子指令 加入现在有两个线程分别执行在 CPU0 和 CPU1&…

LeetCode102_102. 二叉树的层序遍历

LeetCode102_102. 二叉树的层序遍历 一、描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出&#xff…

java抽象类和接口2023026

抽象类: 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体。但在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确地知道这些子类如…

使用阿里云服务器ECS 及一些问题白话阐述

阿里云服务器ECS的申请流程 首先登录阿里云官网 https://www.aliyun.com/ 查看产品文档学习观看然后看完后 大致有了了解后 我们按照我下面梳理的流程走首先购买阿里云服务器点击产品 下拉找到 云服务器ECS 然后点击进入进入到ECS的页面如果你是新人可以享受优惠购买因为还是比…

Linux常用命令——strace命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) strace 跟踪系统调用和信号 补充说明 strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者…

go test的简单使用

go test go 集成了比较好用的test测试命令,该命令可以测试Go代码的可用性。 前奏 该文所需的项目目录结构为: example||---------function.go||---------function_test.go||---------go.modfunction.go文件是我们写用户代码的地方,function_test.go文…

力扣(LeetCode)388. 文件的最长绝对路径(2023.01.21)

假设有一个同时存储文件和目录的文件系统。下图展示了文件系统的一个示例: 这里将 dir 作为根目录中的唯一目录。dir 包含两个子目录 subdir1 和 subdir2 。subdir1 包含文件 file1.ext 和子目录 subsubdir1;subdir2 包含子目录 subsubdir2,…

架构设计中的布隆过滤器与布谷鸟过滤器

场景: 某业务后端涉及数据库,当请求消息查询某些信息时,可能先检查缓存中是否有相关信息,有的话返回,如果没有的话可能就要去数据库里面查询,这时候有一个问题,如果很多请求是在请求数据库根本不存在的数据…

活动星投票中国青年好网民网络评选微信的投票方式线上免费投票

“中国青年好网民”网络评选投票_投票微信搭建程序_微信多项免费投票_如何利用微信群投票如果通过一个小程序免费制作一个微信投票活动呢?文章详细讲解如何利用一款免费好用的微信小程序“活动星投票”小程序来制作投票活动,无需注册即可免费制作&#x…

“华为杯”研究生数学建模竞赛2005年-【华为杯】A题:高速公路行车时间估计及最优路径选择问题(附获奖论文)

赛题描述 A: Highway Traveling time Estimate and Optimal Routing Ⅰ Highway traveling time estimate is crucial to travelers. Hence, detectors are mounted on some of the US highways. For instance, detectors are mounted on every two-way six-lane highways o…

创建者模式-建造者模式

1.概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Builder来负责)和装配(由Director负责)。 从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。由于实现了构建和装配的解耦…

idea启动java项目报错——error:java: 无效的源发行版: 10

问题背景 今天在新建了一个项目的后,项目搭建好以后,想要看一下是否能够正常启动。但是在启动项目的时候,控制台报错如下:error:java: 无效的源发行版: 10。脑残审核,你告诉我哪个是广告??&…

Linux下进程以及相关概念理解

目录 一、进程概念 二、描述进程PCB 三、查看进程 3.1 通过系统目录查看 3.2 通过ps命令查看 四、进程状态 运行状态R 睡眠状态S 磁盘休眠状态D 暂停状态T 僵尸状态Z 死亡状态X 五、僵尸进程与孤儿进程 5.1 僵尸进程 5.1.1 僵尸进程的概念 5.1.2 僵尸进程的危害…

【C++】从0到1入门C++编程学习笔记 - 核心编程篇:类和对象(上)

文章目录一、封装1.1 封装的意义1.2 struct和class区别1.3 成员属性设置为私有二、对象的初始化和清理2.1 构造函数和析构函数2.2 构造函数的分类及调用2.3 拷贝构造函数调用时机2.4 构造函数调用规则2.5 深拷贝与浅拷贝2.6 初始化列表2.7 类对象作为类成员2.8 静态成员三、C对…

day27-单元测试/日志

1.管理系统与服务器集成 1.1准备工作【应用】 需求 对之前写过的信息管理系统进行改进,实现可以通过浏览器进行访问的功能 准备工作 将资料中的管理系统代码拷贝到当前模块下 导包的代码可能报错,因为之前的包路径可能和当前代码不一致,将导包的代码修改下 业务分析 解…