机器学习入门之无监督学习(聚类、降维(主成分分析)、关联度分析(Apriori 算法))

news2024/11/16 18:04:56

无监督学习是机器学习的一种类型,它处理没有显式标签的数据。与监督学习不同,无监督学习的目标是探索数据的内在结构和模式,而不是从标注数据中学习一个特定的映射到预定标签的函数。这使得无监督学习特别适用于探索性数据分析、找寻隐藏模式、数据压缩以及真实世界数据中的复杂结构。

无监督学习主要包括以下几种方法:

  1. 聚类:将数据集中的实例分组,使得同一组(或簇)内的实例彼此相似,而不同组的实例尽可能不相似。常见的聚类算法包括K-means、层次聚类、DBSCAN等。

  2. 关联规则学习:寻找大数据集中各项之间的有趣关系,如频繁项集、关联规则或因果结构。例如,在市场篮子分析中,可以用来找出顾客经常一起购买的商品组合。

  3. 降维:减少数据中的变量数量,以便更简洁地表达数据,同时尽量保留原始数据的信息。常用的降维技术包括主成分分析(PCA)、t-分布随机邻域嵌入(t-SNE)和自编码器。

  4. 异常检测:识别数据中的异常或离群点,这些点与大多数数据的行为显著不同。这在诸如欺诈检测、网络安全和故障检测等应用中非常重要。

一、K-means 与 K-mean++ 算法 

K-means 是一种常用的聚类算法,用于将数据点划分为预先指定数量的簇,使得每个簇内的数据点尽可能相似,簇间的数据点尽可能不同。它主要适用于数据量大且簇形状接近高维球体时的场景。

  1. 初始化:随机选择 K 个数据点作为初始中心(质心)。
  2. 分配:将每个数据点分配给最近的质心,形成 K 个簇。
  3. 更新:重新计算每个簇的质心(即簇中所有点的均值)。
  4. 迭代:重复步骤2和3,直到质心的变化小于某个阈值或达到预设的迭代次数,此时算法收敛。
K-means++ 的优化

K-means 的一个主要问题是初始质心的选择可能导致结果的局部最优而非全局最优,以及算法的收敛速度。K-means++ 是一种优化的初始化方法,旨在改善这些问题,从而提高聚类结果的质量和算法的稳定性。

  1. 选择第一个质心:随机从数据集中选择一个点作为第一个质心。
  2. 计算距离:对于数据集中的每一个点 xxx,计算其与最近质心的距离 D(x)D(x)D(x)。
  3. 选择下一个质心:选择一个新的数据点作为质心,选取概率与 D(x)2D(x)^2D(x)2 成正比。
  4. 重复步骤2和3:直到选择了 K 个质心。
优点
  • 减少依赖于初始点的选择:通过更加智能的初始点选择,减少算法对随机性的依赖,避免了一些较差的局部最优解。
  • 提高聚类质量:簇内误差平方和通常比标准 K-means 更小。
  • 增强稳定性:不同运行之间的结果更加稳定。

K-means 和 K-means++ 广泛应用于市场细分、社交网络分析、组织计算群体、图像分割、天文数据分析等多种领域。这种方法的关键在于选择合适的 K 值和适当的特征,这些选择对聚类的效果有很大影响。

总的来说,K-means++ 提供了对 K-means 初始条件敏感性的一个有效改进,使得聚类过程更加稳定和可靠。

实战
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)

# 创建KMeans模型,指定使用K-means++初始化
kmeans = KMeans(n_clusters=4, init='k-means++', random_state=42)

# 拟合模型
kmeans.fit(X)

# 预测类别
labels = kmeans.predict(X)

# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75)
plt.title('K-means++ Clustering')
plt.show()

 二、降维

降维是一种减少数据集中特征数量的技术,目的是简化数据处理和分析过程,同时尽量保留数据的重要信息。降维常用于处理高维数据集,可以帮助改善算法的性能和结果的可视化。

1)主成分分析(PCA)

