【机器学习-23】关联规则(Apriori)算法:介绍、应用与实现

在现代数据分析中,经常需要从大规模数据集中挖掘有用的信息。关联规则挖掘是一种强大的技术,可以揭示数据中的隐藏关系和规律。本文将介绍如何使用Python进行关联规则挖掘,以帮助您发现数据中的有趣模式。

在这里插入图片描述

一、引言

1. 简要介绍关联规则学习的概念和重要性

关联规则学习是一种数据挖掘技术,旨在发现数据集中项之间的有趣关系。这些关系通常以“如果…那么…”的形式呈现,表示一种条件与结论的关联性。在商业分析中,关联规则学习常用于识别顾客购买行为中的模式,例如哪些商品经常被一起购买。通过发现这些模式,企业可以制定更有效的营销策略,提高销售额和客户满意度。

关联规则学习的重要性在于它能够从大量数据中提取出有价值的信息,帮助企业更好地理解客户行为和市场需求。这些信息不仅可以用于产品推荐、交叉销售等场景,还可以为企业的战略决策提供有力支持。

2. 引入Apriori算法,解释其在关联规则学习中的地位

在关联规则学习领域,Apriori算法是一种广泛应用的算法。它基于两个核心思想:频繁项集生成和剪枝策略。通过逐步生成和评估候选项集,Apriori算法能够有效地找出数据中的频繁项集和关联规则。由于其高效性和实用性,Apriori算法在关联规则学习中占据了重要地位。

Apriori算法的重要性在于它提供了一种有效的手段来发现数据中的关联关系。与其他算法相比,Apriori算法具有较低的计算复杂度和较高的准确性,使得它成为关联规则学习中的首选算法之一。

3. 阐述本文的目的和结构

本文旨在详细介绍Apriori算法及其在关联规则学习中的应用。首先,我们将对关联规则学习进行概述,阐述其基本概念和应用场景。接着,我们将深入介绍Apriori算法的原理和实现过程,包括频繁项集生成、剪枝策略以及算法优化等方面。最后,我们将通过案例研究来展示Apriori算法在实际应用中的效果和价值。

本文的结构如下:引言部分将介绍关联规则学习和Apriori算法的基本概念;关联规则学习概述部分将详细阐述关联规则学习的应用场景和主要挑战;Apriori算法介绍部分将深入探讨算法的原理和实现细节;Apriori算法的应用部分将通过案例研究来展示算法的实际应用效果;最后,总结与展望部分将对全文进行总结,并展望关联规则学习领域的未来发展方向。

二、关联规则学习概述

定义关联规则学习

关联规则学习是一种在大型数据集中寻找有趣关系的方法。这种关系通常表现为项集之间的强关联性,即如果某个项集(集合中的一组项)在数据集中频繁出现,那么另一个项集也很有可能随之出现。关联规则学习的主要目标是找出这样的项集,并生成形如“如果购买了A商品,那么也可能会购买B商品”的规则。

在关联规则学习中,通常使用支持度和置信度这两个指标来量化项集之间的关联性。支持度表示项集在数据集中出现的频率,而置信度则表示在给定一个项集出现的情况下,另一个项集也出现的概率。

关联规则学习的应用场景
  1. 市场篮子分析:关联规则学习在零售行业中有着广泛的应用,特别是在市场篮子分析方面。通过分析顾客的购买记录,可以发现哪些商品经常被一起购买,从而制定更有效的商品摆放策略、促销活动和交叉销售策略。

  2. 推荐系统:关联规则学习也被广泛应用于推荐系统中。通过分析用户的历史行为和偏好,可以找出用户可能感兴趣的物品或服务,并为其推荐相关的内容。这种推荐方式简单直观,且易于理解和实现。

  3. 网络日志分析:在网络安全和日志分析中,关联规则学习可以帮助发现异常行为和潜在的安全威胁。通过分析网络日志中的事件和模式,可以发现哪些事件之间存在关联,从而识别出可能的攻击行为或安全漏洞。

  4. 疾病诊断:在医疗领域,关联规则学习可以帮助医生发现疾病之间的关联性和潜在风险因素。通过分析病人的病历和诊断记录,可以发现哪些症状或疾病经常同时出现,从而为疾病的诊断和治疗提供有价值的参考。

