机器学习(4)Kmeans算法
1、简述聚类分析的重要性及其在机器学习中的应用
聚类分析,作为机器学习领域中的一种无监督学习方法,在数据探索与知识发现过程中扮演着举足轻重的角色。它能够在没有先验知识或标签信息的情况下,通过挖掘数据中的内在结构和规律,将数据对象自动划分为多个类别或簇。每个簇内的对象具有高度的相似性,而不同簇间的对象则表现出明显的差异性。
聚类分析的重要性主要体现在以下几个方面:首先,它可以帮助我们理解数据的分布和特征,发现潜在的数据模式;其次,通过聚类,我们可以识别出数据中的异常值或噪声,提高数据质量;最后,聚类分析还可以为后续的监督学习提供有价值的先验知识,如通过聚类结果初始化分类器的参数等。
在机器学习的广泛应用中,聚类分析发挥着不可或缺的作用。例如,在图像处理中,聚类可以用于图像分割、颜色量化等任务;在市场分析中,聚类可以帮助企业实现客户细分,制定更精准的营销策略;在生物信息学中,聚类则可用于基因表达数据的分析,揭示基因之间的相互作用关系。
2、引入K-means聚类算法,简要介绍其基本概念
在众多聚类算法中,K-means算法因其简单高效而备受青睐。K-means算法的基本思想是:通过迭代的方式,将数据划分为K个不同的簇,并使得每个数据点与其所属簇的质心(或称为中心点、均值点)之间的距离之和最小。
具体来说,K-means算法的执行过程通常包括以下几个步骤:首先,随机选择K个数据点作为初始的簇质心;然后,根据每个数据点与各个簇质心的距离,将其分配给最近的簇;接着,重新计算每个簇的质心,即取簇内所有数据点的平均值作为新的质心;重复上述的分配和更新步骤,直到满足某种终止条件(如簇质心不再发生显著变化或达到预设的迭代次数)。
K-means算法的优点在于其直观易懂、计算速度快且易于实现。然而,它也存在一些局限性,如对初始簇质心的选择敏感、可能陷入局部最优解以及需要预先设定聚类数K等。因此,在实际应用中,我们需要根据具体的问题和数据特点来选择合适的聚类算法,并可能需要对算法进行优化或改进以适应特定的需求。
在接下来的内容中,我们将进一步深入探讨K-means聚类算法的原理、实现细节、优缺点以及在实际应用中的案例。希望通过本文的介绍,读者能够对K-means算法有更深入的理解和认识,并能够将其有效地应用于实际的数据分析和机器学习任务中
二、K-means聚类算法原理
1、K-means算法的基本思想
K-means算法是一种迭代求解的聚类分析算法,其核心思想是将数据集中的n个对象划分为K个聚类,使得每个对象到其所属聚类的中心(或称为均值点、质心)的距离之和最小。这里所说的距离通常指的是欧氏距离,但也可以是其他类型的距离度量。
K-means算法通过迭代的方式不断优化聚类结果,使得每个聚类内的对象尽可能紧密,而不同聚类间的对象则尽可能分开。这种优化过程通常基于某种目标函数,如误差平方和(Sum of Squared Errors, SSE),该目标函数衡量了所有对象到其所属聚类中心的距离之和。
2、算法步骤详解
K-means算法的执行过程通常包括以下几个步骤:
(1)初始化:选择K个初始聚类中心
在算法开始时,需要随机选择K个数据点作为初始的聚类中心。这些初始聚类中心的选择对最终的聚类结果有一定的影响,因此在实际应用中,通常会采用一些启发式的方法来选择较好的初始聚类中心,如K-means++算法。
(2)分配:将每个数据点分配给最近的聚类中心
对于数据集中的每个数据点,计算其与每个聚类中心的距离,并将其分配给距离最近的聚类中心。这一步通常使用欧氏距离作为距离度量,计算公式如下:


