【机器学习-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' ]]dfID	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_itemsetssupport	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)rulesantecedents	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.rhkb.cn/news/332134.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何利用OpenHarmony ArkUI的Canvas组件实现涂鸦功能?

简介 ArkUI是一套UI开发框架,提供了开发者进行应用UI开发时所需具备的能力。随着OpenAtom OpenHarmony(以下简称“OpenHarmony”)不断更新迭代,ArkUI也提供了很多新的组件,例如Canvas、OffscreenCanvas、XComponent组…

网络安全技术心得体会

网络与信息安全技术心得体会 通过对网络安全这门课程的学习,我进一步了解了网络安全技术的相关知识。大致来说,所谓网络安全指的是对网络系统中各类软硬件和数据信息等提供保护屏障,确保数据信息不受到恶意侵入、窃取等破坏,保证…

四. TensorRT模型部署优化-模型部署的基础知识

目录 前言0. 简介1. FLOPS2. TOPS3. HPC的排行,CPU/GPU比较4. FLOPs5. FLOPS是如何计算的6. CUDA Core vs Tensor Core总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们…

蓝桥杯物联网竞赛_STM32L071_17_DMA收发 不定长DMA接收

前言: 前面已经说过,由于国赛的代码量的增加,cpu在其他代码的时间块会较省赛大大增加,为了减少对cpu的依赖所以学习DMA收发数据 对于串口中断收发来说串口接收数据无法收取不定长数据所以不好用,而DMA有收集不定长数…

Android硬件渲染流程

Android硬件渲染流程 一.渲染流程1.VSync信号的监听2.VSync信号触发绘制 二.渲染原理1.画布的获取1.1 画布的创建1.2 渲染指令列表的创建 2.绘制与渲染指令2.1 矩形的绘制2.2 硬件渲染指令2.3 节点的绘制 3.绘制的提交3.1 绘制结果的保存3.2 绘制结果的获取 4.层级的构建4.1 绘…

解决Vue3+TS+vite,VSCode 高亮语法错误

一般像这种提示,有可能就是TypeScript语法的识别问题, 一般我们重装一下Vue - Official插件 或者将tcconfig.json中的moduleResolution改为node模式, 基本都是TypeScript无法识别vue文件中的TypeScript语句导致的

单片机原理及技术(二)—— AT89S51单片机(一)(C51编程)

目录 一、AT89S51单片机的片内硬件结构 二、AT89S51的引脚功能 2.1 电源及时钟引脚 2.2 控制引脚 2.3 并行 I/O口引脚 三、AT89S51的CPU 3.1 运算器 3.1.1 算术逻辑单元(ALU) 3.1.2 累加器A 3.1.3 程序状态字寄存器(PSW&#xff09…

JRT1.7发布

JRT1.7连仪器在线演示视频 JRT1.5实现质控主体、1.6基本完成质控;本次版本推进到1.7,1.7集菜单权限、登录、打印导出客户端、初始化、质控、Linux客户端、仪器连接和监控体系各种功能大全,上十年写系统用到的都全了。 这次直接挑战检验最难…

【微服务】springboot 构建镜像多种模式使用详解

目录 一、前言 二、微服务常用的镜像构建方案 3.1 使用Dockerfile 3.2 使用docker plugin插件 3.3 使用docker compose 编排文件 三、环境准备 3.1 服务器 3.2 安装JDK环境 3.2.1 创建目录 3.2.2 下载安装包 3.2.3 配置环境变量 2.2.4 查看java版本 3.3 安装maven …

加拿大媒体广告投放:媒体宣发主流媒体《金融邮报》《埃德蒙顿日报》

介绍《埃德蒙顿日报》与《埃德蒙顿太阳报》 在加拿大阿尔伯塔省首府埃德蒙顿,有两份主流新闻类报纸。其中,《埃德蒙顿日报》是加拿大主要英文报纸之一,也被称为爱蒙顿新闻报。而另一份报纸则是《埃德蒙顿太阳报》,是加拿大阿尔伯…

Linux操作系统最著名的两大系列Red Hat和Debian

Linux操作系统可以根据其背后的项目或社区分为不同的系列,其中最著名的两大系列是Red Hat系列和Debian系列。 1.著名的两大系列是Red Hat和Debian Red Hat系列: Red Hat Enterprise Linux (RHEL):这是Red Hat公司推出的企业级操作系统&#…

香橙派AIpro(OrangePi AIPro)开发板初测评

开发板简介 最近,我拿到手一款Orange Pi AI Pro 开发板,它是香橙派联合华为精心打造的高性能AI 开发板,最早发布于2023年12月,其搭载了昇腾AI 处理器,可提供8TOPS INT8 的计算能力,内存提供了8GB 和16GB两…

【C++】---多态

【C】---多态 一、多态的概念二、多态的定义及实现1、构成多态的2个必要条件2、什么叫做虚函数的重写?3、虚函数重写的3个例外4、建议把 析构函数 都定义为:虚函数 三、C11的两个关键字:final override1、final:修饰虚函数&#x…

Spring—Spring配置文件概念及应用(实现一个图形验证码)

文章目录 配置文件配置文件作用配置文件的格式配置文件优先级说明配置文件书写代码的格式yml文件代码的格式 Value注解 properties 缺点分析properties VS yml实现一个验证码程序 配置文件 配置文件作用 整个项目的重要信息我们都会配置在配置文件中,比如说我们数…

VMware虚拟机-设置系统网络IP、快照、克隆

1.设置网络IP 1.点击右上角开关按钮-》有线 已连接-》有线设置 2.手动修改ip 3.重启或者把开关重新关闭开启 2.快照设置 快照介绍: 通过快照可快速保存虚拟机当前的状态,后续可以使用虚拟机还原到某个快照的状态。 1.添加快照(需要先关闭虚拟机) 2.在…

电子商务网站(网上商店PetShop)

PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。PetShop随着版本的不断更新,至现在基于.Net2.0的PetShop 4.0为止,整个设计逐渐变得成熟而优雅,有很多可以借鉴之处。PetShop是一个小型的项目,系统架构与代码…

【设计模式深度剖析】【2】【结构型】【装饰器模式】| 以去咖啡馆买咖啡为例 | 以穿衣服出门类比

👈️上一篇:代理模式 | 下一篇:适配器模式👉️ 目 录 装饰器模式定义英文原话直译如何理解呢?4个角色类图1. 抽象构件(Component)角色2. 具体构件(Concrete Component)角色3. 装饰&#xf…

【调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cpolar】

调试笔记-系列文章目录 调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cpolar 文章目录 调试笔记-系列文章目录调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cpolar 前言一、调试环境操作系统:Windows 10 专业版调试环境调试目标 二、调试步骤…

【找出第 K 大的异或坐标值】python

4层循环暴力超时 class Solution:def kthLargestValue(self, matrix: List[List[int]], k: int) -> int:nums[]for a in range(len(matrix)):for b in range(len(matrix[0])):num0for i in range(a1):for j in range(b1):num^matrix[i][j]nums.append(num)nums.sort()retu…

部门来了个测试开发,听说是00后,上来一顿操作给我看蒙了...

公司新来了个同事,听说大学是学的广告专业,因为喜欢IT行业就找了个培训班,后来在一家小公司实习半年,现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍,服务器缩减一半,性能反而提升4倍&#xff01…