关联规则学习的主要挑战
  1. 数据稀疏性:在大型数据集中,许多项集可能只出现一次或几次,导致支持度和置信度的计算变得不准确。此外,数据中的噪声和异常值也可能对关联规则的学习产生负面影响。

  2. 计算复杂性:关联规则学习需要计算所有可能项集的支持度和置信度,这可能导致计算量非常大。特别是在项集数量较多时,计算时间可能呈指数级增长。

  3. 规则解释性:生成的关联规则需要具有可解释性,以便用户能够理解和应用这些规则。然而,在某些情况下,生成的规则可能过于复杂或难以理解,这会影响其在实际应用中的效果。

  4. 规则冗余性:在生成的关联规则中,可能存在大量的冗余规则。这些规则在内容上相似或重复,但可能具有不同的支持度和置信度。如何有效地去除冗余规则并保留最有价值的规则是一个挑战。

三、关联规则中的一些概念

序号牛奶啤酒面包花生酱果冻
T110011
T200101
T301001
T410101
T511000
T601001
T711000
T811011
T911001
  • 一个样本称为一个“事务” ;上面的T1称为一个“事务
  • 每个事务由多个属性来确定,这里的属性称为“项” ,这里的 牛奶啤酒面包花生酱果冻 都“
  • 多个项组成的集合称为“项集
由k个项构成的集合
  • {牛奶}、{啤酒}都是1-项集;
  • {牛奶,果冻}是2-项集;
  • {啤酒,面包,牛奶}是3-项集
X==>Y含义:
  • X和Y是项集
  • X称为规则前项(antecedent)
  • Y称为规则后项(consequent)
事务仅包含其涉及到的项目,而不包含项目的具体信息。
  • 在超级市场的关联规则挖掘问题中事务是顾客一次购物所购买的商品,但事务中并不包含这些商品的具体信息,如商品的数量、价格等。
支持度(support):一个项集或者规则在所有事务中出现的频率,σ(X):表示项集X的支持度计数
  • 项集X的支持度:s(X)=σ(X)/N
  • 规则X==>Y表示物品集X对物品集Y的支持度,也就是物品集X和物品集Y同时出现的概率
  • 某天共有100个顾客到商场购买物品,其中有30个顾客同时购买了啤酒和尿布,那么上述的关联规则的支持度就是30%
置信度(confidence):确定Y在包含X的事务中出现的频繁程度。c(X → Y) = σ(X∪Y)/σ(X)
  • p(Y│X)=p(XY)/p(X)。
  • 置信度反应了关联规则的可信度—购买了项目集X中的商品的顾客同时也购买了Y中商品的可能性有多大
  • 购买薯片的顾客中有50%的人购买了可乐,则置信度为50%
(X , Y)==>Z :
交易ID购买的商品
1A,B,C
2A,C
3A,D
4B,E,F
  • 支持度:交易中包含{X 、 Y 、 Z}的可能性

  • 置信度:包含{X 、 Y}的交易中也包含Z的条件概率

设最小支持度为50%, 最小可信度为 50%, 则可得到 :

  • A==>C (50%, 66.6%)
  • C==>A (50%, 100%)
    若关联规则X->Y的支持度和置信度分别大于或等于用户指定的最小支持率minsupport和最小置信度minconfidence,则称关联规则X->Y为强关联规则,否则称关联规则X->Y为弱关联规则。
提升度(lift):物品集A的出现对物品集B的出现概率发生了多大的变化
  • lift(A==>B)=confidence(A==>B)/support(B)=p(B|A)/p(B)
  • 现在有** 1000 ** 个消费者,有** 500** 人购买了茶叶,其中有** 450人同时** 购买了咖啡,另** 50人** 没有。由于** confidence(茶叶=>咖啡)=450/500=90%** ,由此可能会认为喜欢喝茶的人往往喜欢喝咖啡。但如果另外没有购买茶叶的** 500人** ,其中同样有** 450人** 购买了咖啡,同样是很高的** 置信度90%** ,由此,得到不爱喝茶的也爱喝咖啡。这样看来,其实是否购买咖啡,与有没有购买茶叶并没有关联,两者是相互独立的,其** 提升度90%/[(450+450)/1000]=1** 。

由此可见,lift正是弥补了confidence的这一缺陷,if lift=1,X与Y独立,X对Y出现的可能性没有提升作用,其值越大(lift>1),则表明X对Y的提升程度越大,也表明关联性越强。
在这里插入图片描述#### Leverage 与 Conviction的作用和lift类似,都是值越大代表越关联

  • Leverage 😛(A,B)-P(A)P(B)
  • Conviction:P(A)P(!B)/P(A,!B)

