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

news2024/12/27 14:37:23

在现代数据分析中,经常需要从大规模数据集中挖掘有用的信息。关联规则挖掘是一种强大的技术,可以揭示数据中的隐藏关系和规律。本文将介绍如何使用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算法在市场篮子分析中的应用。

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

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

相关文章

【STM32单片机】----实现LED灯闪烁实战

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

只要0.14元带使能控制500mA输出电流3.3V输出电压SOT23-5封装LDO输入电压可达23V的DS8241-33S5

前言: 本来想推荐的,为慎重,搜了下公司信息,改介绍了。公司相关信息在文尾。 该LDO已在立创销售,希望厂家尽早将该款产品做到基础库或免换料费的器件中。 参考价格:0.14元 使能控制:支持 23V …

PCIe总线-事物层之TLP请求和完成报文格式介绍(六)

1.概述 TLP报文按照类型,可以大致分为4中类型,分别是IO请求报文、存储器请求报文、配置请求报文、完成报文和消息请求报文。IO请求报文可分为IO读请求(不携带数据)和IO写请求(携带数据)。存储器请求报文可…

mac 安装Node.js

文章目录 前言一、Node是什么?二、下载三、安装四、验证总结 前言 Node.js是一个开源、跨平台的JavaScript运行时环境,它允许开发者在服务器端运行JavaScript代码。Node.js是基于Chrome V8 JavaScript引擎构建的,它的设计目标是提供一种高效…

番外篇 | YOLOv5-SPD:用最简单的方式完成低分辨率图像和小目标检测升级

前言:Hello大家好,我是小哥谈。论文提出了一个新的CNN构建模块称为SPD-Conv,用来替换每个步长卷转层和每个池化层(从而完全消除它们)。SPD-Conv由一个空间到深度(SPD)层和一个非步长卷积(Conv)层组成。本文详细介绍了如何在YOLOv5中引入SPD-Conv,助力助力低分辨率与小…

pyqt5-结合opencv展示实时视频纯Demo

前言一、代码二、运行结果总结 前言 一、代码 #Author :susocool #Creattime:2024/5/22 #FileName:018.1-显示摄像头 #Description: import sys from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5.QtWidgets import QHBoxLayout import cv2 import osclass V…

k8s集群中pod的容器资源限制和三种探针

一、资源限制 总结: requests表示创建pod时预留的资源,limits表示pod能够使用资源的最大值。requests值可以被超,limits值不能超过,如果是内存使用超过limits会触发oom然后杀掉进程,如果是cpu超过limits会压缩cpu的使用…

Selenium 高频面试题及答案

1、什么是 Selenium?它用于做什么? Selenium 是一个用于自动化测试的开源框架。它提供了多种工具和库,用于模拟用户在不同浏览器和操作系统上的行为,并且可用于测试网页应用程序。 2、Selenium WebDriver 和 Selenium IDE 有何区…

C++学习/复习5--构造函数与初始化/static成员/友元/内部类/匿名对象/编译器的拷贝构造优化

一、本章概要 二、再谈构造函数 1.构造体赋初值与初始化 2.初始化列表与初始化 2.1定义 2.2注意事项与举例 3.explicit关键字与构造函数 3.1隐式类型转换 也叫做自动类型转换 这种转换通常是从存储范围小的类型到存储范围大的类型,或者是从低精度的数值类型到高…

无畏并发: Rust Mutex的基本使用

并发是很多编程语言避不开的一块主要内容,主打一个无畏并发的Rust自然也面临这样的挑战。Rust中的Mutex提供了强大的同步原语,确保共享数据的线程安全,这篇文章中,我们会探讨Mutex的使用,从基础的用法到一些高阶内容。…

基于地理坐标的高阶几何编辑工具算法(8)——整形面

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理工具步骤 选中面,点击“整形面”工具,绘制一条和面至少两个交点的线,双击结束。 应用场景 快速修改一个几何面的局部形状。 算法输入 一个待修改的面p,和一条绘制的线l 算法输出 修改后的面 算法示意图…

【JAVA基础之网络编程】UDP和TCP协议以及三次握手和四次挥手的过程

🔥作者主页:小林同学的学习笔录 🔥mysql专栏:小林同学的专栏 目录 1. 网络编程 1.1 概述 1.2 网络编程的三要素 1.2.1 IP地址 1.2.2 InetAddress 1.2.3 端口和协议 1.3 UDP协议 1.3.1 UDP发送数据 1.3.2 UDP接收数据 1.4…

Hadoop伪分布式搭建

1 配置SSH免密登录 1.生成密钥 # ssh-keygen -t rsa 注意:需要经过4次回车 查看密钥及公钥 # cd /root/.ssh 拷贝公钥 # cp id_rsa.pub authorized_keys 2 测试本地免密登录 2 下载Hadoop安装包 使用wget命令从华为云上下载Hadoop安装文件 # wget -P /opt https://m…

数组的理论知识

文章目录 数组的理论知识 数组的理论知识 数组是我们在编程时期经常使用到的一种数据结构。 特点: 在连续的内存空间中存储相同数据类型的数据 如图: arr 数组 注意点:数组的修改的效率是比较慢的,O(n),因为数组只…

6、phpjm混淆解密和php反序列化

题目:青少年雏形系统 1、打开链接也是一个登入面板 2、尝试了sqlmap没头绪 3、尝试御剑,发现一个www.zip 4、下载打开,有一个php文件打开有一段phpjm混淆加密 5、使用手工解混淆 具体解法链接:奇安信攻防社区-phpjm混淆解密浅谈…

国产化服务器开启NTP功能并向NTP时钟服务器同步

1.备份/etc/chrony.conf文件; cp -rp /etc/chrony.conf /etc/chrony.conf.bak.20240522 2.修改chrony.conf文件,增加NTP时钟信息。(客户端填写时钟同步服务器的IP地址或者域名,我这里写的IP地址。下面Allow NTP Client是只允许…

基于YOLOv8+PySide6的快递分类管理系统

1、背景 随着电子商务的飞速发展,快递行业所承受的数据处理需求愈发庞大。在这样的背景下,传统的手工分类方法已经显得力不从心,因其不仅耗时耗力,还存在着易出错的隐患。因此,迫切需要研发出一套高效而准确的自动化系…

Linux VIM指令

三种模式 命令模式:控制屏幕光标的移动,字符、字或行的删除等输入对文件的一些指令 插入模式:对文件内容进行文字输入 底行摸索:文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作…

GAW-1000D 微机控制钢绞线拉力试验机

一、整机外观图与示意图 外观示意图 性能说明: GAW-1000D型微机控制电液伺服钢绞线拉力试验机主要用于对预应力钢绞线进行抗拉强度测试。由宽调速范围的电液比例伺服阀与计算机及测控单元所组成伺服控制系统,能精确的控制和测量试验全过程。整机由主机…

浮点型比较大小

浮点数的存储形式 浮点数按照在内存中所占字节数和数值范围,可以分为浮点型,双精度浮点型和长双浮点型数。 代码: printf("lgn:%e \n", pow(exp(1), 100));printf("lgn:%f ", pow(exp(1), 100));输出结果: …