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

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

机器学习基础(三)监督学习的进阶探索-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​​​​​​​-----------------

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】vector模拟实现+迭代器失效

vector模拟实现 成员变量定义默认成员函数构造函数 迭代器范围for、对象类型匹配原则 容量操作sizeemptycapacityreserve成员变量未更新memcpy值拷贝 resize内置类型的构造函数 数据访问frontbackoperator[ ] 数据修改操作push_backpop_backswapclearinsertpos位置未更新无返回…

解决缓存失效导致的数据库压力问题(缓存击穿问题)

问题描述 在软件开发过程中,特别是在使用缓存策略优化数据访问性能时,经常会遇到缓存失效引发的问题。具体来说,在一个服务类BaseDataService中,findData方法负责从数据库拉取数据并缓存。这里使用了expireAfterWrite60s的缓存策…

【Linux】Linux调试器-gdb使用

1. 背景 程序的发布方式有两种,debug模式和release模式 Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 2. 开始使用 gdb binFile 退出: ctrl d 或 quit 调…

新建一个flask项目

在Flask中创建一个新的项目,您可以遵循以下步骤: 确保您已经安装了Python环境。如果还未安装Flask,可以通过pip来安装: pip install flask创建一个新的文件夹作为您的项目文件夹,例如myflaskapp: mkdir …

Java 学习和实践笔记(15):面向过程和面象对象其实很简单!

学完这一节,才真正明白了什么叫面向对象和面向过程,其实很简单~ 第一个例子:怎样把大象装进冰箱 这个很清楚很容易地可以列出第一步。 第二个例子:怎样制造一台汽车 这个就很难确定哪一步做第一步。 面向过程和面向对象的区别 …

echarts折线图单位为Bit/s的数据展示

需求:单位为Bit/s的数据需要换算y轴、legend和tooltip的单位; 显示数据时需要换算单位是因为数据以比特每秒(Bit/s)的形式返回,但是在实际展示中,可能更方便和易读的是使用其他单位,例如Gb/s、M…

8 磁盘存储器的管理

外存的组织方式 连续组织方式:为每一个文件分配一组相邻接的盘块 链接组织方式:多个不连续的盘块 链接指针 隐式链接 显示链接:文件分配表FAT FAT技术: FAT12(512B)、以簇为单位的FAT12文件系统、FAT16、…

笔记:torch.roll

最近在准备写 swin transformer 的文章,记录下 torch.roll 的用法: >>> x torch.tensor([1, 2, 3, 4, 5, 6, 7, 8]).view(4, 2) >>> x tensor([[1, 2],[3, 4],[5, 6],[7, 8]]) 第0维度向下移1位,多出的[7,8]补充到顶部 &g…

【移动开发】iOS平台 Java编译器 Jedona Compiler 评测

上期编译器评测链接: Java Compiler IDE评测 一、使用平台 该编译器(Jedona Compiler)在苹果应用市场App Store中下载,笔者使用iPad进行Java代码编写。 应用市场界面: 二、开发界面介绍 开发界面比较简洁&#xf…

【JGit 】简述及学习资料整理

JGit 介绍 [官网](JGit | The Eclipse Foundation): https://www.eclipse.org/jgit/ 用户指南 : https://github.com/eclipse-jgit/jgit/wiki/User-Guide JGit是一个用于Java编程语言的开源Git实现。它提供了一组Java库和API,使开发人员可以在他们的Java应用程序…

python 与 neo4j 交互(py2neo 使用)

参考自:neo4j的python.py2neo操作入门 官方文档:The Py2neo Handbook — py2neo 2021.1 安装:pip install py2neo -i https://pypi.tuna.tsinghua.edu.cn/simple 1 节点 / 关系 / 属性 / 路径 节点(Node)和关系(relationship)是构成图的基础…

重磅!移远通信正式发布一站式XR产品解决方案,助力探索数字世界新纪元

伴随着以5G、大数据、云计算等现代化信息科技的发展,人类对数字世界、智慧地球的探索更加深入。尤其是以XR(扩展现实)为代表的技术崛起,更让物理世界与虚拟世界中的连接愈发紧密,千行百业也亟待新探索。 近日&#xff…

计算机组成原理(4)-----Cache的原理及相关知识点

目录 1.Cache的原理 2.Cache的性能 3.Cache和主存的映射方式 (1)全相联映射 (2)直接映射 (3)组相联映射 4.替换算法 (1)随机算法(RAND) (2)先进先出算法(FIFO) (3)近期最少使用(LRU) (4)最近不经…

论文阅读:How Do Neural Networks See Depth in Single Images?

是由Technische Universiteit Delft(代尔夫特理工大学)发表于ICCV,2019。这篇文章的研究内容很有趣,没有关注如何提升深度网络的性能,而是关注单目深度估计的工作机理。 What they find? 所有的网络都忽略了物体的实际大小,而关注他们的垂直…

使用 openssl 进行哈希计算

版本&#xff1a;OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022) SHAx 系列 如果对象完全存储在内存中&#xff0c;可以使用以下函数&#xff1a; #include <openssl/sha.h>unsigned char *SHA1(const unsigned char *data, size_t count, unsigned…

C#_WaitAll、WhenAll、async及await

Task.WhenAll、Task.WaitAll Task.WhenAll 和 Task.WaitAll 都是用于等待多个任务完成的方法&#xff0c;但它们之间有一些重要的区别。 返回类型: Task.WhenAll: 返回一个 Task 对象&#xff0c;该对象表示所有输入任务的联合任务。 Task.WaitAll: 没有返回值。它是一个同步方…

WEB APIs (4)

日期对象 实例化 代码中出现new关键字&#xff0c;创建时间对象 得到当前时间&#xff1a; const date new Date&#xff08;&#xff09; 获得指定时间&#xff1a; const date new Date&#xff08;‘2022-5-1’&#xff09; 方法作用说明getFullYear()获取年份获取…

前端算法题——字符串中的第一个唯一字符

前言 给定一个字符串&#xff0c;找到它的第一个不重复的字符&#xff0c;并返回它的索引。如果不存在&#xff0c;则返回 -1。 示例&#xff1a;s "leetcode" 返回 0s "loveleetcode" 返回 2// 提示&#xff1a;你可以假定该字符串只包含小写字母思路…

搜索专项---DFS之连通性模型

文章目录 迷宫红与黑 一、迷宫OJ链接 本题思路:DFS直接搜即可。 #include <iostream> #include <cstring> #include <algorithm>constexpr int N110;int n; char g[N][N]; bool st[N][N]; int x1, y1, x2, y2;int dx[4] {-1, 0, 1, 0}, dy[4] {0, 1, 0, …

Python学习笔记——自定义函数(将函数存储在模块中及总结)

编写函数不仅可以做到代码复用&#xff0c;使用函数的一个特别好的优点是可将代码块与主程序分离。另外&#xff0c;不仅可以通过给函数指定描述性的名称&#xff0c;能让程序容易理解&#xff0c;还可以把函数存储在成为模块的独立文件中&#xff0c;再将模块导入&#xff08;…