当前位置: 首页 > news >正文

机器学习基础(四)非监督学习的进阶探索

  导语:上一节我们详细探索监督学习的进阶应用,详情可见:

机器学习基础(三)监督学习的进阶探索-CSDN博客文章浏览阅读296次,点赞13次,收藏11次。监督学习作为机器学习的一个主要分支,专注于从带有标签的数据中学习和建立预测模型。这些模型可以预测新数据的标签,广泛应用于各种行业和领域,从简单的邮件分类到复杂的医疗诊断。https://blog.csdn.net/qq_52213943/article/details/136173870?spm=1001.2014.3001.5501        这一节,我们将详细探索非监督学习的进阶应用。

目录

非监督学习

聚类算法

K-均值聚类(K-Means Clustering)

层次聚类(Hierarchical Clustering)

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)

聚类算法的比较

降维概述

主成分分析(PCA)

线性判别分析(LDA)

t-分布随机邻域嵌入(t-SNE)

降维技术的比较

关联规则学习

关键概念

常用算法

应用实例


非监督学习

        非监督学习像一位探险家,挖掘未标记数据的未知领域。它不依赖预先定义的类别或标签,而是试图揭示数据自身的结构和关系。这种学习方式在处理复杂数据集时尤其有价值,因为它能发现人类可能未曾预见的模式和联系。

聚类算法

        聚类算法是一种重要的非监督学习技术,它旨在将数据集中的样本分组成若干个簇,使得同一簇内的样本相似度高,而不同簇内的样本相似度低。聚类在许多领域中都有广泛应用,如市场细分、社交网络分析、计算生物学以及图像分割等。

K-均值聚类(K-Means Clustering)

        K-均值是最流行的聚类算法之一,因其简单高效而广泛应用。算法通过迭代过程将数据分为K个簇,每个簇由其质心(簇内点的平均值)定义。K-均值的主要挑战在于K值的选择,这通常需要领域知识或使用如肘部法则(Elbow Method)等技术来确定。

层次聚类(Hierarchical Clustering)

        层次聚类通过创建一个簇的层次结构来进行聚类,可以是自底向上的聚合方法(也称为凝聚聚类),或是自顶向下的分裂方法。凝聚聚类开始时将每个数据点视为一个独立的簇,然后逐渐合并为更大的簇,直到达到所需的簇数量或满足某个终止条件。层次聚类不需要预先指定簇的数量,且可以通过树状图(Dendrogram)直观地展示簇是如何合并或分裂的。

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)

        DBSCAN是一种基于密度的聚类算法,能够识别出任意形状的簇,并且能够处理噪声和孤立点。它的核心概念是核心点、边界点和噪声点。算法通过查找被低密度区域分隔的高密度区域来形成簇。DBSCAN的优点是不需要预先指定簇的数量,且对于簇的形状和大小具有较好的适应性。

聚类算法的比较

  • K-均值
    • 优点:计算效率高,实现简单。
    • 缺点:需要预先指定簇的数量;对噪声和异常值敏感;假设簇是凸形和相似大小。
  • 层次聚类
    • 优点:不需要预先指定簇的数量;可以通过树状图直观展示聚类过程。
    • 缺点:计算复杂度较高,不适合大规模数据集;结果可能受初始数据点顺序的影响。
  • DBSCAN
    • 优点:不需要预先指定簇的数量;可以识别任意形状的簇,对噪声有较好的鲁棒性。
    • 缺点:对参数选择敏感;在密度差异较大的数据集中表现不佳。

        聚类算法是探索数据内在结构的强大工具,每种算法都有其独特的优势和适用场景。选择合适的聚类算法需要考虑数据的特性、应用场景的需求以及算法的限制。通过实践应用和结果可视化,我们可以更深入地理解聚类算法在解决实际问题中的作用和价值。下面是一个使用K-均值聚类的Python示例:

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import pandas as pd# 假设data是包含特征的DataFrame
data = pd.DataFrame({'Feature1': [1.0, 1.5, 3.0, 5.0, 3.5, 4.5, 3.5],'Feature2': [1.0, 2.0, 4.0, 7.0, 5.0, 5.0, 4.5]
})# 应用K-均值聚类
kmeans = KMeans(n_clusters=2)  # 假设我们将数据分为2个簇
kmeans.fit(data)# 可视化聚类结果
plt.scatter(data['Feature1'], data['Feature2'], c=kmeans.labels_, cmap='rainbow')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('K-Means Clustering')
plt.show()

