K-means与PCA算法在机器学习中的应用

需积分: 5 0 下载量 76 浏览量 更新于2024-10-07 收藏 11.43MB ZIP 举报
资源摘要信息:"本资源是一个关于机器学习的压缩包文件,包含了K-means算法和PCA(主成分分析)的相关内容。K-means算法是一种聚类分析的方法,用于将数据集分为若干个簇,每个簇中的数据点彼此相似度较高。PCA是一种降维技术,其目标是通过线性变换将原始数据转换为一组各维度线性不相关的表示,称为主成分,并且尽可能保留原始数据的方差信息。 描述中提到的机器学习课程由***和斯坦福在线合作创建,面向初学者,涵盖了机器学习的基础知识,强调如何在真实世界中应用这些技术构建人工智能应用。课程内容全面,不仅涉及监督学习(包括多元线性回归、逻辑回归、神经网络和决策树),还介绍了无监督学习(聚类、降维、推荐系统)的相关技术。此外,课程还分享了硅谷在人工智能和机器学习方面的最佳实践,如评估和调整模型、以数据为中心的方法提高性能等。 标签中提到的“吴恩达”,即Andrew Ng,是机器学习和人工智能领域的著名学者,他在斯坦福大学和Coursera上推出的机器学习课程深受全球学习者的喜爱。他的教学和研究工作对推动机器学习和人工智能技术的发展有着重要影响。 结合文件的标题、描述和标签,我们可以推断出这个压缩包文件可能是与吴恩达所授机器学习课程相关的教学材料,特别是关于K-means算法和PCA技术的应用和实践部分。文件的名称“7:K-means+PCA”表明,这可能是该课程的第七个模块或者章节,专门讲解K-means聚类算法和PCA降维技术。这些内容是机器学习领域中的核心概念,对于理解如何处理高维数据、进行数据的特征提取和模式发现具有重要意义。 K-means聚类算法的基本思想是通过迭代计算来最小化簇内距离总和,即每个点到其所在簇中心点的距离之和。该算法首先随机选择K个数据点作为初始中心,然后将数据点分配到最近的中心点形成簇,接着重新计算每个簇的中心,迭代此过程直到中心点不再发生变化或变化非常小为止。K-means算法适用于大数据集,但需要预先指定簇的数量K,并且对异常值敏感,同时结果可能会受到初始中心点选择的影响。 PCA则是一种统计方法,它通过正交变换将可能相关的变量转换为一组线性不相关的新变量,这些新变量称为主成分。每个主成分都能够在数据集中解释最大的方差,这样可以将原始数据集压缩到更低维度的空间中,同时尽可能保留数据的原始信息。PCA常用于数据预处理、特征提取、数据压缩等领域。在机器学习中,PCA可以帮助减少过拟合、提高模型性能和加速计算速度。 综上所述,这个压缩包文件对于想要深入了解和实践K-means聚类和PCA降维技术的机器学习初学者来说是一个宝贵的资源。通过学习这些技术,学习者将能够更好地处理实际问题中的数据,并为构建复杂的人工智能应用打下坚实的基础。"

import numpy as np import matplotlib.pyplot as plt %matplotlib inline from sklearn.datasets import load_digits data, labels = load_digits(return_X_y=True) (n_samples, n_features), n_digits = data.shape, np.unique(labels).size print(f"# 类别数: {n_digits}; # 样本数: {n_samples}; # 特征数: {n_features}") print(data[:2]) from time import time from sklearn.pipeline import make_pipeline from sklearn.preprocessing import StandardScaler from sklearn.cluster import KMeans kmeans=KMeans(n_clusters=10, random_state=42) ### 创建管道并训练,记录训练时间 t0 = time() estimator = make_pipeline(StandardScaler(), kmeans).fit(data) fit_time = time() - t0 print("训练时间:", fit_time) ### 通过惯性(inertia)聚类的性能 print(estimator) print(estimator[-1].inertia_) result1={"fit-time":fit_time,"inertia:":estimator[-1].inertia_ } from sklearn.decomposition import PCA ### ??编程使用PCA分解,得到10个主成分,放到变量 components 中--------------------------- pca = PCA(n_components=10) components = pca.fit_transform(data) ###------------------------------------------------------------------------- ### 创建KMeas对象 kmeans=KMeans(n_clusters=10, init="k-means++", random_state=42) ### 创建管道并训练,记录训练时间 t0 = time() estimator = make_pipeline(StandardScaler(), kmeans).fit(data) fit_time = time() - t0 print("训练时间:", fit_time) ### 通过惯性(inertia)聚类的性能 print(estimator) print(estimator[-1].inertia_) result2={"fit-time":fit_time,"inertia:":estimator[-1].inertia_ } from sklearn.decomposition import PCA ### ??编程 选择保持 98%的信息的PCA模型,用名为pca的变量表示 ---------- pca = PCA(n_components=0.98) ###------------------------------------------------------------------- ###创建KMeas对象 kmeans=KMeans(n_clusters=10, random_state=42) ###??编程 创建一个 标准化+PCA降维+KMeas聚类的管道并训练,记录训练时间 t0 = time() estimator = make_pipeline(StandardScaler(), pca, kmeans).fit(data) ##增加pca预处理 fit_time = time() - t0 print("训练时间:", fit_time) ### 通过惯性(inertia)聚类的性能 print(estimator) print(estimator[-1].inertia_) result3={"fit-time":fit_time,"inertia:":estimator[-1].inertia_ }可以选择不同的KMeans的参数对digits进行聚类,比较实验结果,并选择一个针对此问题的最好模型

2023-05-25 上传