主成分分析通过以下步骤来简化数据集:

标准化数据

首先对每个属性(特征)进行标准化处理,通常是使每个特征的平均值为0,标准差为1。这是为了消除不同尺度对计算的影响。

计算协方差矩阵

然后计算特征之间的协方差矩阵。协方差矩阵描述了数据中各个变量之间的相关性。

求解特征值和特征向量

对协方差矩阵进行特征分解,求解其特征值和对应的特征向量。特征向量代表了主成分的方向,而特征值代表了每个主成分的方差量,即该方向的重要性。

选择主成分

选择最大的几个特征值及其对应的特征向量。这些特征向量是数据在新空间中的基,被称为主成分。通常选择的主成分数量取决于累计贡献率,即前几个主成分的方差之和占总方差的比例。

构造新的特征空间

使用选定的主成分重新构造一个降维后的数据集。这是通过将原始数据投影到这些主成分上完成的。

  • PCA 通过正交变换将可能相关的高维变量转换成线性不相关的低维变量,称为主成分。
  • 主成分按照方差递减的顺序排列,第一个主成分具有最大的方差(信息量最大)。
  • PCA 常用于数据压缩、特征抽取和数据可视化。
    from sklearn.decomposition import PCA
    from sklearn.datasets import load_iris
    import matplotlib.pyplot as plt
    
    # 加载数据集
    data = load_iris()
    X = data.data
    y = data.target
    
    # 创建 PCA 模型,将数据降至 2 维
    pca = PCA(n_components=2)
    
    # 对数据进行降维处理
    X_pca = pca.fit_transform(X)
    
    # 可视化结果
    plt.figure(figsize=(8, 6))
    scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
    plt.xlabel('Principal Component 1')
    plt.ylabel('Principal Component 2')
    plt.colorbar(scatter)
    plt.title('PCA Result')
    plt.show()
    
2)线性判别分析(LDA)
  • LDA 是一种监督学习的降维技术,用于最大化类间距离和最小化类内距离。
  • 主要用于模式识别和机器学习领域,如人脸识别和信号分类。
3)t-分布随机邻域嵌入(t-SNE)
  • t-SNE 通过概率分布转换和优化技巧有效处理非线性降维问题,特别适合于高维数据的可视化。
  • 主要应用于数据可视化领域,如生物信息学和社交网络分析中的高维数据集。

三、关联规则学习

关联规则学习是一种在大数据集中寻找变量间有趣关系的方法。这些关系通常体现为“如果…那么…”的形式,广泛应用于购物篮分析、库存管理、生物数据分析等。

基本概念
  • 支持度:一个项集在所有交易中出现的频率。
  • 置信度:一条规则从条件部分推导出结论部分的可靠度。
  • 提升度:一个规则的条件部分和结论部分的独立性的度量。
  1. Apriori 算法

    • 逐层迭代地发现频繁项集,每一层基于前一层的频繁项集生成候选项集。
    • 利用先验知识,即频繁项集的所有非空子集也必须是频繁的,以减少需要检查的项集数量。
  2. FP-Growth 算法

    • 使用FP树(频繁模式树)结构来存储数据集的压缩表示,然后通过递归方式来挖掘频繁项集。
    • 比Apriori更高效,因为它不需要产生候选项集。

