无监督学习简介

news2024/11/15 18:24:56

无监督学习简介

在这里插入图片描述

一、定义和核心概念

无监督学习的定义

无监督学习是机器学习的一个关键分支,它涉及到从未标注数据中学习和提取信息。不同于其他学习类型,无监督学习的数据集没有提供任何显式的输出标签或结果。因此,这种学习方法的主要任务是探索数据内在的结构和模式,以揭示隐藏在数据中的有意义的洞见和特征。

在无监督学习中,算法需要自我驱动地发现数据中的结构和规律,而非通过预先定义的标准来找出正确答案。它常用于探索性数据分析、自动分类、主题模型提取等场合,是数据科学和人工智能领域的重要组成部分。

与监督学习和半监督学习的比较

无监督学习与监督学习的主要区别在于数据标注的有无。在监督学习中,数据集由特征及其对应的标签构成,目的是训练出一个模型,使其能够对新数据进行准确的预测或分类。例如,一个识别图片中动物的监督学习模型会在包含已标记动物类型的图片数据集上进行训练。

半监督学习则介于监督学习和无监督学习之间。在半监督学习中,数据集包含一部分标记数据和一部分未标记数据。这种方法结合了监督学习的精确性和无监督学习的高效性,适用于标记数据较少而未标记数据丰富的场景。

无监督学习在数据探索阶段特别有用,它可以揭示数据中隐藏的模式和群组,为后续的分析和建模提供重要的基础信息。

无监督学习的主要目标

无监督学习的主要目标包括但不限于以下几点:

  1. 数据聚类:将数据分为若干组或群体,每一组的数据点具有相似的特征。这有助于识别数据中的自然分类或模式。

  2. 降维:简化数据集的复杂性,减少数据集中的变量数量,同时保留关键信息。降维是提高数据处理效率和可视化的重要步骤。

  3. 关联规则挖掘:在数据集中寻找项目、事件或其他对象之间的有趣关系。例如,在零售中,关联规则可以用来识别经常一起购买的商品。

  4. 异常检测:识别数据集中的异常或奇怪的模式。这在诸如信用卡欺诈检测、网络入侵检测等领域中非常有价值。

  5. 自动编码:通过无监督学习生成的特征表示,提高数据的压缩效率和特征的表达能力。

无监督学习的核心挑战在于如何从未标注的数据中提取出有用的信息,并为其赋予合理的解释。由于缺乏明确的指导或标准,无监督学习模型的评估和验证比监督学习更加复杂。然而,正是这种探索性和开放性,使得无监督学习在许多领域中都显得尤为重要和有趣。

二、无监督学习的类型

无监督学习可被分为几个主要类型,每种类型都有其独特的算法和应用场景。在本部分,我们将探讨其中的三个主要类型:聚类、关联规则学习和降维技术。

聚类

聚类是无监督学习中最常见的一种形式,它旨在将数据集中的样本分组,使得同一组内的样本相似度较高,而不同组间的样本相似度较低。

K-均值聚类

K-均值是一种广泛使用的聚类算法,其核心思想是将数据划分为K个集群。算法首先随机选择K个点作为初始的聚类中心,然后按照每个样本到聚类中心的距离,将样本分配到最近的聚类中心。聚类中心随后更新为分配给该聚类的所有样本点的均值。这个过程重复进行,直到满足收敛条件。

K-均值聚类的目标函数可以表示为:

J = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 J = \sum_{i=1}^{k}\sum_{x \in C_i} ||x - \mu_i||^2 J=i=1kxCi∣∣xμi2

其中, J J J 是代价函数, k k k 是聚类的数量, C i C_i Ci 是第 i i i个聚类中的样本集合, μ i \mu_i μi 是第 i i i个聚类的中心, ∣ ∣ x − μ i ∣ ∣ 2 ||x - \mu_i||^2 ∣∣xμi2 是样本 x x x到其聚类中心 μ i \mu_i μi的欧几里得距离的平方。

层次聚类

层次聚类是另一种常用的聚类方法。与K-均值聚类不同,层次聚类不需要预先指定聚类数量。它通过构建一个层次嵌套的树形结构来进行聚类。这个过程分为自底向上的聚合(凝聚层次聚类)和自顶向下的分裂(分裂层次聚类)两种。

层次聚类常用的距离度量方法包括单链接(最近邻),完全链接(最远邻),和平均链接等。

密度聚类