(4)迭代:重复分配和更新步骤,直到满足终止条件
重复执行分配和更新步骤,直到满足某种终止条件。常见的终止条件包括:
聚类中心不再发生显著变化:即新的聚类中心与旧的聚类中心之间的距离小于某个预设的阈值。
达到最大迭代次数:为了避免算法陷入无限循环,通常会设置一个最大迭代次数作为终止条件。
在迭代过程中,算法会不断优化聚类结果,使得每个聚类内的对象更加紧密,而不同聚类间的对象更加分散。最终,当满足终止条件时,算法停止迭代并输出最终的聚类结果。
需要注意的是,K-means算法对初始聚类中心的选择和聚类数K的设定非常敏感。不同的初始聚类中心和K值可能会导致完全不同的聚类结果。因此,在实际应用中,通常需要结合具体问题和数据特点来选择合适的初始聚类中心和K值,并可能需要对算法进行多次运行以获取更稳定的结果。
K-means 算法典型例题
为了帮助更好地理解 K-means 算法,下面我们通过一个简单的例子来演示如何使用 K-means 算法进行聚类。
问题描述:
假设我们有一个二维数据集,数据点包含了不同客户的购买行为特征。我们想要将这些客户分成 2 类(即 K=2),以便在营销时进行目标客户分群。数据集如下:
| 客户编号 | 特征1 (收入) | 特征2 (年龄) |
|---|---|---|
| 1 | 2 | 3 |
| 2 | 3 | 3 |
| 3 | 3 | 4 |
| 4 | 8 | 9 |
| 5 | 9 | 10 |
| 6 | 10 | 10 |
K-means 算法步骤
我们将通过以下步骤来应用 K-means 算法。
1. 选择簇的数量 K=2
目标是将数据点分为 2 个簇。
2. 随机选择初始簇中心
随机选择两个数据点作为初始簇中心。假设我们选择数据点 (2, 3) 和 (8, 9) 作为初始簇中心。
- 初始簇中心1:(2,3)
- 初始簇中心2:(8,9)
3. 分配每个数据点到最近的簇中心
计算每个数据点到两个簇中心的距离(通常使用欧几里得距离)并将数据点分配给距离最近的簇中心。


