目录

  • 1 Chapter01. Introduction
    • 1.1 课程PPT
    • 1.2 补充材料(数学基础)
    • 1.3 本节作业
  • 2 Chapter02. Bayesian Decision Theory
    • 2.1 课程PPT
    • 2.2 视频素材
    • 2.3 章节测试
  • 3 Chapter03. Maximum Likelihood and Bayesian Estimation
    • 3.1 课程PPT
    • 3.2 视频素材
    • 3.3 补充材料(EM)
  • 4 Chapter04. Nonparametric Techniques
    • 4.1 课程PPT
    • 4.2 补充材料(距离)
  • 5 Chapter05. Linear Discriminant Functions
    • 5.1 课程PPT
    • 5.2 视频素材
    • 5.3 补充材料(梯度)
    • 5.4 数学证明
  • 6 Chapter06. Neural Networks
    • 6.1 课程PPT
    • 6.2 视频素材
    • 6.3 补充材料(BP)
  • 7 Chapter07. Dimension Reduction
    • 7.1 课程PPT
    • 7.2 补充材料(奇异值)
  • 8 Chapter08. Non-metric Methods
    • 8.1 课程PPT
  • 9 Chapter09. Unsupervised Learning and Clustering
    • 9.1 课程PPT
    • 9.2 实验
  • 10 Chapter10. Algorithm-independent Machine Learning
    • 10.1 课程PPT
    • 10.2 补充材料(偏差方差两难)
    • 10.3 实验
  • 11 课程实验
    • 11.1 实验环境设置
    • 11.2 python数据常用导入方法
    • 11.3 数据探索
    • 11.4 数据预处理
    • 11.5 朴素贝叶斯分类
    • 11.6 KNN分类
    • 11.7 线性回归
    • 11.8 逻辑回归
    • 11.9 SVM实现多分类
    • 11.10 决策树分类
    • 11.11 PCA实现
    • 11.12 K-means聚类实现
K-means聚类实现

实验. K-means聚类实现

实验目标

本实验旨在帮助学生理解K-means聚类的基本原理,学习如何使用Scikit-learn库实现K-means聚类,并通过实验观察其在不同数据集上的效果。学生将学会数据标准化、如何确定聚类数目以及评估聚类效果。

实验环境

o Python 3.x

o Scikit-learn库(sklearn)

o Jupyter Notebook或类似IDE(用于代码编写和结果展示)

实验数据集

本实验采用sklearn提供的make_blobs数据生成器,生成具有3个中心点的二维数据集,以便于观察和可视化K-means聚类结果。

实验步骤

1. 导入必要的库

o 导入sklearn中用于数据生成、标准化和模型评估的相关模块,K-means算法模块。

2. 生成数据集

o 使用make_blobs函数生成具有3个簇的数据集。 

3. 数据预处理

o 由于聚类是基于点之间的距离实现,所以原始数据如果在量纲上存在差异,则必须进行标准化,使用StandardScaler对特征进行标准化处理。

4. 确定最佳聚类簇数

o 本实验通过手肘法(拐点法)确定最佳聚类簇数。

5. 构建、训练模型并测试,可视化聚类结果

6. 模型评估

o 本实验使用轮廓系数(Silhouette Score)评估聚类效果,可进一步分析模型在不同簇数下的表现。

实验总结

o 理解算法原理:K-means 是一种无监督学习算法,通过最小化数据点到各自簇中心的距离来分配簇。其优点在于简单高效,但需要事先指定簇数k,并且对初始值敏感。

o 相关细节分析:如何选择合适的距离度量?K-means函数的参数如何设置?如何选择合适的初始中心?有哪些选择合适k值的方法?聚类算法除了轮廓系数还有哪些模型评估指标?K-means的复杂度如何?K-means有些优缺点和适用场景?

o 探讨实验/编程问题:总结讨论编程中遇到的难点或者bug。比如出现“UserWarning: KMeans is known to have a memory leak on Windows with MKL…”这样的警告如何解决?

o 实验展望:进一步实现用K-means实现高维数据聚类;比较K-means与K-means++及MiniBatchKMeans。

实验代码参考

以下是一个利用Scikit-learn生成数据集(二维3类)并实现K-means聚类的代码示例:

——————————————

# step1:导入必要的库

import numpy as np

import matplotlib.pyplot as plt

from sklearn.datasets import make_blobs

from sklearn.preprocessing import StandardScaler

from sklearn.cluster import KMeans

from sklearn.metrics import silhouette_score 


# step2:生成数据集(使用函数make_blobs,注意参数设置,如生成样本点1000个,二维,中心点[0,0],[1,1],[2,2],方差0.3,0.2,0.3,随机种子42)



# 可视化生成数据集(注意这里是标准化前的数据)



# step3:数据预处理——标准化



# step4:计算wcss,手肘法确定最佳簇数

wcss = []

              # 依次尝试1~8个簇

kmeans = KMeans(n_clusters=k, random_state=42)

kmeans.fit(X_scaled)

wcss.append(kmeans.inertia_)


# 绘制手肘图



# step5:根据手肘法结果,选择合适的k值 (如选择 k=3),拟合模型并预测


# 可视化聚类结果




# step6:评估聚类效果(如使用轮廓系数)



# ps:可尝试别的评估方法,比如Calinski-Harabasz Index

#注意不是metrics.calinski_harabaz_score,而是metrics.calinski_harabasz_score


——————————————