密度聚类(例如DBSCAN算法)基于样本的密度分布进行聚类。这种方法假设聚类结构能够通过样本分布的密度来识别。它在有噪声的数据集中表现良好,并能识别任意形状的聚类。

DBSCAN算法中的核心概念是核心点、边界点和噪声点。核心点是在其邻域内有足够多邻居点(达到’minPts’数量)的点;边界点是邻域内邻居点数量少于’minPts’但属于某个核心点邻域的点;噪声点既不是核心点也不是边界点。

关联规则学习

关联规则学习旨在发现大型数据集中变量之间的有趣关系。它在市场篮分析、商品推荐等领域应用广泛。

Apriori算法

Apriori算法是一种用于关联规则学习的经典算法。它基于一个事实:如果一个项集是频繁的,那么它的所有非空子集也一定是频繁的。算法从单个项集开始,逐渐增加项集的大小,寻找频繁项集和强规则。

Apriori算法的核心是迭代过程,其中每一步都发现长度为 k k k的频繁项集,这些项集在数据集中至少出现了’minSupport’次。

FP-树

FP-树(频繁模式树)是另一种用于有效发现频繁项集的方法。与Apriori算法不同,FP-树方法不需要多次扫描数据集,而是将数据集存储在一个压缩的树结构中,从而提高了关联规则挖掘的效率。

FP-树构建过程中,首先创建一个项目头表,然后将数据集中的事务转换为路径并添加到FP-树中。这些路径在树中共享前缀,从而减少存储空间。

降维技术

降维是无监督学习中处理高维数据的重要技术,旨在减少数据集中的特征数量,同时尽量保留原始数据的重要信息。

主成分分析(PCA)

主成分分析(PCA)是一种广泛使用的降维技术。它通过线性变换将原始数据转换为一组线性无关的代表性特征,这些特征被称为主成分。PCA旨在最大化各主成分在数据方差中的占比,从而捕获数据中的主要变化模式。

PCA的数学基础涉及计算数据协方差矩阵的特征值和特征向量。数据的第一主成分是方向上具有最大方差的轴,接下来的主成分则是与之前的主成分正交且方差最大的轴。

t-分布随机邻域嵌入(t-SNE)

t-SNE是一种流行的降维技术,特别适用于高维数据的可视化。它通过非线性映射将高维空间中的样本点映射到低维空间(通常是二维或三维),同时尽可能保持原始空间中样本点之间的相似性。

t-SNE工作原理涉及两个主要步骤:首先,在高维空间中通过高斯分布计算样本点之间的条件概率,以捕捉相似性;然后,在低维空间中通过t分布来重新计算样本点之间的条件概率,以优化低维嵌入的位置。

t-SNE的目标函数是最小化高维和低维空间中的KL散度(Kullback-Leibler散度),这可以通过梯度下降方法实现。KL散度的定义为:

K L ( P ∣ ∣ Q ) = ∑ i ∑ j p i j log ⁡ p i j q i j KL(P||Q) = \sum_i \sum_j p_{ij} \log \frac{p_{ij}}{q_{ij}} KL(P∣∣Q)=ijpijlogqijpij

其中, p i j p_{ij} pij是高维空间中样本点 i i i j j j之间的相似性, q i j q_{ij} qij是低维空间中对应点的相似性。

这些降维技术使我们能够有效处理高维数据,揭示数据的内在结构,从而为后续的数据分析和机器学习模型提供强有力的支持。

无监督学习的实践应用

实践中,这些无监督学习的技术广泛应用于各种领域和行业。

  1. 客户细分:企业通过聚类分析客户数据,识别出不同的客户群体,从而能够更精准地定制营销策略和产品推广。

  2. 异常检测:在金融行业中,无监督学习的异常检测技术被用于发现信用卡欺诈和洗钱等不寻常的交易行为。

  3. 推荐系统:在线零售商和内容提供商使用关联规则学习来分析用户行为,推荐相关商品或内容。

  4. 生物信息学:在生物信息学中,无监督学习的聚类和降维技术用于基因数据分析,帮助科学家识别基因表达的模式。

无监督学习的未来趋势

随着技术的不断发展,无监督学习正朝着以下方向发展:

  1. 深度学习的结合:将无监督学习方法与深度学习模型结合,以提升模型的学习能力和数据的表征能力。

  2. 大规模数据处理:面对日益增长的数据量,无监督学习需要更高效地处理大规模数据集。

  3. 复杂数据类型的处理:随着各种新型数据(如文本、图像、时序数据等)的出现,无监督学习需要适应更复杂数据类型的处理需求。

  4. 解释性和可视化:提高无监督学习模型的解释性,使得模型的决策过程更透明,结果更易于理解。