降维概述

        降维是非监督学习中的一种重要技术,用于减少数据集的特征数量,同时尽可能保留原始数据的重要信息。这一过程对于处理高维数据集尤其重要,因为高维数据不仅增加了计算的复杂性,还可能引入噪声,导致模型性能下降(这一现象被称为“维度的诅咒”)。通过降维,我们可以提高数据处理的效率,改善模型的性能,并且使数据的可视化变得更加直观。

主成分分析(PCA)

        主成分分析(PCA)是最常用的降维技术之一。它通过线性变换将数据转换到新的坐标系统中,使得任何投影数据的第一大方差位于第一个坐标(称为第一主成分),第二大方差位于第二个坐标,依此类推。PCA能够揭示数据中的内在结构,减少冗余信息,而且通常用于数据预处理、数据可视化或准备数据以供后续的机器学习任务使用。

线性判别分析(LDA)

        线性判别分析(LDA)不仅是一种降维技术,也是一种分类方法。与PCA不同,LDA在降维时考虑了类别标签,目标是最大化不同类别之间的距离,同时最小化同一类别内的距离。这使得LDA成为一种监督学习技术,适用于分类问题中的特征降维。

t-分布随机邻域嵌入(t-SNE)

        t-SNE是一种非常有效的高维数据降维技术,尤其适用于数据可视化。它通过将高维数据中的相似对象转换为在低维空间中紧密聚集的点,而将不相似的对象转换为在低维空间中相距较远的点,从而保留了数据的局部结构。t-SNE非常适合于将高维数据降至2维或3维以便进行可视化。

降维技术的比较

  • PCA
    • 优点:去除数据冗余,降低数据复杂度,便于数据可视化和解释。
    • 缺点:基于线性假设,可能无法识别复杂的非线性关系。
  • LDA
    • 优点:在考虑类别信息的情况下最大化类别可分性,适用于监督学习。
    • 缺点:依赖于数据的线性可分性假设,对于非线性数据可能效果不佳。
  • t-SNE
    • 优点:能够揭示数据的局部结构,特别适合于数据可视化。
    • 缺点:计算成本高,难以解释,可能对超参数敏感。

        降维技术在数据预处理、特征工程和数据可视化中扮演着重要角色。通过合理选择和应用降维方法,我们可以更有效地处理和分析数据,揭示数据的内在结构,同时减轻后续机器学习模型的计算负担。在实际应用中,选择合适的降维技术需要考虑数据的特性、任务的需求以及技术的优缺点。以下是使用PCA进行降维的Python示例:

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import pandas as pd# 假设data是包含多个特征的DataFrame
data = pd.DataFrame({'Feature1': [1.0, 1.5, 3.0, 5.0, 3.5, 4.5, 3.5],'Feature2': [1.0, 2.0, 4.0, 7.0, 5.0, 5.0, 4.5],'Feature3': [2.0, 3.5, 2.0, 5.0, 4.0, 5.0, 3.5]
})# 应用PCA进行降维
pca = PCA(n_components=2)  # 将数据降至2维
reduced_data = pca.fit_transform(data)# 可视化降维结果
plt.scatter(reduced_data[:, 0], reduced_data[:, 1])
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA Result')
plt.show()

关联规则学习

        除了上面所说的两种外,处理未标记数据并试图发现数据内在结构或模式的机器学习方法还有一个,就是关联规则学习,它是一种重要的数据挖掘技术,用于发现数据集中变量之间的有意义的关系。这种技术通常用于事务数据集,如零售市场的购物篮分析,以发现不同物品之间的关联性。关联规则的典型例子是“如果购买了物品A(如啤酒),则也可能购买物品B(如薯片)”。这种分析有助于零售商理解顾客的购买行为,从而优化产品布局、库存管理和促销策略。

关键概念
  • 支持度(Support):一个项集(如啤酒和薯片组合)在所有交易中出现的频率。
  • 置信度(Confidence):在包含项集A(如啤酒)的交易中,项集B(如薯片)也出现的条件概率。
  • 提升度(Lift):规则的置信度与项集B(如薯片)的支持度之比。提升度表明了项集A的出现对项集B出现概率的增加程度。
