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

news/2024/7/24 2:45:01 标签: 机器学习, 学习, 人工智能

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

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

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

-----------------

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


http://www.niftyadmin.cn/n/5384883.html

相关文章

SOPHON算能科技新版SDK环境配置以及C++ demo使用过程

目录 1 SDK大包下载 2 获取SDK中的库文件和头文件 2.1 注意事项 2.2 交叉编译环境搭建 2.2.1 首先安装工具链 2.2.2 解压sophon-img包里的libsophon_soc__aarch64.tar.gz,将lib和include的所有内容拷贝到soc-sdk文件夹 2.2.3 解压sophon-mw包里的sophon-mw-s…

Oracle中TimeStamp和Date的区别

在Oracle数据库中,DATE和TIMESTAMP数据类型都是用于存储日期和时间信息,但它们之间有几个重要的区别: 精度不同: DATE数据类型能存储日期和时间到秒的精度,格式通常是YYYY-MM-DD HH24:MI:SS,并且它总是包含…

ONLYOFFICE 8.0:引领数字化办公新纪元

目录 前言 软件安装 软件启动 软件新版本特性 个人评价 总结 前言 在当今快节奏的数字化世界中,高效的办公软件已成为企业竞争力的关键因素。ONLYOFFICE,作为全球领先的办公解决方案提供商,始终致力于通过技术创新来优化用户体验。如今…

el-button 选择与非选择按钮批量处理

el-button 选择与非选择按钮批量处理 <el-button v-for"(voyage,i) in data[voyages][nowVoyage]":key"i"class"c-work-bts"type"primary":plain"nowWorkSpace!i"click"chooseWorkSpace(i)"size"small&qu…

时间获取、文件属性获取 2月20日学习笔记

执行两次代码&#xff0c;打印出两次执行过程中新增的文件及删除的文件 #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <dirent.h>#def…

Day 30 标准IO

文章目录 1.什么是标准IO1.1 概念1.2 特点1.3 操作 2.缓存区3.函数接口3.1 打开文件fopen3.2 关闭文件 fclose3.3 读写文件操作3.3.1 每次读写一个字符&#xff1a;fgetc()、fputc()每次读一个字符fgetc()每次写一个字符fputc()(1)针对文件(2)针对终端feof和ferror 3.3.2 每次一…

ELK入门(二)- springboot整合ES

springboot整合elasticsearch 引用依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…

BUUCTF crypto做题记录(7)新手向

一、Dangerous RSA 得到的密文如下 首先&#xff0c;我们对n进行大数分解看行不行。 其次&#xff0c;我们可看一下数的特征&#xff08;除了一些基础题&#xff0c;一般情况下n都是分解不了的&#xff0c;应该首先观察一下数据特征&#xff0c;我很久没做RSA了&#xff0c;有…