三、算法和模型选择

在无监督学习中,选择合适的算法和模型对于实现高效和准确的数据分析至关重要。由于不同类型的问题可能需要不同的处理方法和技术,了解如何选择最合适的算法和评估其性能是非常重要的。

不同类型问题的算法选择

选择标准

选择算法时,需要考虑以下几个关键因素:

  • 数据类型:数值型、分类型或混合型数据可能需要不同的处理方法。
  • 数据规模:大规模数据集可能需要更高效的算法。
  • 问题的性质:根据问题是聚类、降维还是关联规则发现,选择相应的算法。
  • 可解释性需求:某些应用场景可能更强调模型的可解释性。
聚类问题

对于聚类问题,算法选择依赖于数据的特性和预期目标。例如,K-均值聚类适用于大型数据集和划分明显的群体;层次聚类适合于发现数据的层次结构;DBSCAN适合于识别任意形状的簇和处理噪声数据。

降维问题

降维问题中,PCA适用于线性降维和去除数据冗余;t-SNE适合于高维数据的可视化。对于包含非线性结构的复杂数据集,流形学习方法如局部线性嵌入(LLE)可能更合适。

模型性能评估方法

在无监督学习中,由于缺少标签数据,评估模型性能变得更加复杂。以下是一些常见的评估方法:

轮廓系数(Silhouette Coefficient)

轮廓系数是评估聚类质量的一种方法。它结合了簇内紧密度和簇间分离度两个方面,其值范围在-1到1之间,值越大表示聚类效果越好。轮廓系数 s s s可以表示为:

s = b − a max ⁡ ( a , b ) s = \frac{b - a}{\max(a, b)} s=max(a,b)ba

其中, a a a是同一簇中样本间的平均距离, b b b是最近的那个簇中样本与当前样本的平均距离。

Davies-Bouldin Index

Davies-Bouldin指数是一种基于簇内样本的分散度和簇间距离的度量。该指数越低,表示聚类效果越好。

交叉验证在无监督学习中的应用

在监督学习中,交叉验证是一种常见的模型评估方法,但在无监督学习中,由于缺少明确的标签,其应用变得更为复杂。尽管如此,交叉验证仍然可以在一定程度上用于评估和提高无监督学习模型的稳健性。

方法

无监督学习中的交叉验证通常涉及以下步骤:

  1. 数据划分:将数据集随机划分为多个子集。
  2. 模型训练与评估:在一个子集上训练模型,然后在其他子集上评估模型的一致性和稳健性。
  3. 结果汇总:综合各次评估的结果,得出模型的整体性能。
应用

这种方法尤其适用于评估模型对不同数据划分的稳健性,如检查聚类结果的一致性等。然而,需要注意的是,无监督学习的交叉验证不像监督学习那样直观,其结果解释需要更多的谨慎和专业知识。

三、应用案例

市场细分

市场细分是使用无监督学习中聚类算法的一个经典应用。在这个过程中,客户被分为不同的群体或细分市场,这些群体在购买行为、兴趣或其他特征上具有相似性。通过市场细分,公司能够更有效地定位其营销策略,为不同类型的客户提供定制化的服务和产品。

具体案例 - 使用K-均值聚类进行客户细分

假设我们有一个零售商的客户数据集,包含客户的年龄、年收入和消费评分等信息。我们可以使用K-均值聚类算法对客户进行细分。

数据集:假设数据集是公开可用的,并且包含以下列:客户ID年龄年收入消费评分

目标:根据年龄、年收入和消费评分将客户分成几个不同的群体。

Python代码示例

import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 加载数据
data = pd.read_csv('customer_data.csv')

# 选择特征列
features = data[['年龄', '年收入', '消费评分']]

# 应用K-均值聚类
kmeans = KMeans(n_clusters=5, random_state=0)
clusters = kmeans.fit_predict(features)

# 将聚类结果添加到数据集
data['Cluster'] = clusters

# 可视化结果
plt.scatter(data['年收入'], data['消费评分'], c=data['Cluster'], cmap='rainbow')
plt.title('客户细分')
plt.xlabel('年收入')
plt.ylabel('消费评分')
plt.show()

在这个例子中,我们使用了K-均值聚类算法将客户基于其年龄、年收入和消费评分分为5个群体。这种细分可以帮助公司理解不同客户群体的特性,从而制定更有效的营销策略。

