机器学习——聚类算法练习题
一、
随机创建不同二维数据集作为训练集 ,并结合k-means算法将其聚类 ,你可以尝试分别聚类不同数量的簇 ,并观察聚类 效果:
聚类参数n_cluster传值不同 ,得到的聚类结果不同
代码展示:
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as pltplt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = Falsex,_ = make_blobs(n_samples=1000,centers=[[-1,-1],[0,0],[1,1],[2,2]],cluster_std=[0.4,0.2,0.2,0.2],random_state=42
)plt.subplot(221)
plt.scatter(x[:,0],x[:,1],s=5,marker="o")kmeans_2 = KMeans(n_clusters=2)
kmeans_3 = KMeans(n_clusters=3)
kmeans_4 = KMeans(n_clusters=4)kmeans_2.fit(x)
y_pred = kmeans_2.predict(x)
plt.subplot(222)
plt.scatter(x[:,0],x[:,1],c=y_pred,s=5,marker="o")kmeans_3.fit(x)
y_pred = kmeans_3.predict(x)
plt.subplot(224)
plt.scatter(x[:,0],x[:,1],c=y_pred,s=5,marker="o")kmeans_4.fit(x)
y_pred = kmeans_4.predict(x)
plt.subplot(223)
plt.scatter(x[:,0],x[:,1],c=y_pred,s=5,marker="o")plt.show()
结果展示:
二、
K-means 练习题
数据集:
(2,10), (2,5), (8,4), (5,8), (7,5), (6,4), (1,2), (4,9)
- 使用K-means算法将上述点分为2个簇,初始中心点选择(2,10)和(5,8)
- 进行两次迭代并展示每次的簇分配和中心点更新
代码展示:
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np
import os
os.environ["LOKY_MAX_CPU_COUNT"] = "8" # 设置为你想要使用的核心数plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = Falsepoits = np.array([[2,10],[2,5],[8,4],[5,8],[7,5],[6,4],[1,2],[4,9]])centers = np.array([[2,10],[5,8]])kmeans_1 = KMeans(n_clusters=2,init=centers,n_init=1,max_iter=1)
kmeans_1.fit(poits)
centers_iter1 = kmeans_1.cluster_centers_plt.scatter(poits[:,0],poits[:,1],c=kmeans_1.labels_,cmap="viridis"
)# plt.scatter(
# centers[:,0],
# centers[:,1],
# c="red"
# )plt.scatter(centers_iter1[:,0],centers_iter1[:,1],c="orange"
)
plt.title("第一次迭代后")
plt.show()kmeans_2 = KMeans(n_clusters=2,init=centers_iter1,n_init=1,max_iter=1)
kmeans_2.fit(poits)
centers_iter2 = kmeans_2.cluster_centers_plt.scatter(poits[:,0],poits[:,1],c=kmeans_2.labels_,cmap="viridis"
)plt.scatter(centers_iter1[:,0],centers_iter1[:,1],c="orange"
)plt.scatter(centers_iter2[:,0],centers_iter2[:,1],c="green"
)print("第二次迭代后")
plt.show()
结果展示:
三、
项目背景
假设你是一家电子商务公司的数据分析师,公司希望根据客户的购买行为数据进行客户细分,以便制定更有针对性的营销策略。你需要使用K-means聚类算法对客户进行分组,并使用轮廓系数确定最佳K值。
数据集
我们将使用Kaggle上的"Customer Segmentation"数据集:
- 数据集链接: Mall Customer Segmentation Data | Kaggle
- 数据集包含客户ID、性别、年龄、年收入(千美元)和消费分数(1-100)
代码展示:
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import silhouette_score
import osfrom sklearn.preprocessing import StandardScaleros.environ["LOKY_MAX_CPU_COUNT"] = "8" # 设置为你想要使用的核心数plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = Falsedata = pd.read_csv("./data/Mall_Customers.csv",encoding="utf-8")
print(data.head())data['Gender'] = data['Gender'].map({'Male':0,'Female':1})X = data[["Annual Income (k$)","Spending Score (1-100)"]]# transform = StandardScaler()
# X = transform.fit_transform(X)range_k = range(2,11)sc_list = []for i in range_k:kmeans = KMeans(n_clusters=i,random_state=42)pred = kmeans.fit_predict(X)sc = silhouette_score(X,pred)sc_list.append(sc)plt.plot(range_k,sc_list,"bo-")
plt.xlabel("k")
plt.ylabel("sc")
plt.title("k-sc")
plt.grid()
plt.show()kmeans = KMeans(n_clusters=5,random_state=42)
kmeans.fit(X)
y_means = kmeans.predict(X)plt.figure(figsize=(8,6))scatter = plt.scatter(X.iloc[:,0],X.iloc[:,1],c=y_means,s=30,cmap="viridis"
)centers = kmeans.cluster_centers_center_scatter = plt.scatter(centers[:,0],centers[:,1],c="black",s=100,marker="x",linewidths=5,label="Centroids"
)# 创建自定义图例元素
legend_elements = [# 添加各簇颜色说明plt.Line2D([0], [0],marker='o',color='w',label=f'Cluster {i+1}',markerfacecolor=plt.cm.viridis(i/4), # 保持viridis颜色映射markersize=10)for i in range(5)
] + [# 添加中心点说明plt.Line2D([0], [0],marker='x',color='black',markersize=10,label='Centroids',linestyle='None')
]# 添加右侧图例
plt.legend(handles=legend_elements,title="图例说明",loc='center left',bbox_to_anchor=(0.85, 0.5), # 定位到画布右侧frameon=True,title_fontsize=12,fontsize=10,edgecolor='#DDDDDD'
)plt.xlabel("年收入(k$)")
plt.ylabel("消费分数(1-100)")
plt.title("客户细分结果")
plt.grid()
plt.tight_layout()
plt.show()
结果展示:
相关文章:
机器学习——聚类算法练习题
一、 随机创建不同二维数据集作为训练集 ,并结合k-means算法将其聚类 ,你可以尝试分别聚类不同数量的簇 ,并观察聚类 效果: 聚类参数n_cluster传值不同 ,得到的聚类结果不同 代码展示: from sklearn.da…...
U-BOOT
使用正点原子已经移植好的U-BOOT编译完成后拷贝到SD卡中烧写到板子上中,将开发板设为SD卡启动模式,上电启动开发板;打开 MobaXterm 终端模拟软件,设置好串口参数连接开发板 USB 调试串口,最后按核心板上的 PS_RST 复位…...
JVM之虚拟机运行
虚拟机运行快速复习 try-catch:catch-异常表栈展开,finally-代码复制异常表兜底 类的生命周期:加载,连接(验证,准备,解析),初始化,使用,卸载 类…...
玩转ChatGPT:DeepSeek实战(统一所在地格式)
一、写在前面 前段时间去交流,又被问到一个实际问题: 在组织全区活动时,我们设计了一份签到表,其中包含“所在单位地区”一列,目的是希望按地级市(如南宁市、柳州市等)对参与者进行分组&#…...
蓝桥杯题库经典题型
1、数列排序(数组 排序) 问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<n<200 输入格式 第一行为一个整数n。 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。 输出格式 输出…...
极限学习机进行电厂相关数据预测
使用极限学习机(Extreme Learning Machine, ELM)进行电厂相关数据预测的详细步骤和MATLAB代码示例。假设任务是预测电厂发电量或设备状态(如温度、压力),代码包含数据预处理、ELM模型构建、训练与预测全过程。 1. 数据…...
【Axure视频教程】中继器表格间批量控制和传值
今天教大家在Axure中制作中继器表格间批量控制和传值的原型模板,效果包括: 选中和取消选中——点击表格中的多选按钮可以选中或取消选中该行内容; 全选和全部取消选中——点击表头左上角的多选按钮可以选中或取消选中表格的所有内容…...
Axure高级交互设计:文本框循环赋值实现新增、修改和查看
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!本文如有帮助请订阅本专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:文本框循环赋值 主要内容:使用设置文本动作实现文本框、文字标签的读取与赋值 应…...
Springboot之类路径扫描
SpringBoot框架中默认提供的扫描类为:ClassPathBeanDefinitionScanner。 webFlux框架中借助RepositoryComponentProvider扫描符合条件的Repository。 public class ClassPathScanningCandidateComponentProvider{private final List<TypeFilter> includeFilt…...
是 OpenCV 的 CUDA 模块中用于在 GPU 上对图像或矩阵进行转置操作函数cv::cuda::transpose
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::transpose 是 OpenCV 的 CUDA 模块中的一个函数,用于在 GPU 上对图像或矩阵进行转置操作(Transpose࿰…...
2025B卷 - 华为OD机试七日集训第1期 - 按算法分类,由易到难,循序渐进,玩转OD
目录 推荐刷题方法: 一、适合人群二、本期训练时间三、如何参加四、七日集训第1期五、精心挑选21道高频100分经典题目,作为入门。第1天、逻辑分析第2天、逻辑分析第3天、逻辑分析第4天第5天第6天第7天 六、集训总结国内直接使用最新o3、o4-mini-high、GP…...
从数据中台到数据飞轮:数字化转型的演进之路
从数据中台到数据飞轮:数字化转型的演进之路 数据中台 数据中台是企业为整合内部和外部数据资源而构建的中介层,实现数据的统一管理、共享和高效利用,目标是打破信息孤岛,提高数据使用效率,支持业务决策和创新 实施成本…...
【Linux网络】HTTPS
HTTPS协议原理 定义 HTTPS 也是一个应用层协议.是在HTTP协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的.这就导致在传输过程中会出现一些被篡改的情况。 加密 加密就是把明文(要传输的信息)进行一系列变换,生成密文. 解密就是把密文再进行一系…...
UE5中制作动态数字Decal
在进行城市道路编辑时,经常需要绘制人行道、交通标志、停车线等路面元素。如果能够使用具有动态修改功能的 Decal(贴花),将大大提升编辑效率和灵活性。接下来讲解如何制作。 1.首先准备一张包含所需元素的Texture,这里…...
销量预测评估指标
销量预测评估指标 一、背景 在零售、供应链等场景中,销量预测的准确性直接影响库存管理、成本控制和客户满意度: 预测偏低:可能导致缺货(损失销售额和客户信任)。预测偏高:导致库存积压(增加…...
Unity3d 打包安卓平台(Android apk)报错Gradle build failed解决方法
问题 Unity3d 版本为2022.3.*版本,而且工程内部没有包含比较特殊的插件,安卓模块(module)也是随编辑一起安装,JDK、Android SDK Tools、Android NDK和Gradle都是默认安装。打包设置Project Settings也是默认设置,打包的工程不包含…...
STM32 启动文件分析
一、启动文件的核心作用 STM32启动文件(如startup_stm32f10x_hd.s)是芯片上电后执行的第一段代码,用汇编语言编写,主要完成以下关键任务: 初始化堆栈指针(SP) 设置主堆栈指针(…...
OSCP备战-Kioptrix4详细教程
目录 配置靶机 目标IP探测 编辑端口扫描 139/445端口 Samba 80端口获取shell 绕过lshell 方法一 编辑 方法二 编辑提权 内核漏洞 mysql udf提权 配置靶机 使用vm新建虚拟机,选择vmdk文件打开。 目标IP探测 arp-scan -l 得出目标IP:19…...
清华大学开源软件镜像站地址
清华大学开源软件镜像站: https://mirrors.tuna.tsinghua.edu.cn/...
java基础-package关键字、MVC、import关键字
1.package关键字: (1)为了更好管理类,提供包的概念 (2)声明类或接口所属的包,声明在源文件首行 (3)包,属于标识符,用小写字母表示 ࿰…...
uniapp(vue3)动态计算swiper高度封装自定义hook
// useCalculateSwiperHeight.ts import { ref, onMounted } from vue;export function useCalculateSwiperHeight(headerSelector: string .header-search, tabsWrapperSelector: string .u-tabs .u-tabs__wrapper) {const swiperHeight ref<number>(0);// 封装uni.g…...
Java SpringMVC 和 MyBatis 整合项目的事务管理配置详解
目录 一、事务管理的基本概念二、在 SpringMVC 和 MyBatis 整合项目中配置事务管理1. 配置数据源2. 配置事务管理器3. 使用事务注解4. 配置 MyBatis 的事务支持5. 测试事务管理三、总结在企业级应用开发中,事务管理是确保数据一致性和完整性的重要机制。特别是在整合了 Spring…...
C++的历史与发展
目录 一、C 的诞生与早期发展 (一)C 语言的兴起与局限 (二)C 的雏形:C with Classes (三)C 命名与早期特性丰富 二、C 的主要发展历程 (一)1985 年:经典…...
亚马逊云科技:引领数字时代的云服务先锋
在数字经济浪潮席卷全球的当下,企业和个人面临着数据爆炸、业务快速迭代等诸多挑战,亟需强大且灵活的云计算能力助力发展。亚马逊云科技凭借多年深耕与创新,成为数字时代的云服务先锋,为用户打造全方位、高质量的云计算解决方案。…...
基于Java和PostGIS的AOI面数据球面面积计算实践
目录 前言 一、计算方法简介 二、球面面积计算 1、AOI数据转Polygon 2、Geotools面积计算 3、GeographicLib面积计算 4、PostGIS面积计算 三、结果分析 1、不同算法结果对比 2、与互联网AOI对比 3、与天地图测面对比 四、总结 前言 在现代地理信息系统(G…...
新建一个reactnative 0.72.0的项目
npx react-native0.72.0 init ProjectName --version 0.72.0 下面是初始化,并且添加了对应路由的库依赖,Android项目能run起来的版本号 { "name": "ProjectName", "version": "0.0.1", "private&quo…...
计算机网络网络层(下)
一、互联的路由选择协议(网络层控制层面内容) (一)有关路由选择协议的几个概念 1.理想的路由算法 (1)理想路由算法应具备的特点:算法必须正确和完整的,算法在计算上应简单&#x…...
Visual studio 打包方法
1.扩展->搜索“”install“->下载 2.安装(安装后重新启动visual studio) 3.在已有的解决方案上右键 添加 ** 新建项目 4.在该模板下有三个文件夹 第一个文件夹(Application Folder)添加 你已有c#的releas 的程序exe 所在…...
ubuntu---100条常用命令
目录 一、文件与目录管理二、系统信息与管理三、用户与权限管理四、网络配置与管理五、软件包管理六、其他常用命令 在 Ubuntu 系统中,掌握常用命令能显著提升操作效率。以下是 100 条常用命令,涵盖文件管理、系统信息、用户权限、网络配置、软件包管理等…...
UI-TARS Desktop:用自然语言操控电脑,AI 重新定义人机交互
在人工智能技术飞速发展的今天,从文本生成到图像识别,AI 的能力边界不断被打破。而字节跳动近期开源的 UI-TARS Desktop,则将这一技术推向了更复杂的交互场景——通过自然语言直接控制计算机界面,实现了图形用户界面(GUI)的智能化自动化。这款工具不仅降低了操作门槛,更…...
Linux精确列出非法 UTF-8 字符的路径或文件名
Docker构建的时候报错:failed to solve: Internal: rpc error: code = Internal desc = grpc: error while marshaling: string field contains invalid UTF-8 1、创建一个test.sh文件 find . -print0 | while IFS= read -r -d file;...
ubuntu部署supabase
安装supabse https://supabase.com/docs/guides/local-development/cli/getting-started?queryGroupsplatform&platformlinux brew install supabase/tap/supabase supabase init supabase start需要使用brewuser进行安装: brew安装参考链接: ht…...
《Effective Python》第1章 Pythonic 思维总结——编写优雅、高效的 Python 代码
《Effective Python》第1章 Pythonic 思维总结——编写优雅、高效的 Python 代码 在编程的世界里,每个语言都有其独特的风格和最佳实践。对于 Python 而言,“Pythonic”已经成为描述遵循 Python 特定风格的代码的代名词。这种风格不仅让代码更易读、更简…...
线代第二章矩阵第八节逆矩阵、解矩阵方程
文章目录 逆矩阵定义推论可逆性质 解矩阵方程 逆矩阵 定义 设A为n阶方阵,若存在n阶方阵B,使ABBAE,那么A就是可逆阵, 只有方阵有资格讨论可逆还是不可逆 若A可逆,逆阵是唯一的 未必所有方阵都可逆!! 比方说&#…...
Java SE(12)——异常(Exception)
1.概念 在Java中,异常(Exception)是指程序在运行过程中发生的不正常情况 例如: 算数异常(ArithmeticException) 空指针异常(NullPointerException) 数组越界异常(ArrayIndexOutOfBoundsException) 根据上述的异常信息可以看出:每个具体的异…...
力扣算法---总结篇
5.13 数组总结 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标对应的数据。 正是因为数组在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。 数组的元素是不…...
空指针检测方法
空指针检测有以下几种常见方法: 静态代码分析 工具检测 :利用专业的静态代码分析工具,如 国产的库博静态代码检测工具(COBOT)、Checkmarx、Fortify、PVS-Studio 等,这些工具可以在不实际运行程序的情况下…...
Kubernetes Horizontal Pod Autosscaler(HPA)核心机制解析
一、HPA设计目标 弹性伸缩:根据实时负载动态调整Pod副本,平衡资源利用率与服务可用性声明式管理:通过目标指标阈值定义扩缩容规则,而非手动干预多云兼容:无缝集成云原生监控体系,支持混合云场景 二、核心…...
现代化QML组件开发教程
现代化QML组件开发教程 目录 QML基础介绍QML项目结构基本组件详解自定义组件开发状态与过渡高级主题最佳实践 QML基础介绍 什么是QML QML (Qt Meta Language) 是一种声明式语言,专为用户界面设计而创建。它是Qt框架的一部分,让开发者能够创建流畅、…...
DeepBook 与 CEX 的不同
如果你曾经使用过像币安或 Coinbase 这样的中心化交易所(CEX),你可能已经熟悉了订单簿系统 — — 这是一种撮合买卖双方进行交易的机制。而 DeepBook 是 Sui 上首个完全链上的中央限价订单簿。 那么,是什么让 DeepBook 如此独特&…...
《构建社交应用的安全结界:双框架对接审核API的底层逻辑与实践》
用户生成内容如潮水般涌来。从日常的生活分享,到激烈的观点碰撞,这些内容赋予社交应用活力,也带来管理难题。虚假信息、暴力言论、侵权内容等不良信息,如同潜藏的暗礁,威胁着社交平台的健康生态。内容审核机制…...
hashicorp vault机密管理系统的国产化替代:安当SMS凭据管理系统,量子安全赋能企业密钥管理
引言:国产化替代浪潮下的密钥管理新机遇 在数字化转型与信息安全自主可控的双重驱动下,企业级密钥管理市场正迎来前所未有的变革。传统海外解决方案如HashiCorp Vault虽功能强大,但在国产化适配、量子安全前瞻性布局等方面逐渐显现局限性。与…...
详解注意力机制
## 1. 引言 注意力机制(Attention Mechanism)是深度学习领域中的一项关键技术,最初源于人类视觉注意力的启发。在人类视觉系统中,我们能够快速识别图像中的重要区域,同时忽略不相关的部分。注意力机制将这种能力引入到…...
从 Vue3 回望 Vue2:响应式的内核革命
从 Vue3 回望 Vue2 02 | 响应式的内核革命:从 defineProperty 到 Proxy一、Vue2 的响应式系统:defineProperty 的极限边界1.1 基础实现机制1.2 Vue2 的典型痛点❌ 无法侦测新增属性❌ 无法拦截数组索引❌ 深层递归导致性能问题❌ 对象粒度低、不可统一代…...
[Java实战]Spring Boot 3构建 RESTful 风格服务(二十)
[Java实战]Spring Boot 3构建 RESTful 风格服务(二十) 一. 环境准备 openJDK 17:Spring Boot 3 要求 Java 17 及以上。Spring Boot 3.4.5:使用最新稳定版。Ehcache 3.10:支持 JSR-107 标准,兼容 Spring C…...
--openssl-legacy-provider is not allowed in NODE_OPTIONS 报错的处理方式
解决方案 Node.js 应用: 从 Node.js v17 开始,底层升级到 OpenSSL 3.0,可能导致旧代码报错(如 ERR_OSSL_EVP_UNSUPPORTED)。 通过以下命令启用旧算法支持: node --openssl-legacy-provider your_script.js…...
【MySQL】第三弹——表的CRUD进阶(一)数据库约束
文章目录 🚀数据库的约束<font color #FF0000 size3>约束类型:🪐<font color #FF0000 size3>①.NOT NULL非空约束🪐<font color #FF0000 size3>②.UNIQUE唯一性约束🪐<font color #FF0000 size3>③.DEFAU…...
python通过curl访问deepseek的API调用案例
废话少说,开干! API申请和充值 下面是deepeek的API网站 https://platform.deepseek.com/ 进去先注册,是不是手机账号密码都不重要,都一样,完事充值打米,主要是打米后左侧API Keys里面创建一个API Keys&am…...
哈希表:数据世界的超级索引
在数据的浩瀚宇宙中,哈希表就像是一座超级图书馆的索引系统,能够让我们瞬间找到所需的信息。作为 C 算法小白,今天我就带大家一起探索这座神奇的图书馆,揭开哈希表的神秘面纱。 什么是哈希表? 哈希表(Has…...
RDMA网络通信技术、NCCL集合通讯(GPU)
在高性能计算(HPC)、人工智能训练和数据密集型场景中,RDMA(远程直接内存访问) 和 NCCL(NVIDIA Collective Communications Library)是两项关键技术,用于优化节点间数据传输效率和大规…...