机器学习——聚类算法练习题

一、

随机创建不同二维数据集作为训练集 ,并结合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)

  1. 使用K-means算法将上述点分为2个簇,初始中心点选择(2,10)和(5,8)
  2. 进行两次迭代并展示每次的簇分配和中心点更新

代码展示:

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()

结果展示:

 

 

 

 

 

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

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

相关文章

kafka----初步安装与配置

目录标题 ⭐kafka 与 zookeeper间的关系一.集群部署二.修改配置文件三.分发安装包四.启动与关闭 kafka 与 zookeeper 相同,是以集群的形式使用 ⭐kafka 与 zookeeper间的关系 kafka 的使用 要在 zookeeper 集群配置好的基础上 使用要想启动kafka 要先启动 zookeep…

进程与线程:07 CPU调度策略

一、课程内容概述 本节课程主要讲解操作系统的CPU调度策略,聚焦于基本操作系统上的调度算法,探讨其大致实现方式、需折中考虑的问题。CPU调度在不同场景下复杂程度不同,如卫星、导弹等实时性要求高的系统,需采用实时调度&#xf…

JPG与PDF格式转换器

该插件可实现JPG与PDF格式的互转。 MainForm.Designer.cs using System.Windows.Forms; namespace JpgToPdfConverter {partial class MainForm{private System.ComponentModel.IContainer components null;protected override void Dispose(bool disposing){if (disposing &…

LlamaIndex 第八篇 MilvusVectorStore

本指南演示了如何使用 LlamaIndex 和 Milvus 构建一个检索增强生成(RAG)系统。 RAG 系统将检索系统与生成模型相结合,根据给定的提示生成新的文本。该系统首先使用 Milvus 等向量相似性搜索引擎从语料库中检索相关文档,然后使用生…

浅聊一下数据库的索引优化

背景 这里的索引说的是关系数据库(MSSQL)中的索引。 本篇不是纯技术性的内容,只是聊一次性能调优的经历,包含到一些粗浅的实现和验证手段,所以,大神忽略即可。 额…对了,笔者对数据库的优化手段…

【android bluetooth 框架分析 02】【Module详解 7】【VendorSpecificEventManager 模块介绍】

1. 背景 我们在 gd_shim_module 介绍章节中&#xff0c;看到 我们将 VendorSpecificEventManager 模块加入到了 modules 中。 // system/main/shim/stack.cc modules.add<hci::VendorSpecificEventManager>();在 ModuleRegistry::Start 函数中我们对 加入的所有 module…

小刚说C语言刷题—1080质因子

1.题目描述 任意输入一正整数 N &#xff0c;求出它的所有质因子。如&#xff1a;10&#xff1d;25&#xff0c;20&#xff1d;225。 输入 输入只有一行&#xff0c;包括 11个整数 n (1≤n≤32768) 输出 输出若干行&#xff0c;按从小到大的顺序给出这个数的所有质因子&am…

C语言中的宏

1.防止头文件重复包含 1.#pragma once #pragma once 是一个编译器指令&#xff0c;用于防止头文件被重复包含。它的核心作用是通过简单语法替代传统的头文件保护宏&#xff08;#ifndef/#define/#endif&#xff09;&#xff0c;提升代码简洁性和可维护性。 作用详解 防止重复…

MapReduce 模型

‌引言‌ MapReduce 是分布式计算领域的里程碑式模型&#xff0c;由 Google 在 2004 年论文中首次提出&#xff0c;旨在简化海量数据处理的复杂性。其核心思想是通过函数式编程的 ‌Map‌ &#xff08;映射&#xff09;和 ‌Reduce‌ &#xff08;归约&#xff09;阶段&#x…

Linux文件编程——标准库函数fopen、fread、fwrite等函数

1. fopen — 打开文件 函数原型&#xff1a; FILE *fopen(const char *filename, const char *mode);参数&#xff1a; filename&#xff1a;要打开的文件名&#xff0c;可以是相对路径或绝对路径。 mode&#xff1a;文件打开模式&#xff0c;表示文件的操作方式&#xff08…

从 Git 到 GitHub - 使用 Git 进行版本控制 - Git 常用命令

希望本贴能从零开始带您一起学习如何使用 Git 进行版本控制&#xff0c;并结合远程仓库 GitHub。这会是一个循序渐进的指南&#xff0c;我们开始吧&#xff01; 学习 Git 和 GitHub 的路线图&#xff1a; 理解核心概念&#xff1a;什么是版本控制&#xff1f;Git 是什么&…

2025.05.11拼多多机考真题算法岗-第四题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 04. 记忆碎片重组 问题描述 卢小姐正在开发一款名为"记忆碎片"的游戏,玩家需要分析混乱的记忆数据,推测出形成这些记忆的原始序列。游戏中,记忆数据存储在一个特殊的数…

Android Exoplayer多路不同时长音视频混合播放

在上一篇Android Exoplayer 实现多个音视频文件混合播放以及音轨切换中我们提到一个问题&#xff0c;如果视频和音频时长不一致&#xff0c;特别是想混合多个音频和多个视频时就会出问题&#xff0c;无法播放。报错如下&#xff1a; E/ExoPlayerImplInternal(11191): Playback…

Datawhale PyPOTS时间序列5月第1次笔记

课程原地址&#xff1a; https://github.com/WenjieDu/PyPOTS&#xff08;Package地址&#xff09; https://github.com/WenjieDu/BrewPOTS/tree/datawhale/202505_datawhale&#xff08;Tutorial地址&#xff09; 2.1 PyPOTS简介 PyPOTS 是一个专为处理部分观测时间序列&a…

网安学途—流量分析 attack.pcap

attack.pacp 使用Wireshark查看并分析虚拟机windows 7桌面下的attack.pcapng数据包文件&#xff0c;通过分析数据包attack.pcapng找出黑客的IP地址&#xff0c;并将黑客的IP地址作为FLAG &#xff08;形式&#xff1a;[IP地址]&#xff09;提交&#xff1a; 过滤器筛选&#x…

【大模型】DeepResearcher:通用智能体通过强化学习探索优化

DeepResearcher&#xff1a;通过强化学习在真实环境中扩展深度研究 一、引言二、技术原理&#xff08;一&#xff09;强化学习与深度研究代理&#xff08;二&#xff09;认知行为的出现&#xff08;三&#xff09;模型架构 三、实战运行方式&#xff08;一&#xff09;环境搭建…

go语言实现IP归属地查询

效果: 实现代码main.go package mainimport ("encoding/json""fmt""io/ioutil""net/http""os" )type AreaData struct {Continent string json:"continent"Country string json:"country"ZipCode …

基于STM32、HAL库的SGTL5000XNLA3R2音频接口芯片驱动程序设计

一、简介: SGTL5000XNLA3R2 是 Cirrus Logic 推出的高性能、低功耗音频编解码器,专为便携式和电池供电设备设计。它集成了立体声 ADC、DAC、麦克风前置放大器、耳机放大器和数字信号处理功能,支持 I2S/PCM 音频接口和 I2C 控制接口,非常适合与 STM32 微控制器配合使用。 二…

window 显示驱动开发-报告图形内存(一)

计算图形内存 在 VidMm 能够向客户端报告准确的帐户之前&#xff0c;它必须首先计算图形内存的总量。 VidMm 使用以下内存类型和公式来计算图形内存&#xff1a; 系统总内存 此值是操作系统可访问的系统内存总量。 BIOS 分配的内存不会出现在此数字中。 例如&#xff0c;一台…

[FA1C4] 博客链接

Blog Link 博客已经从 CSDN 转移 高情商&#xff1a;博客是给人看的 低情商&#xff1a;CSDN 已经烂了根本不能看 链接: https://fa1c4.github.io/