分析和应用

基于聚类结果,公司可以对不同群体的客户实施针对性的营销策略。例如,对于收入高但消费评分低的群体,公司可能会推出高端但价值较大的产品;而对于收入低但消费评分高的群体,则可能推出性价比较高的产品。

社交网络分析

社交网络分析是无监督学习在网络数据上的另一个重要应用。通过分析社交网络中的节点和连接,可以揭示社区结构、影响力节点以及信息流的模式。

具体案例 - 使用密度聚类发现社交网络中的社区
在这个案例中,我们将应用密度聚类算法(如DBSCAN)来识别社交网络中的社区。社交网络数据通常表示为图形,其中节点代表个人或实体,边代表它们之间的关系。

数据集:假设我们有一个社交网络的公开数据集,其中包含节点信息和节点间的连接信息。

目标:识别社交网络中的不同社区。

import networkx as nx
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt

# 加载社交网络数据
G = nx.read_gexf('social_network_data.gexf')

# 计算节点的特征(例如,基于节点的中心性度量)
features = calculate_features(G)

# 应用DBSCAN进行聚类
dbscan = DBSCAN(eps=0.5, min_samples=5)
clusters = dbscan.fit_predict(features)

# 将聚类结果添加到网络图
for i, node in enumerate(G.nodes()):
    G.nodes[node]['cluster'] = clusters[i]

# 可视化网络图
nx.draw(G, node_color=[G.nodes[node]['cluster'] for node in G.nodes()], with_labels=True)
plt.show()

在这个例子中,我们使用DBSCAN算法根据节点的特征(如中心性度量)来识别社交网络中的社区。这种方法可以帮助我们理解社交网络的结构,识别具有相似属性或行为的节点群体。

分析和应用

识别出的社区可以帮助公司或组织了解信息在社交网络中的传播方式,识别关键的意见领袖,以及定制针对特定社区的传播策略。

异常检测

异常检测是在数据中识别不符合预期模式的项、事件或观测值的过程。在金融、网络安全、健康监测等领域,这种能力尤为重要。

具体案例 - 使用孤立森林检测信用卡欺诈
信用卡欺诈检测是异常检测的一个典型应用。在这个例子中,我们使用孤立森林算法来识别可能的欺诈交易。

数据集:假设我们有一个包含信用卡交易的公开数据集,其中包括交易金额、交易时间、客户信息等。

目标:识别出异常的交易模式,可能表示欺诈行为。

from sklearn.ensemble import IsolationForest
import pandas as pd

# 加载数据
data = pd.read_csv('credit_card_transactions.csv')

# 选择特征
features = data[['交易金额', '交易时间', '客户信息']]

# 应用孤立森林进行异常检测
isolation_forest = IsolationForest(contamination=0.01)
predictions = isolation_forest.fit_predict(features)

# 标记异常交易
data['anomaly'] = predictions

# 筛选出异常交易进行进一步分析
anomalies = data[data['anomaly'] == -1]

在这个例子中,孤立森林算法被用来识别数据集中的异常交易,这些可能表示欺诈行为。算法基于特征的分布来识别与大部分交易明显不同的样本。

分析和应用

异常检测不仅帮助金融机构及时识别和防止欺诈行为,也提供了了解客户行为模式和改善风险管理的机会。

四、挑战与未来趋势

无监督学习作为机器学习的一个重要分支,正面临着诸多挑战,并在不断发展中展现出新的趋势。了解这些挑战和趋势对于推动无监督学习的应用和研究具有重要意义。

处理高维数据的挑战

随着数据维度的增加,无监督学习面临着“维度的诅咒”。高维数据不仅增加了计算的复杂性,还可能导致过拟合和降低聚类或降维算法的效果。

为了应对这一挑战,研究者们正在探索多种方法。例如,降维技术如主成分分析(PCA)和t-分布随机邻域嵌入(t-SNE)被广泛应用于降低数据的维度和复杂性。此外,特征选择技术也在帮助我们从高维数据中识别和保留最有信息量的特征。

无监督学习与深度学习的结合

近年来,无监督学习与深度学习结合的趋势日益明显。深度学习模型,特别是那些设计用于特征学习和表示学习的模型,如自编码器和生成对抗网络(GAN),正在为无监督学习带来新的视角。

