AI学习笔记之七:探索无监督学习的原理、常用算法及实现解析

无监督学习也称为无监督机器学习,是机器学习领域中的重要分支之一,它使用机器学习算法来分析未标记的数据集并进行聚类。

在这里插入图片描述

机器学习的分类

与有监督学习和强化学习不同,无监督学习的数据集中不包含任何人工标注的目标值或反馈信号。

图片

无监督学习
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

无监督学习算法需要从原始数据中自主发现内在结构、模式或知识。**这种“自主学习”的范式更贴近人类自主学习的方式,使得无监督学习在许多应用场景都有独特的优势,这种方法能够发现信息的相似性和差异性,因而是探索性数据分析、交叉销售策略、客户细分和图像识别的理想解决方案。**

1. 无监督学习的原理

无监督学习的核心思想是通过对数据的统计特征、相似度等进行分析和挖掘,利用密度估计、聚类和降维等技术来捕获和发现数据隐藏的内在结构和模式。

无监督学习的主要原理可以概括为:

图片

无监督学习的原理

密度估计(Density Estimation)

密度估计是无监督学习的一个基本问题。它旨在估计样本数据的概率密度函数,从而刻画数据的整体分布特征。常用的密度估计方法包括核密度估计、高斯混合模型、K-近邻等。掌握了数据分布,就能发现异常数据点、检测新观测值等。

聚类(Clustering)

聚类是将数据集中的样本划分为若干个类别的过程,使得同一类别内的样本相似度较高,不同类别之间的样本相似度较低。在聚类过程中,每个样本点都被视为一个向量,聚类算法通过计算样本之间的距离或相似度,将相似的样本归为同一类别。常见的聚类算法包括K均值聚类、层次聚类、DBSCAN、高斯混合模型等。聚类分析有助于发现数据的内在组织结构。

降维(Dimensionality Reduction)

数据常常存在维度灾难的问题,即特征空间过高导致计算复杂度和数据稀疏性增加。降维技术通过数学上的投影等方式将高维数据映射到一个低维空间,在减少数据的维度的同时保留数据的原始结构和特征关系,从而简化后续处理。主成分分析(PCA)、t-SNE等都是常用的无监督降维方法。

表示学习(Representation Learning)

表示学习旨在从原始数据中自动学习出良好的特征表示,使得表示空间中相似的样本更易于被区分和聚类。自编码器(AutoEncoder)就是一种常用的无监督神经网络模型,能够有效地学习出高质量的数据表示。

无监督学习算法通常会以无约束或少量约束的方式优化某些目标函数,如最大化数据对数似然、最小化重构误差等,从而捕获数据的本质结构和模式。得益于深度学习技术的发展,无监督表示学习逐渐成为研究的热点。

2. 无监督学习的常用核心算法

2.1. K-Means聚类算法(K均值聚类)

K-Means是最常用和最简单的聚类算法之一,它是一种基于中心点的聚类方法,它将样本分配给离其最近的K个中心点所对应的簇。该算法的核心步骤包括初始化中心点、分配样本到最近的中心点所在的簇、更新中心点位置,使得簇内样本间的平方和最小。K均值聚类适用于数据集中各个簇的形状近似球形、大小相似的情况。

图片

K均值聚类算法步骤

一般算法步骤如下:

  • • 随机初始化k个聚类中心

  • • 重复以下步骤直到收敛:

    • • 将每个样本分配到与之最近的聚类中心
    • • 重新计算每个簇的聚类中心

K-Means具有简单高效的优点,但也存在一些缺陷,如对噪声和异常值敏感、需要预先指定簇数k等。

2.2 层次聚类算法

图片

层次聚类算法

**层次聚类算法通过逐步合并或分裂簇来构建一个层次化的聚类树状结构。**主要分为两种策略:

  • • 凝聚层次聚类(底至顶):从每个样本作为一个簇开始,逐步合并最相似的簇
  • • 分裂层次聚类(顶至底):从所有样本作为一个簇开始,逐步将离散程度最高的簇进行分裂

常用的相似性度量包括最小距离、最大距离、平均距离等。需要事先确定一个合理的terminated条件来决定最终的聚类数目。

2.3. 高斯混合模型(GMM)

图片

高斯混合模型(GMM)

**GMM假设整个数据服从一个由多个高斯分布混合而成的概率分布模型。可以使用期望最大化(EM)算法来估计每个高斯分布的参数(均值、协方差)和所占的混合权重。**模型估计完成后,每个样本可以基于后验概率被"软分配"到不同的高斯分布中。GMM广泛应用于聚类、密度估计等任务。