四、使用mlxtend工具包得出频繁项集与规则

  • pip install mlxtend
import pandas as pd
from mlxtend.frequent_patterns import apriori
from mlxtend.frequent_patterns import association_rules

自定义一份购物数据集

data = {'ID':[1,2,3,4,5,6],
       'Onion':[1,0,0,1,1,1],
       'Potato':[1,1,0,1,1,1],
       'Burger':[1,1,0,0,1,1],
       'Milk':[0,1,1,1,0,1],
       'Beer':[0,0,1,0,1,0]}
df = pd.DataFrame(data)
df = df[['ID', 'Onion', 'Potato', 'Burger', 'Milk', 'Beer' ]]

df

ID	Onion	Potato	Burger	Milk	Beer
0	1	1	1	1	0	0
1	2	0	1	1	1	0
2	3	0	0	0	1	1
3	4	1	1	0	1	0
4	5	1	1	1	0	1
5	6	1	1	1	1	0

设置支持度 (support) 来选择频繁项集.

  • 选择最小支持度为50%

  • apriori(df, min_support=0.5, use_colnames=True)

frequent_itemsets = apriori(df[['Onion', 'Potato', 'Burger', 'Milk', 'Beer' ]], min_support=0.50, use_colnames=True)

frequent_itemsets
	support	itemsets
0	0.666667	(Onion)
1	0.833333	(Potato)
2	0.666667	(Burger)
3	0.666667	(Milk)
4	0.666667	(Potato, Onion)
5	0.500000	(Burger, Onion)
6	0.666667	(Burger, Potato)
7	0.500000	(Milk, Potato)
8	0.500000	(Burger, Potato, Onion)

返回的3种项集均是支持度>=50%

计算规则

  • association_rules(df, metric='lift', min_threshold=1)
  • 可以指定不同的衡量标准与最小阈值
rules = association_rules(frequent_itemsets, metric='lift', min_threshold=1)

rules

antecedents	consequents	antecedent support	consequent support	support	confidence	lift	leverage	conviction
0	(Potato)	(Onion)	0.833333	0.666667	0.666667	0.80	1.200	0.111111	1.666667
1	(Onion)	(Potato)	0.666667	0.833333	0.666667	1.00	1.200	0.111111	inf
2	(Burger)	(Onion)	0.666667	0.666667	0.500000	0.75	1.125	0.055556	1.333333
3	(Onion)	(Burger)	0.666667	0.666667	0.500000	0.75	1.125	0.055556	1.333333
4	(Burger)	(Potato)	0.666667	0.833333	0.666667	1.00	1.200	0.111111	inf
5	(Potato)	(Burger)	0.833333	0.666667	0.666667	0.80	1.200	0.111111	1.666667
6	(Burger, Potato)	(Onion)	0.666667	0.666667	0.500000	0.75	1.125	0.055556	1.333333
7	(Burger, Onion)	(Potato)	0.500000	0.833333	0.500000	1.00	1.200	0.083333	inf
8	(Potato, Onion)	(Burger)	0.666667	0.666667	0.500000	0.75	1.125	0.055556	1.333333
9	(Burger)	(Potato, Onion)	0.666667	0.666667	0.500000	0.75	1.125	0.055556	1.333333
10	(Potato)	(Burger, Onion)	0.833333	0.500000	0.500000	0.60	1.200	0.083333	1.250000
11	(Onion)	(Burger, Potato)	0.666667	0.666667	0.500000	0.75	1.125	0.055556	1.333333

返回的是各个的指标的数值,可以按照感兴趣的指标排序观察,但具体解释还得参考实际数据的含义。

rules [ (rules['lift'] >1.125)  & (rules['confidence']> 0.8)  ]


antecedents	consequents	antecedent support	consequent support	support	confidence	lift	leverage	conviction
1	(Onion)	(Potato)	0.666667	0.833333	0.666667	1.0	1.2	0.111111	inf
4	(Burger)	(Potato)	0.666667	0.833333	0.666667	1.0	1.2	0.111111	inf
7	(Burger, Onion)	(Potato)	0.500000	0.833333	0.500000	1.0	1.2	0.083333	inf

这几条结果就比较有价值了:

  • (洋葱和马铃薯)(汉堡和马铃薯)可以搭配着来卖
  • 如果洋葱和汉堡都在购物篮中, 顾客买马铃薯的可能性也比较高,如果他篮子里面没有,可以推荐一下.