分配结果:
- 簇中心1:(2,3),(3,3),(3,4)
- 突中心2:(8,9),(9,10),(10,10)
4. 重新计算簇中心
我们根据每个簇内的数据点计算新的簇中心。
5. 重新分配数据点
根据新的簇中心,我们再次分配数据点。假设新的簇中心分别为 μ1=(2.67,3.33) 和 μ2=(9,9.67),我们按照相同的方式计算数据点到两个簇中心的距离并进行分配。
重复步骤3和步骤4,直到簇中心不再发生变化。
6. 最终结果
经过若干次迭代,直到簇中心稳定,我们最终得到以下簇:
- 簇1:包含客户 1、客户 2 和 客户 3(收入较低,年龄较小)
- 簇2:包含客户 4、客户 5 和 客户 6(收入较高,年龄较大)
问题描述:
假设我们有以下一个二维数据集,每个数据点代表一个城市的 经度 和 纬度:
| 城市 | 经度 | 纬度 |
|---|---|---|
| 城市1 | 1 | 2 |
| 城市2 | 2 | 3 |
| 城市3 | 3 | 3 |
| 城市4 | 8 | 8 |
| 城市5 | 9 | 9 |
| 城市6 | 10 | 10 |
目标是将这些城市分为 2 个簇(即 K=2)。
K-means 算法的计算步骤:
1. 选择簇的数量 K=2
我们希望将数据集分为两个簇,表示为簇1和簇2。
2. 随机选择初始簇中心
随机选择两个数据点作为初始簇中心。假设我们随机选择:
- 簇中心1:(1,2)
- 簇中心2:(9,9)
3. 分配每个数据点到最近的簇中心
计算每个数据点到两个簇中心的距离,并将数据点分配到距离最近的簇中心。使用欧几里得距离进行计算。
计算每个数据点到簇中心1和簇中心2的距离如下:
分配结果:
- 簇中心1:城市1、城市2、城市3(经度较小,纬度较小)
- 簇中心2:城市4、城市5、城市6(经度较大,纬度较大)
4. 重新计算簇中心
根据每个簇内的数据点计算新的簇中心。
-
簇中心1 的新坐标为:
μ1=(1+2+3/3,2+3+3/3)=(2,2.67) -
簇中心2 的新坐标为:
μ2=(8+9+103/,8+9+10/3)=(9,9)
5. 重新分配数据点
根据新的簇中心,我们重新分配每个数据点。假设新的簇中心分别为 μ1=(2,2.67) 和 μ2=(9,9),我们再次计算每个数据点到两个簇中心的距离,并进行分配。
分配结果:
- 城市1 (1, 2) 距离簇中心1 (2,2.67) 最近,因此继续分配到簇中心1。
- 城市2 (2, 3) 距离簇中心1 最近,因此继续分配到簇中心1。
- 城市3 (3, 3) 距离簇中心1 最近,因此继续分配到簇中心1。
- 城市4 (8, 8) 距离簇中心2 (9,9) 最近,因此继续分配到簇中心2。
- 城市5 (9, 9) 距离簇中心2 最近,因此继续分配到簇中心2。
- 城市6 (10, 10) 距离簇中心2 最近,因此继续分配到簇中心2。
6. 迭代直到簇中心不再变化
经过一次迭代后,簇中心没有发生变化,因此算法停止。
最终结果
经过几次迭代后,我们将这些城市分为两个簇:
- 簇1(较小经度和纬度的城市):城市1、城市2、城市3
- 簇2(较大经度和纬度的城市):城市4、城市5、城市6
三、K-means算法的优点与局限性
K-means算法作为机器学习中常用的聚类方法之一,在实际应用中具有诸多优点,但同时也存在一些局限性。下面我们将详细探讨K-means算法的优点和局限性。
1、优点
(1)简单易懂:
K-means算法的原理直观易懂,通过迭代的方式将数据划分为K个聚类,使得每个数据点到其所属聚类的质心距离之和最小。这种简单直观的思想使得K-means算法易于被理解和接受,适合初学者入门学习。
(2)计算效率高:
K-means算法在迭代过程中,主要涉及到距离计算和均值计算,这些计算相对简单且高效。因此,在处理大规模数据集时,K-means算法通常能够在较短的时间内完成聚类任务,适合用于实时处理或大规模数据处理场景。
(3)易于实现:
K-means算法的实现相对简单,只需按照初始化、分配、更新和迭代的步骤进行即可。这使得K-means算法在编程实践中易于实现和调试,降低了使用门槛。
2、 局限性
(1)对初始聚类中心敏感:
K-means算法的聚类结果在很大程度上受到初始聚类中心选择的影响。如果初始聚类中心选择不当,可能会导致聚类结果出现偏差或不稳定。为了缓解这一问题,可以采用一些启发式方法(如K-means++算法)来优化初始聚类中心的选择。
(2)可能陷入局部最优:
K-means算法在迭代过程中采用贪心策略,每一步都试图找到当前最优解。然而,这种策略可能导致算法陷入局部最优解,而无法达到全局最优。为了克服这一问题,可以尝试使用不同的初始聚类中心进行多次运行,或者结合其他优化算法来改进K-means算法的性能。
(3)需要预先设定聚类数K:
K-means算法需要提前设定聚类数K,这个值的选择往往需要根据具体问题和数据特点来确定。如果K值选择不当,可能会导致聚类结果不符合实际情况或无法有效揭示数据的内在结构。在实际应用中,可以通过一些评估指标(如轮廓系数、肘部法则等)来辅助确定合适的K值。
综上所述,K-means算法具有简单易懂、计算效率高和易于实现等优点,但同时也存在对初始聚类中心敏感、可能陷入局部最优和需要预先设定聚类数K等局限性。因此,在使用K-means算法时,我们需要结合具体问题和数据特点来选择合适的初始聚类中心、K值以及优化策略,以获得更好的聚类效果。
四、K-means算法的应用场景
K-means算法作为一种强大的无监督学习工具,在多个领域有着广泛的应用。下面我们将详细探讨K-means算法在图像处理、市场分析、文本挖掘以及生物信息学等领域的应用。
1、 图像处理
在图像处理领域,K-means算法常用于图像分割和颜色量化等任务。
图像分割:K-means算法能够将图像中的像素点按照颜色、亮度等特征进行聚类,从而实现图像的分割。通过设定不同的聚类数K,可以将图像划分为不同的区域,有助于提取出图像中的目标物体或背景信息。
颜色量化:在图像压缩或简化处理中,K-means算法可以用于减少图像中的颜色数量。通过将颜色空间中的颜色值进行聚类,每个聚类中心代表一种颜色,从而实现对图像颜色的量化。这有助于减小图像文件的大小,同时保持较好的视觉效果。
2、 市场分析
在市场营销领域,K-means算法可以帮助企业实现客户细分和产品推荐等任务。
客户细分:通过对客户的购买记录、浏览行为等数据进行聚类分析,K-means算法可以将客户划分为不同的群体。这些群体在消费习惯、兴趣爱好等方面具有相似性,有助于企业制定更精准的营销策略,提高客户满意度和忠诚度。
产品推荐:基于K-means算法的聚类结果,企业可以为客户推荐与其所在群体喜好相似的产品。这种个性化推荐方式可以提高客户的购买意愿和转化率,从而增加企业的销售额和利润。
3、文本挖掘
在文本挖掘领域,K-means算法可以用于文档聚类和主题识别等任务。
文档聚类:通过对文档中的关键词、词频等特征进行提取和聚类分析,K-means算法可以将相似的文档归为一类。这有助于对大量文档进行组织和分类,方便用户查找和浏览相关信息。
主题识别:基于K-means算法的聚类结果,可以进一步提取出每个聚类中的主题或关键词。这有助于了解文档集的主要内容和热点话题,为后续的文本分析和挖掘提供有价值的线索。
4、生物信息学
在生物信息学领域,K-means算法常用于基因表达数据的聚类分析。
基因表达数据聚类:通过对基因表达数据进行聚类分析,K-means算法可以帮助研究人员发现具有相似表达模式的基因群体。这些基因群体可能参与相同的生物过程或具有相似的功能,有助于揭示基因之间的相互作用关系和生物系统的复杂性。
综上所述,K-means算法在图像处理、市场分析、文本挖掘以及生物信息学等领域具有广泛的应用价值。通过运用K-means算法进行聚类分析,我们可以更好地理解和利用数据中的内在结构和规律,为实际问题的解决提供有力的支持。
五、K-means算法的优化与改进
K-means算法作为一种经典的聚类方法,在实际应用中虽然得到了广泛的使用,但也存在一些问题和局限性。为了提高K-means算法的性能和准确性,研究者们提出了多种优化与改进方法。下面我们将详细探讨初始聚类中心的选择方法、距离度量方式的改进、算法加速技巧以及自适应确定聚类数K的方法。
1、初始聚类中心的选择方法
K-means算法对初始聚类中心的选择非常敏感,不同的初始聚类中心可能导致完全不同的聚类结果。为了优化初始聚类中心的选择,研究者们提出了以下方法:
K-means++算法:K-means++算法通过改进初始聚类中心的选择策略,旨在提高聚类的稳定性和准确性。该算法首先随机选择一个数据点作为第一个初始聚类中心,然后对于每个未被选择的数据点,计算其与已有聚类中心之间的最小距离,并根据该距离的概率分布选择下一个聚类中心。通过这种方式,K-means++算法能够使得初始聚类中心之间距离较远,从而避免陷入局部最优解。
基于密度的初始化:基于密度的初始化方法考虑数据点的分布密度,选择密度较高的区域作为初始聚类中心。这种方法能够更好地反映数据的内在结构,使得聚类结果更加合理。一种常见的基于密度的初始化方法是选择局部密度峰值作为初始聚类中心。
2、距离度量方式的改进
K-means算法默认使用欧氏距离作为数据点之间的距离度量方式。然而,在某些情况下,欧氏距离可能不是最合适的度量方式。为了改进距离度量方式,研究者们提出了以下方法:
使用余弦相似度:余弦相似度是一种衡量两个向量之间夹角的相似度度量方式。在某些情况下,如文本聚类或图像聚类中,使用余弦相似度可能更加合适。余弦相似度能够忽略向量长度的影响,只关注向量之间的方向差异,从而更好地反映数据点之间的相似性。
曼哈顿距离:曼哈顿距离也称为城市街区距离,是两点在标准坐标系上的绝对轴距总和。在处理具有离散特征或高维数据时,曼哈顿距离可能是一个更好的选择。它对于数据的异常值和噪声相对不敏感,因此在某些情况下能够提供更稳定的聚类结果。
3、 算法加速技巧
K-means算法在迭代过程中需要进行大量的距离计算和均值计算,这可能导致算法运行时间较长。为了加速K-means算法的执行,研究者们提出了以下技巧:
使用KD树或球树:KD树和球树是两种常用的空间划分数据结构,能够高效地处理最近邻搜索问题。在K-means算法中,可以使用KD树或球树来加速数据点到聚类中心之间的距离计算,从而提高算法的运行效率。
并行化计算:K-means算法的迭代过程可以并行化执行,即同时处理多个数据点的分配和更新操作。通过利用多核处理器或分布式计算平台,可以显著提高K-means算法的计算速度。
4、自适应确定聚类数K的方法
K-means算法需要提前设定聚类数K,而选择合适的K值往往是一个挑战。为了自适应地确定聚类数K,研究者们提出了以下方法:
轮廓系数:轮廓系数是一种评估聚类效果的指标,它综合考虑了同一聚类内数据点的紧凑度和不同聚类间数据点的分离度。通过计算不同K值下的轮廓系数,可以选择使得轮廓系数最大的K值作为最优聚类数。
肘部法则:肘部法则通过观察聚类误差平方和(SSE)随K值变化的曲线来确定最优聚类数。当K值较小时,增加K值会显著降低SSE;而当K值达到某个阈值后,再增加K值对SSE的降低效果不再明显。这个阈值对应的K值即为最优聚类数。
综上所述,通过对初始聚类中心的选择方法、距离度量方式的改进、算法加速技巧以及自适应确定聚类数K的方法的优化与改进,我们可以提高K-means算法的性能和准确性,使其更好地适应不同领域和场景的需求。
七、总结与展望
1、K-means聚类算法总结
K-means聚类算法是一种无监督学习方法,通过迭代优化将数据点划分为K个不相交的子集(即聚类)。算法的核心思想是通过初始化聚类中心,然后不断迭代更新每个聚类的中心点,直至聚类结果收敛。每个数据点被分配到距离最近的聚类中心所在的聚类中,而聚类中心则是其所属聚类中所有数据点的均值。
K-means算法的优点在于其实现简单、计算效率高,并且能够处理大规模数据集。它不需要预先定义复杂的模型,而是通过数据自身的分布特性进行聚类。此外,K-means算法对于球形或凸形的数据集聚类效果较好。
然而,K-means算法也存在一些缺点。首先,它对于初始聚类中心的选择非常敏感,不同的初始选择可能导致截然不同的聚类结果。其次,K-means算法需要预先设定聚类数K,而选择合适的K值通常是一个挑战。此外,算法对噪声和异常值也比较敏感,因为它们可能会显著影响聚类中心的位置。
K-means算法在许多领域都有广泛的应用场景。例如,在市场营销中,它可以用于客户细分,帮助企业更好地理解不同客户群体的需求和行为模式。在图像处理中,K-means算法可以用于图像分割,将图像划分为不同的区域或对象。此外,它还可以用于生物信息学、社交网络分析等领域。
为了优化K-means算法的性能和稳定性,研究者们提出了多种改进方法。这包括使用更好的初始聚类中心选择策略(如K-means++)、改进距离度量方式(如使用余弦相似度或曼哈顿距离)、采用加速技巧(如利用KD树或球树加速最近邻搜索),以及自适应确定聚类数K的方法(如通过轮廓系数或肘部法则确定K值)。
2、K-means聚类算法展望
随着机器学习和大数据技术的不断发展,K-means聚类算法仍有广阔的研究和应用前景。未来,K-means算法可能会在以下几个方面得到进一步的发展:
首先,随着深度学习技术的兴起,研究者们可能会探索将K-means算法与深度学习模型相结合,以提高聚类的准确性和鲁棒性。例如,可以利用深度学习模型提取数据的深层次特征,然后将这些特征作为K-means算法的输入进行聚类。
其次,针对K-means算法对初始聚类中心敏感的问题,未来可能会研究更加鲁棒的初始化方法,以减少不同初始选择对聚类结果的影响。此外,研究者们还可以探索自适应确定聚类数K的方法,以更好地适应不同数据集的特点和需求。
最后,随着数据规模的不断增大和计算资源的日益丰富,K-means算法的高效实现和并行化计算也将成为研究的重点。通过利用分布式计算平台或GPU加速技术,可以进一步提高K-means算法的处理速度和效率,使其能够更好地应对大规模数据集的挑战。
综上所述,K-means聚类算法作为一种经典的无监督学习方法,在未来仍有很大的发展潜力和应用空间。通过不断优化和改进算法性能,我们可以期待K-means算法在更多领域发挥更大的作用。
相关文章:
机器学习(4)Kmeans算法
1、简述聚类分析的重要性及其在机器学习中的应用 聚类分析,作为机器学习领域中的一种无监督学习方法,在数据探索与知识发现过程中扮演着举足轻重的角色。它能够在没有先验知识或标签信息的情况下,通过挖掘数据中的内在结构和规律…...
Oracle之表空间迁移
问题背景:一个数据表随着时间的累积,导致所在表空间占用很高,里面历史数据可以清除,保留近2个月数据即可 首先通过delete删除了2个月以前的数据。 按网上的教程进行空间压缩,以下sql在表所在用户执行: -- 允许表重新…...
域渗透入门靶机之HTB-Cicada
easy难度的windows靶机 信息收集 端口探测 nmap -sT --min-rate 10000 -p- 10.10.11.35 -oA ./port 发现开放了53,88,389等端口,推测为域控 进一步信息收集,对爆破的端口进行更加详细的扫描 小tips:对于众多的端口&…...
ue5 motion matching
ue5.5 gameanimationsample 先看动画蓝图 核心两个node 第一个是根据数据选择当前的pose 第二个是缓存一段历史记录,为第一个node选择的时候提供数据。 在animinstance的update方法中 每帧都更新这个函数,每帧更新trajectory的数据 看看第一个node的…...
【从零开始的LeetCode-算法】383. 赎金信
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1: 输入&#…...
记录模板学习(持续更新)
目的: 学习C模板的编写,使用模板类包装一个可调用对象 可调用对象包括:普通函数, lambda表达式, 类成员函数 可以参考到QtConcurrent::run的实现,可以看到这个函数有非常多重载,其中可以接受类…...
Android hid 数据传输(device 端 )
最近一直在处理hid 数据需求,简而言之就是两台设备直接可以通过usb 线互相传递数据。 项目架构 为什么Device 端要采用HID(人机接口设备)的方式发送和接收数据呢? 主要是速度快,举个例子,就是鼠标移动&am…...
MaxEnt模型在物种分布模拟中如何应用?R语言+MaxEnt模型融合物种分布模拟、参数优化方法、结果分析制图与论文写作
目录 第一章 以问题导入的方式,深入掌握原理基础 第二章 常用数据检索与R语言自动化下载及可视化方法 第三章 R语言数据清洗与特征变量筛选 第四章 基于ArcGIS、R数据处理与进阶 第五章 基于Maxent的物种分布建模与预测 第六章 基于R语言的模型参数优化 第七…...
第3章:文本样式 --[CSS零基础入门]
CSS(层叠样式表)允许你以多种方式定制文本的外观。以下是一些常用的文本和字体相关的CSS属性: 1.字体 字体系列 当然,下面是两个使用不同字体系列的CSS示例。每个示例都展示了如何指定一个字体系列,并提供备用字体以确保在用户的系统中找不到首选字体时仍有合适的字体可…...
mysql 架构详解
MySQL的架构可以自顶向下分为多个层次,每个层次都有其特定的功能和组件。以下是对MySQL架构的详细解析: 一、整体架构概述 MySQL的整体架构包括MySQL Connectors(连接器)、MySQL Shell、连接层、服务层、存储引擎层和文件系统层…...
无代码探索AI大模型:腾讯云函数计算的卓越实践
在数字化转型的浪潮中,人工智能(AI)技术已经成为企业提升竞争力的关键。然而,对于许多业务人员来说,技术门槛高、开发周期长等问题限制了他们快速探索和应用AI大模型的能力。同时,对于缺乏GPU资源的开发者来…...
解决Ubuntu在VMware关机时,老是一个光标在那里闪动几分钟,才能关机的问题
把强制关机的等待时间缩短即可。 编辑 /etc/systemd/system.conf 文件 sudo gedit /etc/systemd/system.conf把 #DefaultTimeoutStartSec90s修改为 #DefaultTimeoutStartSec10s改完之后重载一下: sudo systemctl daemon-reload然后关机再试一下,这样…...
word poi-tl 图表功能增强,插入图表折线图、柱状图、饼状图
目录 问题解决问题poi-tl介绍 功能实现引入依赖功能介绍 功能实例饼图模版代码效果图 雷达图(模版同饼图)代码效果图 柱状图(模版同饼图)代码效果图 附加CustomCharts 工具类CustomChartSingleSeriesRenderData 数据对象CustomCha…...
常见网络钓鱼类型
网络钓鱼是一种网络攻击,是指具有恶意动机的攻击者伪装欺骗人们并收集用户名或密码等敏感信息的一系列行为。由于网络钓鱼涉及心理操纵并依赖于人为失误(而不是硬件或软件漏洞),因此被认定为是一种社会工程攻击。 1. 普通网络钓鱼(群攻&…...
数字图像处理考研考点(持续更新)
一、数字图像基本概念 1、人眼视觉特性 (1)眼睛上有两类光感受器:锥状体和杆状体 锥状体(锥细胞):约 700 万个,对颜色高度敏感,每个锥状体都连接到神经末梢,人可以充分地分辨图像细节。锥细胞…...
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba介绍 在当今的软件开发领域,微服务架构因其灵活性、可扩展性和独立性等优势而备受青睐。Spring Cloud Alibaba 作为一款强大的一站式微服务解决方案,为开发者提供了丰富的工具和组件,帮助他们轻松构建和管理复杂的微服务…...
ubuntu16.04部署dify教程
文章目录 1、克隆 Dify 源代码至本地环境2、加速Dify镜像文件下载3、启动 Dify4、访问 Dify5、更新 Dify6、常见问题及解决方案(1)容器restarting(2)日志文件上限(3)重置管理员密码(4࿰…...
JavaWeb文件上传
文件上传总览 文件上传主要是指将本地文件(包括但不限于图片、视频、音频等)上传到服务器,提供其他用户浏览或下载的过程。在日常生活中,我们在很多情况下都需要使用文件上传功能,比如:发微博、发朋友圈等…...
软件工程——期末复习(3)
一、题目类(老师重点提到过的题目) 1、高可靠性是否意味着高可用性?试举例证明自己的观点? 答:高可靠性不意味着高可用性 可靠性说明系统已经准备好,马上可以使用;可用性是系统可以无故障的持续运行,是一…...
apache的BeanUtils的Converter被相互污染覆盖问题
问题描述 apache的BeanUtils工具集中用来把map对象转换为java对象的BeanUtils#populate方法会因为单例的原因其转换器Converter被相互污染覆盖问题 maven依赖 <dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...