2.4. 主成分分析(PCA)

图片

主成分分析(PCA)

PCA是一种常用的无监督降维和数据表示技术。其**主要思想是将原始数据通过线性变换投影到一组相互正交的低维空间中,使得投影后数据的方差最大化。**PCA的主要思路是找到数据中最主要的特征,即主成分,以降低数据的维度。具体步骤包括:中心化数据、计算协方差矩阵、求解特征值和特征向量、选取方差贡献度最大的前k个主成分等。PCA常被用于数据可视化、压缩和特征提取的预处理步骤。

2.5. t-SNE

图片

t-分布随机邻域嵌入

**t-SNE(t-分布随机邻域嵌入)是一种较新的非线性降维技术,能够有效地保留原始高维数据的局部邻域结构。**首先计算高维空间样本之间的相似度,然后在低维空间中最小化相似度与映射后距离之间的KL散度。t-SNE常用于可视化高维数据,辅助探索数据的内在分布和聚类结构。

2.6. 自编码器(AutoEncoder)

图片

在这里插入图片描述

**自编码器是一种基于人工神经网络的无监督表示学习模型。**其由编码器和解码器组成,编码器将输入数据映射到隐含层的低维表示,解码器则试图重构原始输入。通过最小化输入和重构之间的损失函数,自编码器能够自动学习出对应问题的良好特征表示。堆叠自编码器、变分自编码器等都是基于这一思想的扩展。

3. 无监督学习的实现

3.1 K均值聚类的实现

下面我们通过一个基于Python的K-Means聚类算法实例,来更直观地理解无监督学习。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# 生成样本数据
X, y = make_blobs(n_samples=500, centers=4, n_features=2, random_state=0)

# 初始化K-Means模型
kmeans = KMeans(n_clusters=4, random_state=0)

# 训练K-Means模型
kmeans.fit(X)

# 预测每个样本的簇标签
labels = kmeans.predict(X)