五、 性能优化

在关联规则学习中,Apriori算法虽然强大且广泛应用,但在处理大型数据集时可能会遇到性能瓶颈。因此,研究者们提出了一系列优化方法来提升Apriori算法及其同类算法的性能。以下是几种常见的性能优化方法,以及它们如何影响算法性能的评估。

1. FP-Growth算法

FP-Growth(Frequent Pattern Growth)算法是Apriori算法的一个有效替代方案,尤其在处理大型数据集时表现出色。FP-Growth算法使用一种称为FP树(Frequent Pattern Tree)的数据结构来存储频繁项集的信息,并基于这个数据结构进行频繁项集和关联规则的挖掘。FP树通过共享前缀来减少存储空间,并允许在不生成候选项集的情况下直接生成频繁项集,从而显著提高了算法的效率。

评估FP-Growth算法的性能时,通常会关注其在处理大型数据集时的运行时间、内存消耗以及生成的关联规则的质量。与Apriori算法相比,FP-Growth算法通常能够在更短的时间内处理更多的数据,并生成更准确和有用的关联规则。

2. 并行化

并行化是另一种提高关联规则学习算法性能的有效方法。通过将算法的计算任务分配给多个处理器或计算机节点,可以显著减少算法的运行时间。对于Apriori算法和FP-Growth算法等关联规则学习算法,并行化可以通过多种方式实现,例如将数据集划分为多个子集并在不同处理器上独立处理、在多个节点上并行生成和评估候选项集等。

评估并行化算法的性能时,除了关注运行时间和内存消耗外,还需要考虑并行化过程中的通信开销和负载均衡等因素。良好的并行化策略应该能够确保各个处理器或节点之间的负载均衡,并减少不必要的通信开销,从而最大化算法的性能提升。

3. 其他优化方法

除了FP-Growth算法和并行化之外,还有一些其他方法也可以用于优化关联规则学习算法的性能。例如,可以通过改进算法的数据结构、减少候选项集的数量、利用数据挖掘中的采样技术等来降低算法的计算复杂度。此外,还可以结合其他机器学习算法和技术来进一步提高关联规则学习的准确性和效率。

在评估优化后的算法性能时,需要采用合适的评估指标和方法。常见的评估指标包括运行时间、内存消耗、生成的关联规则的数量和质量等。为了获得准确的评估结果,可以使用基准数据集进行测试,并将优化后的算法与原始算法以及其他相关算法进行比较。此外,还可以根据实际应用场景的需求和约束条件来定制评估指标和方法。

六、总结与展望

6.1 总结Apriori算法的优点和局限性

Apriori算法作为关联规则学习的经典算法,具有其独特的优点。首先,它通过逐步生成和评估候选项集,有效地找出了数据中的频繁项集和关联规则。其次,Apriori算法的计算过程简单直观,易于理解和实现。此外,Apriori算法还具有良好的可解释性,生成的关联规则可以直接用于实际应用中。

然而,Apriori算法也存在一些局限性。首先,在处理大型数据集时,Apriori算法的计算量可能会非常大,导致运行时间较长。其次,Apriori算法对候选项集的生成和评估采用了较为简单的方式,可能会产生大量的冗余计算和冗余规则。最后,Apriori算法对数据的稀疏性和噪声较为敏感,可能会影响其性能和准确性。

6.2 讨论关联规则学习领域的未来发展方向

关联规则学习领域在未来将继续发展,并呈现出以下几个方向:

  1. 算法优化:针对Apriori算法等现有算法的局限性,研究者们将继续探索新的优化方法和技术,以提高算法的性能和准确性。例如,可以进一步改进FP-Growth算法、利用并行化技术加速计算过程等。
  2. 深度学习在关联规则学习中的应用:随着深度学习技术的不断发展,将深度学习应用于关联规则学习中将是一个新的研究方向。深度学习可以自动学习数据中的复杂模式,有望进一步提高关联规则学习的性能。
  3. 跨领域融合:关联规则学习可以与其他数据挖掘和机器学习技术相结合,形成跨领域的融合方法。例如,可以将关联规则学习与推荐系统、社交网络分析等领域相结合,以发现更多有趣和有价值的信息。
  4. 实时关联规则学习:随着实时数据的不断增长,实时关联规则学习将成为一个重要的研究方向。研究者们将探索如何在数据流中实时发现关联规则,并将其应用于实时推荐、异常检测等场景中。
6.3 提出可能的改进方案和研究建议