常用算法
  • Apriori算法:是最著名的关联规则挖掘算法之一。它通过迭代方式发现频繁项集,先找出频繁的单个项,然后是频繁的项对,接着是三项的组合,以此类推。Apriori算法利用了频繁项集的性质:一个项集如果是频繁的,那么它的所有子集也都是频繁的。
  • FP-growth算法:是一种用于发现数据集中频繁模式的有效方法。与Apriori相比,FP-growth的性能通常更优,因为它只需要对数据库进行两次扫描,并使用一种称为FP树(频繁模式树)的数据结构来存储数据集的压缩表示。
应用实例

        在超市购物篮分析中,关联规则学习可以揭示哪些产品常常一起被购买。这些信息可以用来指导许多商业决策,如:

  • 产品布局:将经常一起购买的产品放置在相邻位置,以增加交叉销售的机会。
  • 销售促销:如果两个产品经常一起购买,对其中一个产品进行促销可能会增加另一个产品的销量。
  • 库存管理:了解哪些产品组合是受欢迎的,可以帮助更有效地管理库存。

使用Apriori算法进行关联规则学习的Python示例:

from mlxtend.frequent_patterns import apriori, association_rules
from mlxtend.preprocessing import TransactionEncoder
import pandas as pd# 示例数据集,表示购物篮中的商品
dataset = [['Milk', 'Bread', 'Beer'],['Milk', 'Bread'],['Bread', 'Beer'],['Milk', 'Eggs'],['Bread', 'Eggs']]# 将数据集转换为适合机器学习模型的格式
te = TransactionEncoder()
te_ary = te.fit(dataset).transform(dataset)
df = pd.DataFrame(te_ary, columns=te.columns_)# 使用Apriori算法找出频繁项集
frequent_itemsets = apriori(df, min_support=0.6, use_colnames=True)# 生成关联规则
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7)# 显示关联规则
print(rules[['antecedents', 'consequents', 'support', 'confidence', 'lift']])

下一节我们将进行监督与非监督学习的结合探索

机器学习基础(五)监督与非监督学习的结合-CSDN博客文章浏览阅读4次。将监督学习和非监督学习结合起来,就像将两种不同的艺术形式融合,创造出全新的作品。这种结合利用了两种学习方法的优点,能够处理更复杂的数据集,并提高模型的准确性和泛化能力。https://blog.csdn.net/qq_52213943/article/details/136214916?spm=1001.2014.3001.5502​​​​​​​-----------------

以上,欢迎点赞收藏、评论区交流

相关文章:

  • Nginx基础入门
  • 10、内网安全-横向移动域控提权NetLogonADCSPACKDC永恒之蓝
  • GPT-SoVITS-WebUI 克隆声音 macos搭建
  • 计算机组成原理(4)-----Cache的原理及相关知识点
  • 解决vscode每次git pull/push都需要输入账号密码
  • 软件测试面试常见问题【含答案】
  • java异常处理设计
  • Docker之MySQL8安装、容器数卷挂载、数据库导入导出操作
  • Resolving Low-Level Graphics Issues
  • 我为什么不喜欢关电脑?
  • 【深度学习每日小知识】交并集 (IoU)
  • Python+ddt+Excel实现接口自动化测试生成完美测试报告
  • SpringBoot+WebSocket实现即时通讯(一)
  • 移除数组中的元素
  • 小程序缓存封装 storage
  • 【译】理解JavaScript:new 关键字
  • 2017 前端面试准备 - 收藏集 - 掘金
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CSS实用技巧干货
  • iOS | NSProxy
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java基本数据类型之Number
  • MYSQL 的 IF 函数
  • node-glob通配符
  • Node项目之评分系统(二)- 数据库设计
  • October CMS - 快速入门 9 Images And Galleries
  • vuex 笔记整理
  • 对象引论
  • 前端js -- this指向总结。
  • 前端设计模式
  • 如何在GitHub上创建个人博客
  • 三分钟教你同步 Visual Studio Code 设置
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • PostgreSQL之连接数修改
  • 阿里云服务器如何修改远程端口?
  • 关于Android全面屏虚拟导航栏的适配总结
  • 回归生活:清理微信公众号
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​ssh免密码登录设置及问题总结
  • ​插件化DPI在商用WIFI中的价值
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (4)事件处理——(7)简单事件(Simple events)
  • (黑马C++)L06 重载与继承
  • (一)Dubbo快速入门、介绍、使用
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (原創) 物件導向與老子思想 (OO)
  • (转)EXC_BREAKPOINT僵尸错误
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .Family_物联网
  • .NET 事件模型教程(二)