例如,自编码器不仅在降维和特征提取方面表现出色,还在异常检测和复杂数据结构的识别上显示了巨大的潜力。此外,GAN在生成逼真图像和视频方面的能力,为无监督学习提供了全新的应用场景。这些结合无监督学习的深度学习模型的研究,正在不断推动技术前沿,如Deep Clustering for Unsupervised Learning of Visual Features。

无监督学习未来的发展方向

未来,无监督学习预计将在以下几个方向发展:

  1. 与其他学习范式的融合:无监督学习与半监督学习、强化学习等其他学习方法的融合,将是未来的一个重要趋势。这种融合将使模型能够在更广泛的场景中应用,特别是在标签数据稀缺的情况下。

  2. 更强的解释性和可视化:随着模型变得越来越复杂,提高无监督学习模型的解释性和可视化将成为一个重要的研究方向。这不仅有助于提升模型的透明度和可信度,也有助于更好地理解模型的决策过程。

  3. 大规模数据处理:处理大规模数据集的能力是未来无监督学习的一个关键方向。随着数据量的日益增加,开发能够高效处理这些数据的算法和模型将变得至关重要。

  4. 实时学习和适应性模型:为了应对不断变化的数据和环境,未来的无监督学习模型需要具备实时学习和适应性。这涉及到模型的持续更新和优化,以适应新数据和新情况。

无论是在理论研究还是实际应用中,无监督学习都将继续作为一个重要领域发展。通过不断的探索和创新,无监督学习有望解锁更多的潜力,为我们带来更深入的数据洞察和更广泛的应用场景。

结论

无监督学习领域的挑战与未来趋势指示了该领域的发展方向和潜在的改进空间。随着技术的进步和研究的深入,我们预期无监督学习将在数据科学和人工智能领域扮演越来越重要的角色。

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

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

相关文章

js计算器实现

文章目录 1. 演示效果2. 分析思路3. 代码实现 1. 演示效果 2. 分析思路 给每个按钮添加点击事件&#xff0c;使用eval()进行计算。 3. 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&q…

数据生成 | Matlab实现基于DE差分进化算法的数据生成

数据生成 | Matlab实现基于DE差分进化算法的数据生成 目录 数据生成 | Matlab实现基于DE差分进化算法的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于DE差分进化算法的数据生成&#xff0c;运行环境Matlab2021b及以上&#xff1b; 2.计…

HubSpot如何通过自动化和优化客户服务流程,提升客户满意度和忠诚度?

HubSpot通过自动化和优化客户服务流程&#xff0c;可以有效地提升客户满意度和忠诚度。以下是HubSpot实现这一目标的几个关键步骤&#xff1a; 建立清晰的服务流程&#xff1a;首先&#xff0c;HubSpot帮助企业建立清晰、标准化的客户服务流程。这包括明确的服务阶段定义&…

Codigger Desktop:用户体验与获得收益双赢的革新之作(一)

上周&#xff0c;我们介绍了Codigger Desktop凭借其强大的功能、稳定的性能以及人性化的设计&#xff0c;成为了广大开发者的得力助手。Codigger Desktop除了是开发者的利器外&#xff0c;它以其出色的用户体验和创新的收益模式&#xff0c;为用户提供了一个全新的选择。Codigg…

【线段树】1622. 奇妙序列

本文涉及知识点 设计 数学 线段树 本文基础解法 【设计】 【数学】1622 奇妙序列 LeetCode1622. 奇妙序列 请你实现三个 API append&#xff0c;addAll 和 multAll 来实现奇妙序列。 请实现 Fancy 类 &#xff1a; Fancy() 初始化一个空序列对象。 void append(val) 将整数…

【单片机家电产品--晶闸管(可控硅)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 单片机家电产品–晶闸管 前言 记录学习单片机家电产品内容 已转载记录为主 一、知识点 1 晶体管和晶闸管之间的区别 晶体管和晶闸管之间的区别 2 什么是可控硅&#xf…

WebKit结构揭秘:探秘网页渲染的魔法之源

一、WebKit之心&#xff1a;渲染引擎的魔力 WebKit的渲染引擎是其核心所在&#xff0c;它犹如一位技艺高超的魔法师&#xff0c;将HTML、CSS和JavaScript的魔法咒语转化为绚丽的网页画面。它解析代码&#xff0c;绘制页面&#xff0c;让网页内容跃然屏上&#xff0c;展现出无尽…

宏的使用(C语言详解)

