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

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

机器学习基础(三)监督学习的进阶探索-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位置未更新无返回…

【Linux】Linux调试器-gdb使用

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

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

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

笔记: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…

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? 所有的网络都忽略了物体的实际大小,而关注他们的垂直…

WEB APIs (4)

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

搜索专项---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, …

2024 高级前端面试题之 计算机通识(基础) 「精选篇」

该内容主要整理关于 计算机通识&#xff08;基础&#xff09; 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 计算机基础精选篇 一、网络1.1 UDP1.2 TCP1.3 HTTP1.4 DNS 二、数据结构2.1 栈2.2 队列2.3 链表2.4 树2.5 堆 三、算法3.1 时…

使用 Nuxt 构建简单后端接口及数据库数据请求

写在前面 本文主要为大家介绍&#xff0c;如何使用 Nuxt 框架实现一个简单的后端接口&#xff0c;并且从数据库中请求数据返回给前端。 实现 创建 serverMiddleware 文件夹 首先我们新建一个名字为 serverMiddleware 文件夹用来存储接口相关信息 目录结构如下&#xff1a;…

汽车电子论文学习--电动汽车电机驱动系统动力学特性分析

关键重点&#xff1a; 1. 汽车的低速转矩存在最大限制&#xff0c;受附着力限制&#xff0c;因路面不同而变化。 2. 起步加速至规定转速的时间可以计算得到&#xff1a; 3. 电机额定功率的计算方式&#xff1a; 可以采取最高设计车速90%或120km/h匀速行驶的功率作为电机额定功…

如何区分期权,很简单WeTrade众汇教你两招

二元期权有许多变体&#xff0c;很多投资者难以区分外汇和二元期权&#xff0c;很简单WeTrade众汇教你两招1秒快速区分&#xff0c;我们可以根据这两个最重要的参数进行区分: 1)合同类型的范围 只有一种外汇合约。当然&#xff0c;你可以交易货币对、差价合约、商品或证券&am…

脉冲电流源测试旁路二极管热性能方案

热斑效应&#xff1a;太阳能电池一般是由多块电池组件串联或并联起来。串联支路中可能由于电池片内部缺陷或者外部遮挡&#xff0c;将被当作负载消耗其他有光照的太阳电池组件所产生的能量。被遮蔽的太阳电池组件此时会严重发热而受损。 旁路二极管&#xff1a;是指并联于太阳能…

Nginx 403 forbidden

1、没有权限问题 Linux系统中如果Nginx没有web目录的操作权限&#xff0c;也会出现403错误。解决办法&#xff1a;修改web目录的读写权限&#xff0c;或者是把Nginx的启动用户改成目录的所属用户&#xff0c;重启Nginx即可解决。(windows 下则用管理员启动nginx即可)。 chmod -…

Android全新UI框架之Jetpack Compose入门基础

Jetpack Compose是什么 如果有跨端开发经验的同学&#xff0c;理解和学习compose可能没有那么大的压力。简单地说&#xff0c;compose可以让Android的原生开发也可以使用类似rn的jsx的语法来开发UI界面。以往&#xff0c;我们开发Android原生页面的时候&#xff0c;通常是在xml…

第2.4章 StarRocks表设计——分区分桶与副本数

目录 一、数据分布 1.1 概述 1.2 数据分布方式 1.2.1 Round-Robin 1.2.2 Range 1.2.3 List 1.2.4 Hash 1.3 StarRocks的数据分布方式 1.3.1 不分区 Hash分桶 1.3.2 Range分区Hash分桶 三、分区 3.1 分区概述 3.2 创建分区 3.2.1 手动创建分区 3.2.2 批量创建分区…

OJ_不连续1的子串

题干 C实现 #include<iostream> using namespace std;int f0(int n); int f1(int n);int main() {int n;cin >> n;cout << f0(n) f1(n);return 0; }int f0(int n) {//末尾为0的串if (n 1) {return 1;}else {return f0(n - 1) f1(n - 1);} } int f1(int n…