针对Apriori算法和关联规则学习领域的发展方向,我们提出以下可能的改进方案和研究建议:

  1. 优化候选项集生成和评估策略:通过改进候选项集的生成和评估策略,减少冗余计算和冗余规则的产生,提高算法的效率。
  2. 结合深度学习技术:将深度学习技术应用于关联规则学习中,自动学习数据中的复杂模式,提高算法的准确性。
  3. 探索跨领域融合方法:将关联规则学习与其他数据挖掘和机器学习技术相结合,形成跨领域的融合方法,以发现更多有趣和有价值的信息。
  4. 研究实时关联规则学习算法:针对实时数据的特点,研究如何在数据流中实时发现关联规则,并将其应用于实时应用中。

七、参考文献

以下是本文引用的主要学术文献和资料,这些文献和资料为本文提供了理论基础、算法细节和应用实例等方面的支持。

  1. Agrawal, R., & Srikant, R. (1994). Fast algorithms for mining association rules in large databases. In Proc. 20th int. conf. very large data bases, VLDB (pp. 487-499). This seminal paper introduced the Apriori algorithm for mining association rules in large databases. It discusses the basic principles and implementation of the algorithm.

  2. Han, J., & Kamber, M. (2006). Data mining: concepts and techniques. Morgan Kaufmann. This book provides a comprehensive overview of data mining techniques, including association rule learning. It discusses the Apriori algorithm and its extensions in detail.

  3. Li, H., Han, J., & Pei, J. (2001). FP-growth: frequent pattern growth in transactional databases. In Proc. 17th int. conf. data engineering (pp. 315-324). This paper proposes the FP-Growth algorithm as an efficient alternative to the Apriori algorithm for mining frequent itemsets and association rules.

  4. Liu, B., Hsu, W., & Ma, Y. (2002). Integrating classification and association rule mining. In Proc. 8th ACM SIGKDD int. conf. knowledge discovery and data mining (pp. 80-89). This paper discusses how association rule mining can be integrated with classification tasks to improve prediction performance.

  5. Zaki, M. J. (2000). Scalable algorithms for association mining. IEEE transactions on knowledge and data engineering, 12(3), 372-390. This paper discusses scalable algorithms for mining association rules in large datasets, including techniques for reducing the number of candidate itemsets.

八、附录

额外数据集
  • GroceryStoreDataset.csv:一个包含超市购物篮数据的数据集,用于演示Apriori算法在市场篮子分析中的应用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python编程之调试魔法与列表逆转之谜

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、调试魔法:揭开Python编程的神秘面纱 代码调试实例 二、列表逆转之谜&#…

图书管理系统——Java版

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:JavaSE 顺序表的学习,点我 目录 图书管理系统菜单 基本框架: 书: 书架: 用户&#xff…

JavaEE初阶多线程 (5)

1.锁的策略 1.1锁的策略是什么 这个锁的策略可以理解为,一种做法,相当于当你遇到锁竞争,加锁解锁,的情况你会怎么做。 乐观锁可以理解为疫情的时候比较乐观就买了最基本的物资, 买的时候非常方便 1.2乐观锁 当效率…

web及网络基础图文详解