在写一个代码生成可执行文件的过程需要经过编译和链接&#xff0c;编译又要经过三部&#xff1a;预处理&#xff0c;编译&#xff0c;汇编。 #define定义的变量和宏就是在预处理阶段会处理的。 一个简单的宏定义&#xff1a; #include<stdio.h>; #define Max(a,b) a>…

【微服务】SpringCloud之Feign远程调用

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

Mac安装Docker提示Another application changed your Desktop configuration解决方案

1. 问题描述 Mac安装Docker后&#xff0c;提示Another application changed your Desktop configuration&#xff0c;Re-apply configurations无效 2. 解决方案 在终端执行下述命令即可解决&#xff1a; sudo ln -sf /Applications/Docker.app/Contents/Resources/bin/docke…

TLF9471 - High-Speed CAN FD Transceiver

1 框图描述 2 功能描述 CAN收发器被设计用来承受汽车应用的恶劣条件,并支持12V应用。   SBC的控制器区域网络(CAN)收发器部分在汽车和工业应用中提供高速(HS)差分模式数据传输(最高可达2Mbaud) 和接收。它作为CAN协议控制器和与ISO 11898-2:2016和SAE J2284兼容的物理…

基于单片机干湿垃圾自动分类系统

**单片机设计介绍&#xff0c;基于单片机干湿垃圾自动分类系统 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的干湿垃圾自动分类系统是一个集成传感器技术、机械控制和单片机编程于一体的自动化解决方案。该系统的主要目标是实…

MS9740B进行DUT插入损耗的评估,操作步骤?

使用MS9740B进行DUT&#xff08;设备待测&#xff09;插入损耗的评估&#xff0c;首先需要了解MS9740B的基本功能和配置。MS9740B是一款高精度光谱分析仪&#xff0c;支持多种光纤类型&#xff0c;包括SM光纤&#xff08;ITU-T G.652&#xff09;和GI光纤&#xff08;50μm/125…

【C++】C++中的list

一、介绍 官方给的 list的文档介绍 简单来说就是&#xff1a; list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中…

IO流【带有缓冲区的字节输入、输出流;字符输入、输出流 转换流】

day35 学习注意事项 按照流的发展历史去学习注意流与流之间的继承关系举一反三 IO流 继day36 字节流继承图 字节流 应用场景&#xff1a;操作二进制数据&#xff08;音频、视频、图片&#xff09; abstract class InputStream – 字节输入流的基类&#xff08;抽象类&#xff0…

1、认识MySQL存储引擎吗?

目录 1、MySQL存储引擎有哪些&#xff1f; 2、默认的存储引擎是哪个&#xff1f; 3、InnoDB和MyISAM有什么区别吗&#xff1f; 3.1、关于事务 3.2、关于行级锁 3.3、关于外键支持 3.4、关于是否支持MVCC 3.5、关于数据安全恢复 3.6、关于索引 3.7、关于性能 4、如何…

项目经理想提升,可不止PMP这一个证书!

软考 系统集成项目管理工程师 信息系统项目管理师 中高项知识体系 软考价值&#xff1a; 软考的价值体现在多个方面&#xff1a; 在评职称方面&#xff0c;软考可以为个人提供北京工作居住证、一线城市积分落户等方面的支持&#xff0c;有利于个人在工作和生活中的稳定和发…

Java Netty个人对个人私聊demo

一、demo要求 1&#xff09;编写一个Netty个人对个人聊天系统&#xff0c;实现服务器端和客户端之间的数据简单通讯&#xff08;非阻塞&#xff09; 2&#xff09;实现单人对单人聊 3&#xff09;服务器端&#xff1a;可以监测用户上线&#xff0c;离线&#xff0c;并实现消…

【新手上路】C#联合Halcon第一个demo搭建

前言 学习Halcon目的是能够利用C#封装成一个视觉的上位机应用配合机器人或者过程控制来提高生产的效率&#xff0c;尤其是在检测外观和定位方面的应用。现在我们就来搭建第一个demo。让他们能够跑起来&#xff01; Halcon方面 打开Halcon软件&#xff0c;然后先随便写一个代…

ADW310 导轨式单相无线计量仪表-安科瑞黄安南

ADW310 无线计量仪表主要用于计量低压网络的有功电能&#xff0c;具有体积小、精度高、功能丰富等优点&#xff0c;并且可 选通讯方式多&#xff0c;可支持 RS485 通讯和 Lora、4G 等无线通讯方式&#xff0c;增加了外置互感器的电流采样模式&#xff0c;从而方便 用户在不同场…