降维和关联规则学习在许多领域都有广泛应用:

  • 降维技术通常用于数据预处理,以减轻计算负担,改善其他机器学习算法的性能或数据可视化。
  • 关联规则用于零售和市场分析(如确定不同产品间的关联,优化产品布局和营销策略),生物信息学(如基因表达分析),以及推荐系统(如根据用户行为推荐产品)。
    import pandas as pd
    from mlxtend.preprocessing import TransactionEncoder
    from mlxtend.frequent_patterns import apriori, association_rules
    
    # 示例数据集
    dataset = [['Milk', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
               ['Dill', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
               ['Milk', 'Apple', 'Kidney Beans', 'Eggs'],
               ['Milk', 'Unicorn', 'Corn', 'Kidney Beans', 'Yogurt'],
               ['Corn', 'Onion', 'Onion', 'Kidney Beans', 'Ice cream', 'Eggs']]
    
    # 使用TransactionEncoder转换数据
    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']])
    

这两种技术虽然应用场景不同,但都是理解和挖掘数据中模式的重要工具。

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

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

相关文章

关于加载水印PDF、图片以及压缩包格式文件【把博客当工作记录】

写这篇文章的目的是让大家都可以学到东西,核心代码中列出了处理思维和调用方法,业务代码已经过滤掉了,希望大家不要做crud程序员!!要思考。。。该博客不懂时可联系下方。 1、流程图如下 2、策略描述 实现方式: 设计模式:父策略调动子策略 业务理念:在不影响原有业务…

【电脑基础硬件】从零开始认识主板

从零开始认识主板 一、主板及其元器件二、主板上的各个部件通信三、主板的选择 注意: 以下以Z790电脑主板为例进行说明。 一、主板及其元器件 IO接口: CPU模块 CPU是电脑的大脑,控制并指挥着电脑的各个模块协同工作。CPU通过主板上的插槽固定…

电路中电阻,电容和电感作用总结

电阻作用 1,上拉电阻 电阻的连接一般是一端接上拉的电源(一般与芯片信号的电压值相匹配),另一端连接芯片引脚所对应的信号大概如下图 功能:一、预置某些引脚的功能,例如复位信号拉高(失能&…

疯传!平台培养“斗士”的背后,是 AI 智能名片与 O2O 商城小程序在搞鬼

摘要:本文探讨了在搭建用户聚集平台以筛选和培养“斗士”的过程中,如何融入 AI 智能名片和 O2O 商城小程序。详细阐述了贴吧或论坛作为初始平台的优势,以及如何通过适当的管理和引导活动筛选出“储备斗士”。同时,分析了 AI 智能名…

浅谈 Mybatis 框架

文章目录 一、什么是MyBatis?1.2、JDBC 二、使用Mybatis2.1、配置MyBatis开发环境2.1.1、配置连接字符串2.1.2、配置MyBatis中的XML路径 2.2、使用MyBatis模式和语法操作数据库 三、使用 Mybatis 进行增删改查操作的要点3.1、ResultMap的用法 四、Mybatis操作难点4.1、#{ } 和…

Modbus-TCP详解

目录 Modbus-TCP Modbus TCP协议的帧结构如下: 实现Modbus-Tcp 使用EasyModbusTCP第三方实现Modbus-Tcp EasyModbusTCP的使用 设置IP 设置端口 设置设备地址 开启通讯 读取寄存器 写入寄存器 实例 Modbus-TCP Modbus TCP是Modbus协议的一种变体,它使用T…

Java多线程的单例设计模式 多种实现方法

目录 前言 饿汉式 懒汉式 Double_check volatile double_check Holder方式 枚举 前言 单例设计模式GOF23中设计模式中最常用的设计模式之一, 单例设计模式提供了多线程环境下的保证唯一实例性的解决方案, 虽然简单, 但是实现单例模式的方式多种多样, 因此需要从多个维度去…

【云原生】恰当运用kubernetes中三种探针,确保应用程序在Kubernetes集群中保持健康、可用和可靠

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Unity热更——ILRuntime安装接入

一、ILRuntime相关地址 1、官网文档地址 2、GitHub上开源的ILRuntime项目工程 3、GitHub上的官方ILRuntime-Unity实例工程 4、官方视频教程-Unity中文课堂(需付费) 5、ILRuntime入门笔记-赵青青-博客园 6、ILRuntime 的学习-简书 二、ILRuntime…

Python | Leetcode Python题解之第324题摆动排序II

题目&#xff1a; 题解&#xff1a; def quickSelect(a: List[int], k: int) -> int:seed(datetime.datetime.now())shuffle(a)l, r 0, len(a) - 1while l < r:pivot a[l]i, j l, r 1while True:i 1while i < r and a[i] < pivot:i 1j - 1while j > l an…

自动生成数据:Navicat 16 让数据测试更高效

文章目录 前言一、Navicat是什么&#xff1f;二、Navicat 16 新功能1. 自动生成数据2. 改进的用户界面3. 云同步 三、 安装指南Windows 版安装macOS 版安装Linux 版安装 四、使用示例&#xff1a;自动生成数据1. 创建连接2. 选择表3. 打开数据生成器4. 设置数据规则5. 生成数据…

top命令实时监测Linux进程

top命令可以动态实时显示Linux进程信息&#xff0c;方便观察频繁换进换出的内存的进程变化。 top命令执行示例如下&#xff1a; 其中&#xff0c;第一行表示系统当前时间、系统的运行时间、登录的用户数目、系统的平均负载&#xff08;最近1分钟&#xff0c;最近5分钟&#xff…

springboot艺体培训机构业务管理系统--论文源码调试讲解

第2章 开发环境与技术 开发艺体培训机构业务管理系统需要搭建编程的环境&#xff0c;也需要通过调查&#xff0c;对各个相关技术进行分析&#xff0c;选取适合本系统开发的技术与工具。 2.1 MySQL数据库 MySQL是一种具有安全系数、安全系数、混合开发性、高效化等特征的轻量…

基于Raft算法的分布式KV数据库:五、剩余部分

github地址&#xff1a;https://github.com/1412771048/Raft CPPRaft系列-剩余部分 首先我们看下第五章的架构图&#xff0c;图中的主要部分我们在前几张讲解完毕了&#xff0c;目前还剩下clerk和k-v数据库&#xff0c;而本篇的重点在于补全版图&#xff0c;完成&#xff1a;…

SQL注入sqli-labs-master关卡一

本文环境搭建使用的是小皮&#xff0c;靶机压缩包&#xff1a;通过百度网盘分享的文件&#xff1a;sqli-labs-php7-master.zip 链接&#xff1a;https://pan.baidu.com/s/1xBfsi2lyrA1QgUWycRsHeQ?pwdqwer 提取码&#xff1a;qwer 下载解压至phpstudy的WWW目录下即可。 第一…

关于Redis的面试题

一、为什么要使用Redis 内存数据库,速度很快工作单线程worker,串行化,原子操作,IO线程是多线程的。避免上下文切换使用 IO模型,天生支撑高并发kv模型,v具有类型结构具有本地方法,计算数据移动二进制安全,value值最大为512MB二、Redis是多线程还是单线程 Redis在6.0版本…

(免费领源码)java#SSM#MYSQL私家车位共享APP 51842-计算机毕业设计项目选题推荐

目 录 摘要 1 绪论 1.1 课题的研究背景 1.2研究内容与研究目标 1.3ssm框架 1.4论文结构与章节安排 2 2 私家车位共享APP系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1功能性分析 2…

计算机网络(TCP报文段首部格式中序号和确认号)

TCP首部格式中的序号和确认号并不总是同时出现。 TCP首部的序号和确认号是根据TCP通信的不同阶段和目的来决定的。在建立连接的过程中&#xff0c;序号用于标识发送数据的起始位置&#xff0c;而确认号用于表示接收方期望接收的下一个数据的起始位置。这两个字段在TCP通信的不同…

【vulhub靶场之rsync关】

一、使用nmap模块查看该ip地址有没有Rsync未授权访问漏洞 nmap -p 873 --script rsync-list-modules 加IP地址 查看到是有漏洞的模块的 二、使用rsync命令连接并读取文件 查看src目录里面的信息。 三、对系统中的敏感文件进行下载——/etc/passwd 执行命令&#xff1a; rsy…

【Python】Python中的循环语句

循环语句 导读一、基本概念1.1 循环语句的执行流程1.2 循环语句的分类 二、while语句三、for语句四、break与continue五、死循环六、循环中的else语句七、range()函数结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 在上一篇内容中我…