目录 1.1TCP/IP 协议族 1.2TCP/IP 的分层管理 1.3TCP/IP通信传输流 1.4 与 HTTP 关系密切的协议 : IP、TCP 和 DNS (1)负责传输的 IP协议(网络层) (2)确保可靠的 TCP协议(传输层&#xff…

2024/5/26周报

文章目录 摘要Abstract文献阅读题目创新点方法网络架构LSTM 实验过程Data acquisitionData preprocessingAlgorithm parameter settingsModels evaluation 实验结果 深度学习ARIMA一、ARIMA模型的基本思想二、ARIMA模型的数学表达式三、差分过程 总结 摘要 本周阅读了一篇基于…

Aya 23 是 Cohere For AI 推出的一款最先进的新型多语言开放重量模型

相信一些对LLM关注较高的同学们,应该对这家加拿大的Cohere不会太陌生。毕竟此前,它就开源过 Aya 101 和 Command R 这两款大模型。 Cohere 的非营利性研究实验室 Cohere for AI 发布了 Aya 23,这是其多语言大型语言模型 (llm&…

计算机毕业设计 | SpringBoot社区物业管理系统 小区管理(附源码)

1, 概述 1.1 课题背景 近几年来,随着物业相关的各种信息越来越多,比如报修维修、缴费、车位、访客等信息,对物业管理方面的需求越来越高,我们在工作中越来越多方面需要利用网页端管理系统来进行管理,我们…

就业班 第三阶段(ELK) 2401--5.20 day1 ELK 企业实战 ES+head+kibana+logstash部署(最大集群)

ELKkafkafilebeat企业内部日志分析系统 1、组件介绍 1、Elasticsearch: 是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的&#xff…

力扣HOT100 - 287. 寻找重复数

解题思路: 快慢指针 第一步,慢指针每次移动一步,快指针每次移动两步,直到它们相遇。这一步保证了它们在环中相遇。 接下来,将其中一个指针(快指针或慢指针)重置到起点(即数组的第一…

IP数据云确认参展2024 ChinaJoy BTOB与诸位共展未来!

作为在全球数字娱乐领域兼具知名度与影响力的年度盛会,2024年第二十一届ChinaJoy BTOB将于7月26日至7月28日在上海新国际博览中心盛大召开,秉承着初心“游”在,精彩无限!(英译:Stay True, Game On.&#xf…

数据库攻防之MySQL

MySQL 是最流行的关系型数据库,与此同时也是 web 应用中最好的关系型数据库管理应用软件。我们在渗透过程中碰到的 PHP 站点大部分都会搭配 MySQL 数据库,因此它是红队攻防中最常遇到的数据库。 0x01 MySQL简介 MySQL 是典型的关系型数据库,…

Gradle筑基——Gradle Maven仓库管理

基础概念: 1.POM pom:全名Project Object Model 项目对象模型,用来描述当前maven项目发布模块的基础信息 pom主要节点信息如下: 配置描述举例(com.android.tools.build:gradle:4.1.1)groupId组织 / 公司的名称com.…

Linux-之 简易:Shell编程

1 为什么要学习Shell编程 对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shel脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本. 对于大数据程序员来说,需要编写Shell程序来管理集群 2 Shell是什么 Shell是一个命令行解释器&#xff…

AIGC 005-Dreambooth定制化生成,微调文本到图像的扩散模型!

AIGC 005-Dreambooth定制化生成,微调文本到图像的扩散模型! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 DreamBooth 论文 (DreamBooth: Fine-Tuning Text-to-Image Diffusion Models for Subject-Driven Generation) 提出了一种新颖的技术&#x…

AI视频教程下载:用提示工程在GPT商店构建10个GPTs

你将学到什么? 深入了解ChatGPT平台和GPT商店的生态系统。 开发为多样化应用定制GPT模型的专业知识。 掌握高效内容生成的AI自动化技术。 学习高级提示工程以优化ChatGPT输出。 获取构建AI驱动的数字营销和广告解决方案的技能。 了解如何为SEO写作和优化创建专…

iOS--锁的学习

iOS--锁的学习 锁的介绍线程安全 锁的分类自旋锁和互斥锁OSSpinLockos_unfair_lockpthread_mutexpthread_mutex的属性 NSLockNSRecursiveLockNSConditionNSConditionLockdispatch_semaphoredispatch_queuesynchronizedatomicpthread_rwlock:读写锁dispatch_barrier_…

S1E45:单链表1 课后作业

测试题:0. 相比起数组来说,单链表具有哪些优势呢? 答:长度非固定,可以申请添加长度 答案:对于数组来说,随机插入或者删除其中间的某一个元素,都是需要大量的移动操作,而…

Vue.Draggable:强大的Vue拖放组件技术探索

一、引言 随着前端技术的不断发展,拖放(Drag-and-Drop)功能已经成为许多Web应用不可或缺的一部分。Vue.js作为现代前端框架的佼佼者,为开发者提供了丰富的生态系统和强大的工具链。Vue.Draggable作为基于Sortable.js的Vue拖放组件…

在二十三届中国科学家论坛大会上,郎百忠被授予《中国首席政治书法领域科学家》荣誉称号

在5月25日于北京举办的第二十三届中国科学家论坛上,备受瞩目的书法家郎百忠凭借其卓越的书法造诣和深厚的政治素养,荣获了"中国首席政治书法科学家"称号。这一荣誉是对郎百忠多年来在书法领域的杰出贡献以及他在政治书法领域的卓越成就的肯定。…

leedcode【19】. 删除链表的倒数第 N 个结点——Java解法

Problem: 19. 删除链表的倒数第 N 个结点 思路解题方法复杂度Code性能 思路 如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。 分为如下几步: 定义fast指…