机器学习 - 聚类 - k_means

news/2024/5/20 7:28:27 标签: 机器学习, 聚类, 人工智能, kmeans

一、下载数据集

https://archive.ics.uci.edu/ml/datasets/ 这个库提供了大量的机器学习数据集

Iris数据集:这是一个经典的小型数据集,包含了150个样本,分为三类,每类50个样本。每个样本有四个特征,分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。这个数据集非常适合初学者用来理解和实践聚类算法 。

二、使用pandas对数据进行处理

因为下载的数据是 .data为后缀名,要转换成 .csv文件,那么就需要使用数据分析的包,pandas。

 第一次使用需要下载: pip install pandas

import pandas as pd


data_file_path = 'iris.data'
csv_file_path = 'iris.csv'

# 读取.data文件到pandas DataFrame
# 注意:这里的分隔符是逗号,需要根据实际情况进行调整
df = pd.read_csv(data_file_path, sep=',')

# 假设你需要进行一些数据清洗和转换
# 例如,重命名列名
df.columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'species']  
# 根据你的.data文件内容替换这些列名

# 将清洗后的DataFrame保存为.csv文件
df.to_csv(csv_file_path, index=False)  # index=False表示不保存行索引到CSV文件中


# 打印聚类结果的前几行
print(iris_df.head())

三、实现 k_means 聚类算法

 代码实现

# 加载CSV文件
iris_df = pd.read_csv('iris.csv')

# 假设CSV文件中有'sepal_length', 'sepal_width', 'petal_length', 'petal_width'和'species'这些列
# 我们将使用前四个特征列进行聚类,'species'列用于比较聚类结果(如果需要的话)
X = iris_df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]

# 设置KMeans聚类器,这里我们假设类别数为3(与iris数据集的实际类别数相同)
kmeans = KMeans(n_clusters=3, random_state=42)

# 对数据进行聚类
kmeans.fit(X)

# 获取聚类标签
labels = kmeans.labels_

# 将聚类标签添加到原始DataFrame中
iris_df['cluster'] = labels

# 打印聚类结果的前几行
print(iris_df.head())

# 可视化聚类结果(仅适用于2D或3D数据)
# 这里我们使用前两个特征进行简单的2D散点图可视化
plt.scatter(X['sepal_length'], X['sepal_width'], c=labels, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('KMeans Clustering')
plt.show()

 通过matplotlib实现数据可视化

 四、sc聚类评价指标

首先,你需要加载iris数据集,然后应用聚类算法(比如KMeans),最后计算并打印轮廓系数。

from sklearn import datasets  
from sklearn.cluster import KMeans  
from sklearn.metrics import silhouette_score  
from sklearn.preprocessing import StandardScaler  
import matplotlib.pyplot as plt  
  
# 加载iris数据集  
iris = datasets.load_iris()  
X = iris.data  
y = iris.target  # 真实标签,对于聚类分析我们实际上不需要它,但为了评估可以保留  
  
# 数据标准化  
scaler = StandardScaler()  
X_scaled = scaler.fit_transform(X)  
  
# 使用KMeans进行聚类  
# 这里我们假设不知道真实类别数,因此可以尝试不同的k值来找到最佳的簇数  
# 但在本例中,为了简单起见,我们使用iris数据集的实际类别数3  
true_k = 3  
kmeans = KMeans(n_clusters=true_k, random_state=42)  
kmeans.fit(X_scaled)  
labels = kmeans.labels_  
  
# 计算轮廓系数  
silhouette_avg = silhouette_score(X_scaled, labels)  
print("The average silhouette_score is :", silhouette_avg)  
  
# 可视化聚类结果(对于二维或三维数据)  
# 由于iris数据集有四维特征,我们不能直接可视化。但是,我们可以选择两个特征进行可视化。  
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=labels, cmap='viridis')  
centers = kmeans.cluster_centers_  
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)  
plt.title("KMeans Clustering of Iris Dataset")  
plt.xlabel("Sepal length")  
plt.ylabel("Sepal width")  
plt.show()  
  
# 注意:这里我们只选择了前两个特征进行可视化,因此可能无法完全反映聚类的效果。  
# 在实际分析中,你应该考虑所有特征,并可能需要使用其他评估方法来全面评估聚类结果。

 结果可视化


http://www.niftyadmin.cn/n/5456482.html

相关文章

Chrome 插件 storage API 解析

Chrome.storage API 解析 使用 chrome.storage API 存储、检索和跟踪用户数据的更改 一、各模块中的 chrome.storage 内容 1. Service worker 中 runtime 内容 2. Action 中 runtime 内容 3. Content 中 runtime 内容 二、权限(Permissions) 如果需使…

一个展开和收起的业务组件(React)

index.tsx import classNames from classnames; import { useBoolean } from ahooks; import { useMemo } from react; import styles from ./index.module.less;type IProps {foldHeight?: string | number; } & React.HTMLAttributes<HTMLDivElement>;// 默认折…

就业班 第二阶段 2401--3.27 day8 shell之循环控制

七、shell编程-循环结构 shell循环-for语句 for i in {取值范围} # for 关键字 i 变量名 in 关键字 取值范围格式 1 2 3 4 5 do # do 循环体的开始循环体 done # done 循环体的结束 #!/usr/bin/env bash # # Author: # Date: 2019/…

Deconstructing Denoising Diffusion Models for Self-Supervised Learning解读(超详细)

论文题目&#xff1a;Deconstructing Denoising Diffusion Models for Self-Supervised Learning 原文链接&#xff1a;https://arxiv.org/html/2401.14404v1 本文是对何凯明老师的新作进行的详细解读&#xff0c;其中穿插了一些思考&#xff0c;将从以下四个方面对这篇工作进…

Composer常见错误15条附解决办法和代码示例

Composer是PHP的一个依赖管理工具&#xff0c;用于管理项目的库和框架。在使用Composer时&#xff0c;可能会遇到一些常见的错误。下面是一些常见的Composer错误及其解决方法&#xff0c;并附带代码示例。 1.Composer未安装或未正确配置 错误提示&#xff1a;composer: comma…

【嵌入式机器学习开发实战】(七)—— 政安晨:通过ARM-Linux掌握基本技能【环境准备:树莓派】

ARM-Linux是一种针对ARM架构的操作系统&#xff0c;它的设计目标是在低功耗、低成本的硬件平台上运行。ARM-Linux可以运行在多种ARM处理器上&#xff0c;包括树莓派。 树莓派&#xff08;Raspberry Pi&#xff09;是一款基于ARM架构的单板计算机&#xff0c;由英国的树莓派基金…

【LAMMPS学习】五、LAMMPS命令(5)通用命令

5. 命令 本部分描述了 LAMMPS 输入脚本的格式以及其中的命令如何用于定义 LAMMPS 模拟。主要包括以下内容。 5.1. LAMMPS 输入脚本 5.2.输入脚本的解析规则 5.3.输入脚本结构 5.4. 按类别划分的命令 5.5.通用命令 LAMMPS 通用命令的字母顺序列表。请注意&#xff0c;可以…

以Monkey为例全方位解析App压力测试的关键要点

概念解读&#xff1a; 以Monkey为例&#xff0c;全方位解析App压力测试的关键要点主要包括以下几个方面&#xff1a; 一、Monkey工具概述 Monkey是Android系统自带的一个命令行工具&#xff0c;用于生成伪随机用户事件流来对应用程序进行压力测试。通过发送大量的随机事件到…