# 可视化结果
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,1], marker='x', c='red', s=100)
plt.title('K-Means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

这段代码首先使用make_blobs函数生成一个包含500个样本的数据集X和y。

这些样本被划分为4个不同的簇,每个样本有2个特征。

接下来,我们初始化一个KMeans对象,将聚类数n_clusters设置为4。

random_state参数用于控制随机种子,确保每次运行结果一致。

调用fit方法使用X训练K-Means模型。模型会迭代调整聚类中心的位置,最小化簇内样本到中心的平方距离之和。

使用predict方法为每个样本预测一个簇标签。

最后,我们使用Matplotlib绘制可视化结果。

通过plt.scatter函数绘制样本点,不同颜色代表不同的簇。plt.scatter的第二次调用绘制聚类中心,使用红色加号标记。设置图像标题、x轴和y轴标签,完成可视化。

图片

代码可视化输出

我们在 Jupyter Notebook 环境中运行上述代码后,我们可以看到一个可视化的2维散点图,展示了K-Means在这个人工数据集上的聚类效果。不同颜色的点代表属于不同簇的样本,红色加号标记表示估计出的4个聚类中心。

从图中还可以看到,K-Means算法能够较好地将数据划分为4个紧密的簇。但是,由于数据分布并不是严格球形,有一些样本仍被错误分类到其他簇中。

这也体现了K-Means对初始中心选择和数据分布假设的敏感性

K-Means聚类算法通过优化某些目标函数,比如最小化聚类内的方差,从而将相似的样本聚集到同一个簇中,算法会迭代地调整聚类中心的位置,使每个样本与离它最近的中心之间的平方距离之和最小化。

3.2 层次聚类的实现

我们使用SciPy库中的层次聚类模块,实现一个基于Ward’s最小方差准则的聚类算法。

该算法采取自底向上的策略,初始时将每个样本作为一个单独的簇,然后在每一步中合并两个最相近的簇,直到所有样本聚合为一个簇或满足指定的终止条件。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data

# 初始化层次聚类模型
clustering = AgglomerativeClustering(n_clusters=3, linkage='ward')

# 训练模型
clustering.fit(X)

# 获取样本的聚类标签
labels = clustering.labels_

# 可视化结果
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')

# 设置不同颜色表示不同簇
colors = ['r', 'g', 'b']

# 绘制每个簇的样本点
for label, color in zip(set(labels), colors):
    data = X[labels == label]
    ax.scatter(data[:, 0], data[:, 1], data[:, 2], c=color, label=f'Cluster {label+1}')

# 设置图例、坐标轴标签和标题
ax.legend()
ax.set_xlabel('Sepal Length')
ax.set_ylabel('Sepal Width')
ax.set_zlabel('Petal Length')
ax.set_title('Hierarchical Clustering on Iris Dataset')

# 调整视角角度
ax.view_init(30, 30)

plt.show()

这段代码首先使用从scikit-learn库中加载鸢尾花数据集iris。

该数据集包含150个样本,每个样本有4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我们初始化AgglomerativeClustering类,使用Ward’s最小方差准则作为链接标准,并设置簇数为3。

调用fit方法在数据X上训练层次聚类模型。该算法会自底向上地将相似的样本合并为簇。从模型中获取每个样本的聚类标签labels。

使用Matplotlib创建一个3D图像,并添加一个3D子图。设置不同的颜色表示不同的簇。

遍历每个簇的样本点,使用ax.scatter在3D图中绘制,同一簇的样本使用相同颜色。设置图例、坐标轴标签和标题。

调用ax.view_init(30, 30)调整3D图像的视角角度,使其更加容易观察。最后调用plt.show()展示可视化结果。

图片

代码可视化输出

运行上述代码后,我们将看到一个3D散点图,展示了层次聚类算法在鸢尾花数据集上的聚类效果。

不同颜色的点代表属于不同簇的样本。

从图中我们可以直观地看到,层次聚类算法能较好地将鸢尾花数据集划分为3个簇,每个簇对应一种鸢尾花品种。

层次聚类的主要优势在于能够很直观地呈现数据的层次结构,同时不需要预先指定聚类数目。

**但它也存在一些缺点,比如对于大规模数据计算复杂度较高,一旦发生错误合并也无法回退等。**总的来说,层次聚类是一种解释性很强且实用的无监督学习算法。

3.3 高斯混合模型(GMM)的实现

我们使用Python中的scikit-learn库,通过一个1000个样本的示例,来详细说明高斯混合模型(GMM)算法的原理和实现。

GMM是一种基于概率模型的无监督学习算法,它假设整个数据集由多个高斯分布混合而成。

算法的目标是通过期望最大化(EM)算法估计每个高斯成分的参数(均值、协方差和混合权重),从而对数据进行软聚类。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
from scipy.stats import multivariate_normal
from mpl_toolkits.mplot3d import Axes3D

# 生成样本数据
np.random.seed(0)
n_samples = 1000
mu1, mu2 = (-2, -2, 2), (5, 5, 5)
cov1, cov2 = np.eye(3), np.eye(3) * 2
data1 = np.random.multivariate_normal(mu1, cov1, n_samples // 2)
data2 = np.random.multivariate_normal(mu2, cov2, n_samples - n_samples // 2)
X = np.concatenate((data1, data2), axis=0)

# 初始化GMM模型
gmm = GaussianMixture(n_components=2, covariance_type='full')

# 训练GMM模型
gmm.fit(X)

# 获取模型参数
means = gmm.means_
covariances = gmm.covariances_
weights = gmm.weights_

# 预测每个样本的簇标签
labels = gmm.predict(X)

# 可视化结果
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')

colors = ['navy', 'turquoise']
for i, color in enumerate(colors):
    x = X[labels == i]
    ax.scatter(x[:, 0], x[:, 1], x[:, 2], c=color, s=10)
    
    # 绘制高斯分布等高面和协方差椭球
    u, s, vh = np.linalg.svd(covariances[i])
    radii = np.sqrt(s)
    u = u[:, :2]
    phi = np.linspace(0, 2 * np.pi, 100)
    theta = np.linspace(0, np.pi, 100)
    x_plot = radii[0] * np.outer(np.cos(phi), np.sin(theta))
    y_plot = radii[1] * np.outer(np.sin(phi), np.sin(theta))
    z_plot = radii[2] * np.outer(np.ones_like(phi), np.cos(theta))
    for j in range(x_plot.shape[1]):
        for k in range(x_plot.shape[0]):
            [x_plot[k, j], y_plot[k, j], z_plot[k, j]] = np.dot([x_plot[k, j], y_plot[k, j], z_plot[k, j]], vh.T) + means[i]
    ax.plot_surface(x_plot, y_plot, z_plot, color=color, alpha=0.2)

ax.scatter(means[:, 0], means[:, 1], means[:, 2], c='black', s=100, marker='*', label='Means')
ax.legend()
ax.set_xlabel('Feature 1')
ax.set_ylabel('Feature 2')
ax.set_zlabel('Feature 3')
ax.set_title('GMM Clustering')

plt.show()

代码首先使用 np.random.multivariate_normal 函数生成了包含两个高斯分布的3维样本数据集,其中一个高斯分布的均值为(-2, -2, -2),协方差矩阵为单位矩阵,另一个高斯分布的均值为(5, 5, 5),协方差矩阵为2倍的单位矩阵。

接下来,我们使用GaussianMixture类初始化了一个GMM模型,指定了要拟合的簇数为2,协方差矩阵类型为’full’。

然后,我们训练GMM模型,调用fit方法对样本数据进行拟合,得到模型参数,包括每个高斯分布的均值、协方差矩阵和权重,调用predict方法预测每个样本所属的簇。

最后,我们可视化结果,创建一个3D图形窗口,并将每个簇的样本数据用散点图表示出来。然后,对于每个高斯分布,使用其均值和协方差矩阵构造协方差椭球,并绘制在图中,以表示高斯分布的形状。最后,将每个高斯分布的均值用星号标记出来,以便于观察。

图片

代码可视化输出

在 Jupyter Notebook 中运行代码,从输出的可视化3D结果可以看出,GMM算法成功地将数据聚类为两个簇,并较好地捕捉到了每个簇的分布特征。

GMM模型的主要优点是能同时进行聚类和概率密度估计,可以较好地拟合非高斯分布的数据。

但它也存在一些缺陷,例如对离群点敏感、需要预先指定成分数等。

通过调整协方差类型、增加稳健性等策略,可以进一步提升GMM的性能。

总的来说,GMM是一种在聚类、异常检测、信号处理等领域都有广泛应用的无监督学习算法。

得益于其能自动从原始数据挖掘隐藏知识的强大能力,无监督学习在诸多行业得到了广泛的应用,包括但不限于:生物信息学、金融、零售、网络安全、推荐系统等。

无监督学习还是构建通用人工智能(AGI)的关键技术之一。

随着算力和数据的不断增长,无监督学习无疑将在未来发挥越来越重要的作用,让人工智能系统能像人类一样,从海量原始数据中自主探索和学习,发现更多隐藏的规律和知识。

正是凭借这种"隐形探索者"般的能力,无监督学习将持续为各行业的大数据分析和决策注入新的活力,实现AI赋能、释放数据金矿的真正价值。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、资源详解 计算机类书籍:操作系统、计算机网络、计算机组成原理、汇编语言、C语言、C++、Java、Python、Go、前端、算法与数据结构、大数据、人工智能、面试题 实验报告:通过实际操作与数据记录,让您深入理解计算机内部的工作原理。每份实验报告都详细记录了实验步骤、结果及分析,助您巩固知识点。 学习笔记:由资深学者精心整理的学习笔记,重点突出,为您梳理课程脉络,把握核心内容。 复习资料与试卷:涵盖了各类复习资料和历年试卷,助您备战考试,查漏补缺,提高应试能力。 作业答案:提供完整的作业答案及解析,让您在完成课后作业时更有信心,确保理解每一个知识点。 一二、计算机组成原理:从基础到进阶,全面突破的必备资源 在信息爆炸的时代,计算机组成原理作为计算机科学的核心课程,显得尤为重要。为了帮助广大学子更好地掌握这一关键领域,我们特地整理了这一系列与计算机组成原理相关的资源,助力您的学术旅程。 三、适用场景广泛 无论是期末考试冲刺、计算机组成原理实验报告作业、还是复习题、试题、考研资料等需求,这些资源都能满足您的要求。全面覆盖理论要点与实践操作,让您在学习和备考过程中游刃有余。 四、使用建议 系统学习:建议按照章节顺序进行系统学习,结合实验报告进行实践操作,以加深理解。 备考策略:利用复习资料与试卷资源,制定有效的备考计划,提高考试通过率。 持续反馈与改进:根据作业答案进行自我评估,找出薄弱环节,及时调整学习策略。 五、版权与安全提示 尊重知识产权:在使用这些资源时,请尊重原作者的权益,遵守版权法规。 安全使用:确保在使用过程中不侵犯他人权益,避免任何形式的学术不端行为。 感谢您选择我们的计算机组成原理资源库!让我们一起深入探索计算机的奥秘,用知识武装自己,开启精彩的学术之旅!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值