您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

聚类算法全面总结!!

时间:2023-09-28 14:08:51  来源:微信公众号  作者:深夜努力写Python

今儿想和大家聊聊关于聚类的问题!!!!

在这之前咱们已经聊过 各个算法的优缺点的总结,以及8个回归类算法、7个正则化算法的总结、5 个集成算法模型、svm算法的全部总结、距离算法总结!!

感兴趣的可以翻到之前看看~

大部分人对聚类的认识可以归纳为以下几个方面:

  1. 数据分组:许多人将聚类视为将数据划分为不同的组或簇,使得同一组内的数据点更加相似或相关。这种观点认为聚类是一种无监督学习技术,用于发现数据中的内在结构和模式。

  2. 相似性度量:通常认为聚类算法通过计算数据点之间的相似性或距离来确定它们是否属于同一簇。相似性度量可以基于欧氏距离、余弦相似度等方法。

  3. 发现未知群体:聚类被视为一种工具,用于发现现有数据中隐藏的未知群体。通过聚类分析,可以发现数据集中的潜在模式、群体或类别,从而帮助了解数据的特征和结构。

  4. 应用领域:人们普遍认为聚类广泛应用于各个领域,如市场细分、客户分析、图像分割、推荐系统等。聚类可以帮助理解和利用大规模数据集,探索数据中的关联性和趋势。

然而,值得注意的是,不同人对聚类的认识和理解可能存在差异,因为聚类本质上是一个多样化的领域,涉及多种算法和技术。此外,聚类也可能面临一些挑战,如选择合适的距离度量、确定最佳簇的数量等。因此,在使用聚类算法时,需要根据具体问题和数据特点进行适当的选择和调整。

今天就来详细说说常见的几种:

  • K均值聚类
  • 层次聚类
  • 密度聚类
  • 谱聚类
  • EM聚类
  • 模糊聚类
以下代码均可直接运行起来,方便学习!

大家伙如果觉得还不错!可以点赞、转发安排起来,让更多的朋友看到。

K均值聚类

K均值聚类是一种常用的无监督学习算法,用于将数据点划分为不同的簇,使得同一簇内的数据点彼此相似度较高,不同簇之间的数据点相似度较低。

这个算法的目标是将数据点分为K个簇,其中K是用户定义的参数。K均值聚类的原理相对简单,主要思想是通过迭代寻找K个簇的中心点,将每个数据点分配给距离其最近的中心点,然后更新中心点的位置,直到满足停止条件为止。

原理介绍

1、选择要分成的簇的数量K。

2、随机初始化K个中心点,这些中心点可以是从数据集中随机选择的数据点。

3、重复以下过程,直到满足停止条件:

  • 将每个数据点分配到距离其最近的中心点所属的簇。
  • 对每个簇,计算所有数据点的平均值,并将其作为新的中心点。

停止条件通常可以是以下之一:

  • 中心点不再改变或改变非常小。
  • 数据点不再改变其所属簇。

公式表达

K均值聚类的主要公式包括:

  1. 距离度量(一般使用欧氏距离):

    对于两个数据点X和Y,它们之间的欧氏距离可以表示为:

    其中,n是特征的数量。

  2. 计算每个数据点到每个中心点的距离:

    其中,是第i个中心点,表示数据点X到中心点的距离。

  3. 分配数据点到最近的中心点:

    即,将数据点X分配到距离它最近的中心点所属的簇。

  4. 更新中心点:

    即,将每个簇的中心点更新为该簇内所有数据点的平均值。

一个案例

一个用Python/ target=_blank class=infotextkey>Python实现K均值聚类:

import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(0)
X = np.random.rand(100, 2)

# 使用K均值聚类,假设要分成3个簇
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)

# 获取簇的中心点和每个数据点的所属簇
centers = kmeans.cluster_centers_
labels = kmeans.labels_

# 绘制数据点和簇中心
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.title('K-Means Clustering')
plt.show()

这段代码首先生成一些随机数据,然后使用scikit-learn库的KMeans类进行聚类,并绘制了数据点和簇中心的图形。

可以看到K均值聚类是如何将数据点分成不同的簇的,并找到簇的中心点。图形展示了数据点的分布以及簇中心的位置。

层次聚类

层次聚类 通过构建数据点之间的层次结构来组织簇。这种层次结构通常以树状图(树状图或谱系图)的形式呈现,可以帮助理解数据点之间的相似性关系以及簇之间的关系。

层次聚类可以分为两种主要类型:自上而下的凝聚聚类和自下而上的分裂聚类。

原理介绍

  • 凝聚聚类(Agglomerative Clustering):从底部开始,每个数据点被视为一个单独的簇,然后迭代地合并最接近的簇,直到只剩下一个大的簇。
  • 分裂聚类(Divisive Clustering):从顶部开始,所有数据点被视为一个大的簇,然后逐渐分裂成更小的簇,直到每个数据点都是一个单独的簇。

层次聚类的主要步骤包括:

  1. 初始化:将每个数据点视为一个独立的簇。
  2. 合并(对于凝聚聚类)或分裂(对于分裂聚类)簇以创建一个新的层次结构。
  3. 重复步骤2,直到满足停止条件。

公式表达

在层次聚类中,距离度量是关键。常用的距离度量包括欧氏距离、曼哈顿距离、马氏距离等,具体选择取决于问题的性质。合并或分裂簇的准则也可以有多种,例如最短距离、最长距离、平均距离等。

一个Python案例

使用 scikit-learn 实现层次聚类:

import numpy as np
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
from scipy.cluster.hierarchy import dendrogram

# 生成随机数据
np.random.seed(0)
X = np.random.rand(10, 2)

# 使用凝聚聚类,假设要分成2个簇
agg_clustering = AgglomerativeClustering(n_clusters=2)
agg_clustering.fit(X)

# 绘制树状图(谱系图)
linkage_matrix = np.column_stack([agg_clustering.children_, agg_clustering.distances_])
dendrogram(linkage_matrix, p=10, truncate_mode='level')

plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Data point index')
plt.ylabel('Distance')
plt.show()

首先生成一些随机数据,然后使用scikit-learn库的AgglomerativeClustering类进行凝聚聚类,并绘制了树状图(谱系图)。树状图显示了数据点的分层结构,以及簇之间的合并情况。

 

深夜努力写Python
Python、机器学习算法
22篇原创内容
公众号
 

密度聚类

密度聚类 根据数据点周围的密度来发现簇。最著名的密度聚类算法之一是DBSCAN(Density-Based Spatial Clustering of Applications with Noise)。

DBSCAN是一种基于密度的聚类算法,它的主要思想是根据数据点周围的密度来确定簇的边界。

与K均值等算法不同,DBSCAN不需要事先指定簇的数量,而且能够发现各种形状的簇,同时还能识别异常点(噪声)。

原理介绍

DBSCAN 算法的核心思想是通过以下两个参数来定义簇:

1、**ε (epsilon)**:表示半径,它用来确定一个点的邻域范围。

2、MinPts:表示一个点的邻域内至少包含的数据点数目。

DBSCAN 算法的工作流程如下:

1、随机选择一个未被访问的数据点作为起始点。

2、计算该点的ε邻域内的数据点数量。

3、如果邻域内的数据点数目大于等于MinPts,则将该点标记为核心点(Core Point),并将其邻域内的所有点加入同一簇中。

4、重复以上过程,直到无法找到更多的核心点。

5、选择下一个未被访问的数据点,继续上述过程,直到所有数据点都被访问。

最终,所有被访问的点都将属于某个簇或者被标记为噪声点。

关键概念

  • ε邻域:对于点P,它的ε邻域包含了距离点P不超过ε的所有点。
  • 核心点(Core Point):如果点P的ε邻域内至少包含MinPts个数据点,那么点P被标记为核心点。
  • 边界点(Border Point):如果点P的ε邻域内包含少于MinPts个数据点,但它是某个核心点的邻接点,那么点P被标记为边界点。
  • 噪声点(Noise Point):如果点P不是核心点,也不是边界点,那么点P被标记为噪声点。

一个案例

使用 Scikit-Learn 中的DBSCAN 做一个密度聚类。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_blobs

# 创建一个随机数据集
X, _ = make_blobs(n_samples=1000, centers=3, cluster_std=1.0, random_state=42)

# 使用DBSCAN算法进行密度聚类
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan.fit(X)

# 获取每个点的簇标签
labels = dbscan.labels_

# 绘制聚类结果
unique_labels = np.unique(labels)
colors = plt.cm.Spectral(np.linspace(0, 1, len(unique_labels)))

for label, color in zip(unique_labels, colors):
    if label == -1:
        # 噪声点用黑色表示
        color = 'k'
    
    class_member_mask = (labels == label)
    xy = X[class_member_mask]
    plt.scatter(xy[:, 0], xy[:, 1], c=color, s=20, label='Cluster %d' % label)

plt.title('DBSCAN Clustering')
plt.legend()
plt.show()

这个示例使用了Scikit-Learn中的DBSCAN类来对一个具有3个簇的数据集进行聚类。

实际情况中,可以根据自己的数据和参数来调整代码以适应不同的情况。

谱聚类

谱聚类 通过将数据集表示为图的形式来进行聚类分析。

谱聚类在图论、线性代数和谱分析等领域有广泛的应用,它能够有效地处理复杂的数据结构,并且在一些情况下表现出色。

原理介绍

1、构建相似度图(Affinity Matrix):首先,将数据集中的样本视为图的节点,计算每一对样本之间的相似度。通常使用高斯核函数来度量相似性,具体计算方式如下:

 

这里,表示样本和之间的相似度,和是样本的特征向量,是高斯核的带宽参数。

2、构建拉普拉斯矩阵(Laplacian Matrix):将相似度矩阵转换成拉普拉斯矩阵。常用的拉普拉斯矩阵有两种形式:

a. 无向图拉普拉斯矩阵(Unnormalized Laplacian):,其中是度矩阵,其对角线元素表示节点的度(与节点相连的边的数量),是相似度矩阵。

b. 对称归一化拉普拉斯矩阵(Normalized Laplacian):,其中是单位矩阵。

3、计算特征向量:通过求解拉普拉斯矩阵的特征值问题,得到其前个最小特征值对应的特征向量,构成矩阵。

4、聚类:将矩阵的每一行作为新的特征向量,然后使用传统的聚类算法(如K均值)对这些特征向量进行聚类。

一个Python案例

依旧使用 Scikit-Learn 进行实现:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import SpectralClustering
from sklearn.metrics import pairwise_distances
from scipy.sparse import csgraph

# 生成一个随机的月亮形状的数据集
X, _ = make_moons(n_samples=1000, noise=0.05, random_state=42)

# 计算相似度矩阵
sigma = 0.2
W = np.exp(-pairwise_distances(X, metric="sqeuclidean") / (2.0 * sigma ** 2))

# 构建对称归一化拉普拉斯矩阵
D = np.diag(W.sum(axis=1))
L = D - W
D_sqrt_inv = np.linalg.inv(np.sqrt(D))
L_sym = np.dot(np.dot(D_sqrt_inv, L), D_sqrt_inv)

# 计算特征向量
k = 2  # 聚类数
eigenvalues, eigenvectors = np.linalg.eigh(L_sym)
X_new = eigenvectors[:, :k]

# 使用谱聚类
sc = SpectralClustering(n_clusters=k, affinity="precomputed", random_state=42)
labels = sc.fit_predict(W)

# 可视化结果
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap="viridis")
plt.title("Spectral Clustering Result")
plt.subplot(1, 2, 2)
plt.scatter(X[:, 0], X[:, 1], c=_, cmap="viridis")
plt.title("Original Data")
plt.show()

首先生成一个月亮形状的数据集,然后计算相似度矩阵,构建对称归一化拉普拉斯矩阵,计算特征向量,最后使用谱聚类对数据集进行聚类,并可视化聚类结果和原始数据。

 

EM聚类

EM聚类 基于概率分布对数据进行建模,通过迭代的期望和最大化步骤来估计模型参数,并将数据分为不同的聚类。EM聚类通常用于处理混合分布的数据,其中每个聚类被建模为一个概率分布。

原理介绍

EM聚类的核心思想是将数据集中的每个样本视为来自于一个潜在的分布(通常是多元高斯分布)的观测结果。该算法迭代地执行两个步骤:

1、Expectation Step(E步骤):在这一步中,计算每个样本属于每个聚类的概率,即计算后验概率。这一步使用当前估计的模型参数(均值和协方差矩阵)来计算后验概率。

2、Maximization Step(M步骤):在这一步中,基于E步骤中计算得到的后验概率,更新模型的参数,包括均值和协方差矩阵,以使似然函数最大化。这一步是一个最大似然估计(MLE)步骤。

重复执行E步骤和M步骤,直到收敛或达到预定的迭代次数。

最终,每个样本将被分配到一个聚类中,同时模型的参数将收敛到使数据最可能的参数值。

公式表达

EM聚类的主要数学公式涉及多元高斯分布。假设有个聚类,每个聚类被建模为一个多元高斯分布:

1、多元高斯分布

多元高斯分布的概率密度函数如下,其中是均值,是协方差矩阵,是样本特征向量:

2、E步骤:计算每个样本属于每个聚类的后验概率,即条件概率:

其中,表示样本属于聚类的后验概率,是聚类的先验概率。

3、M步骤:更新模型参数,包括均值和协方差矩阵:

其中, 是更新后的聚类的均值, 是更新后的聚类的协方差矩阵。

一个案例

下面使用EM聚类算法对一个大型数据集进行聚类:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.mixture import GaussianMixture

# 生成一个随机的大型数据集
X, _ = make_blobs(n_samples=2000, centers=4, random_state=42)

# 使用EM聚类
gmm = GaussianMixture(n_components=4, random_state=42)
labels = gmm.fit_predict(X)

# 可视化结果
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap="viridis")
plt.title("EM Clustering Result")
plt.show()

代码中生成了一个包含4个聚类数据集,并使用EM聚类算法对数据进行聚类,并最终可视化聚类结果。

EM 聚类算法能够有效地识别数据中的聚类结构。

 

模糊聚类

模糊聚类与传统的硬聚类方法(如K均值)不同,它允许数据点属于多个不同的聚类,而不是仅属于一个确定的聚类。

模糊聚类通常使用模糊集合理论来描述数据点与聚类的隶属度(membership degree),因此也称为模糊C均值(Fuzzy C-Means,FCM)算法。

原理介绍

模糊聚类的目标是将数据点划分为多个模糊聚类,每个数据点可以与每个聚类关联一个隶属度,表示其属于该聚类的程度。这个隶属度通常在0到1之间,0表示不属于聚类,1表示完全属于聚类。

FCM的主要思想是最小化数据点与聚类中心之间的加权欧氏距离的平方,其中权重是隶属度的幂。这可以用以下公式表示:

对于数据点i和聚类:

其中:

  •  是目标函数,要最小化的距离总和。
  •  是数据点的数量。
  •  是聚类的数量。
  •  是数据点i属于聚类j的隶属度。
  •  是模糊度(通常大于1,通常设置为2)。
  •  是数据点i的特征向量。
  •  是聚类j的中心。

FCM 的优化过程通常使用迭代方法,通过更新隶属度和聚类中心来逐步优化目标函数。

一个案例

使用sklearn库中的FCM算法进行模糊聚类:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score, calinski_harabasz_score, davies_bouldin_score, adjusted_rand_score

from fcmeans import FCM

# 生成模拟数据
n_samples = 3000
n_features = 2
n_clusters = 4
X, y = make_blobs(n_samples=n_samples, n_features=n_features, centers=n_clusters, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 使用FCM进行模糊聚类
fcm = FCM(n_clusters=n_clusters)
fcm.fit(X_scaled)

# 获取聚类标签
fuzzy_labels = np.argmax(fcm.u, axis=1)

# 绘制模糊聚类结果
plt.figure(figsize=(10, 6))
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=fuzzy_labels, cmap='viridis', s=50, alpha=0.5)
plt.scatter(fcm.centers[:, 0], fcm.centers[:, 1], marker='X', c='red', s=200, label='Cluster Centers')
plt.title('Fuzzy Clustering with FCM')
plt.legend()
plt.show()

# 计算模糊聚类的轮廓系数
silhouette_avg = silhouette_score(X_scaled, fuzzy_labels)
print(f'Silhouette Score: {silhouette_avg}')

# 计算每个数据点的轮廓系数
silhouette_values = silhouette_samples(X_scaled, fuzzy_labels)

# 绘制轮廓系数图
plt.figure(figsize=(8, 6))
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=fuzzy_labels, cmap='viridis', s=50, alpha=0.5)
plt.title('Silhouette Plot for Fuzzy Clustering')
plt.xlabel('Silhouette Coefficient Values')
plt.ylabel('Cluster Labels')
plt.colorbar()
plt.show()

首先生成模拟数据,然后使用FCM进行模糊聚类。

然后计算了轮廓系数、Calinski-Harabasz指数、Davies-Bouldin指数和调整兰德指数(如果有真实标签)。

最后,绘制了模糊聚类结果的散点图和轮廓系数图,以可视化评估聚类质量。

注意:需要提前安装scikit-learnmatplotlibnumpyfcmeans

最后

今天介绍了关于聚类的一些常用算法:K均值聚类、层次聚类、密度聚类、谱聚类、EM聚类、模糊聚类。


Tags:聚类算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
无监督学习中的聚类算法综述
无监督学习是机器学习领域中的一个重要分支,其目标是从未标记的数据中发现隐藏的模式和结构。聚类算法作为无监督学习的核心方法之一,被广泛应用于数据分析、模式识别和信息检...【详细内容】
2023-11-24  Search: 聚类算法  点击:(189)  评论:(0)  加入收藏
无监督聚类算法在数据挖掘中的新突破
数据挖掘作为一种从大规模数据中提取有用信息的技术,已经在各个领域中得到广泛应用。而无监督聚类算法作为数据挖掘的重要工具之一,近年来在新的突破方面取得了显著进展。本文...【详细内容】
2023-11-21  Search: 聚类算法  点击:(231)  评论:(0)  加入收藏
聚类算法在大规模数据分析中的效果评估
在大规模数据分析中,聚类算法是一种常用的数据挖掘技术,用于将数据集划分为具有相似特征的群组。然而,对于大规模数据集,评估聚类算法的效果变得尤为重要。本文将探讨聚类算法在...【详细内容】
2023-11-21  Search: 聚类算法  点击:(268)  评论:(0)  加入收藏
K均值聚类算法:数据聚类的常用技术
在数据分析和机器学习领域,聚类是一种常用的数据分析技术,用于将相似的数据点分组或聚集在一起。K均值聚类算法是一种经典的聚类算法,被广泛应用于各个领域。本文将介绍K均值聚...【详细内容】
2023-11-14  Search: 聚类算法  点击:(271)  评论:(0)  加入收藏
聚类算法全面总结!!
今儿想和大家聊聊关于聚类的问题!!!!在这之前咱们已经聊过 各个算法的优缺点的总结,以及8个回归类算法、7个正则化算法的总结、5 个集成算法模型、svm算法的全部总结、距离算法总...【详细内容】
2023-09-28  Search: 聚类算法  点击:(307)  评论:(0)  加入收藏
RVN 一种新的聚类算法
当我们需要对数据集进行聚类时,我们可能首先研究的算法是 K means, DBscan, hierarchical clustering 。 那些经典的聚类算法总是将每个数据点视为一个点。 但是,这些数据点在...【详细内容】
2022-01-26  Search: 聚类算法  点击:(301)  评论:(0)  加入收藏
几种常用的基于密度的聚类算法
这里介绍的几种常用基于密度聚类算法包括:DBSCAN、OPTICS、DENCLUE。1. DBSCANDBSCAN (Density Based Spatial Clustering of Application with Noise)[1] 算法的核心思想是,...【详细内容】
2021-10-19  Search: 聚类算法  点击:(486)  评论:(0)  加入收藏
各种聚类算法(原理+代码+对比分析)最全总结
一、聚类的目标使同一类对象的相似度尽可能地大;不同类对象之间的相似度尽可能地小。二、聚类算法分类1.基于划分给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一...【详细内容】
2020-04-14  Search: 聚类算法  点击:(1686)  评论:(0)  加入收藏
如何正确选择聚类算法?
本文将介绍四种基本的聚类算法—层次聚类、基于质心的聚类、最大期望算法和基于密度的聚类算法,并讨论不同算法的优缺点。...【详细内容】
2019-10-28  Search: 聚类算法  点击:(607)  评论:(0)  加入收藏
▌简易百科推荐
小红书、视频号、抖音流量算法解析,干货满满,值得一看!
咱们中国现在可不是一般的牛!网上的网友已经破了十个亿啦!到了这个互联网的新时代,谁有更多的人流量,谁就能赢得更多的掌声哦~抖音、小红书、、视频号,是很多品牌必争的流量洼地...【详细内容】
2024-02-23  二手车小胖说    Tags:流量算法   点击:(12)  评论:(0)  加入收藏
雪花算法详解与Java实现:分布式唯一ID生成原理
SnowFlake 算法,是 Twitter 开源的分布式 ID 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 ID。在分布式系统中的应用十分广泛,且 ID 引入了时间戳...【详细内容】
2024-02-03   一安未来  微信公众号  Tags:雪花算法   点击:(50)  评论:(0)  加入收藏
程序开发中常用的十种算法,你用过几种?
当编写程序时,了解和使用不同的算法对解决问题至关重要。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明。1. 冒泡排序 (Bubble Sort):冒泡排序是一种简单的比...【详细内容】
2024-01-17  架构师老卢  今日头条  Tags:算法   点击:(44)  评论:(0)  加入收藏
百度推荐排序技术的思考与实践
本文将分享百度在推荐排序方面的思考与实践。在整个工业界的推广搜场景上,特征设计通常都是采用离散化的设计,需要保证两方面的效果,一方面是记忆,另一方面是泛化。特征都是通过...【详细内容】
2024-01-09  DataFunTalk  微信公众号  Tags:百度推荐   点击:(73)  评论:(0)  加入收藏
什么是布隆过滤器?如何实现布隆过滤器?
以下我们介绍了什么是布隆过滤器?它的使用场景和执行流程,以及在 Redis 中它的使用,那么问题来了,在日常开发中,也就是在 Java 开发中,我们又将如何操作布隆过滤器呢?布隆过滤器(Blo...【详细内容】
2024-01-05  Java中文社群  微信公众号  Tags:布隆过滤器   点击:(87)  评论:(0)  加入收藏
面向推荐系统的深度强化学习算法研究与应用
随着互联网的快速发展,推荐系统在各个领域中扮演着重要的角色。传统的推荐算法在面对大规模、复杂的数据时存在一定的局限性。为了解决这一问题,深度强化学习算法应运而生。本...【详细内容】
2024-01-04  数码小风向    Tags:算法   点击:(89)  评论:(0)  加入收藏
非负矩阵分解算法:从非负数据中提取主题、特征等信息
非负矩阵分解算法(Non-negativeMatrixFactorization,简称NMF)是一种常用的数据分析和特征提取方法,主要用于从非负数据中提取主题、特征等有意义的信息。本文将介绍非负矩阵分解...【详细内容】
2024-01-02  毛晓峰    Tags:算法   点击:(62)  评论:(0)  加入收藏
再谈前端算法,你这回明白了吗?
楔子 -- 青蛙跳台阶一只青蛙一次可以跳上一级台阶,也可以跳上二级台阶,求该青蛙跳上一个n级的台阶总共需要多少种跳法。分析: 当n=1的时候,①只需要跳一次即可;只有一种跳法,即f(...【详细内容】
2023-12-28  前端爱好者  微信公众号  Tags:前端算法   点击:(107)  评论:(0)  加入收藏
三分钟学习二分查找
二分查找是一种在有序数组中查找元素的算法,通过不断将搜索区域分成两半来实现。你可能在日常生活中已经不知不觉地使用了大脑里的二分查找。最常见的例子是在字典中查找一个...【详细内容】
2023-12-22  小技术君  微信公众号  Tags:二分查找   点击:(78)  评论:(0)  加入收藏
强化学习算法在资源调度与优化中的应用
随着云计算和大数据技术的快速发展,资源调度与优化成为了现代计算系统中的重要问题。传统的资源调度算法往往基于静态规则或启发式方法,无法适应动态变化的环境和复杂的任务需...【详细内容】
2023-12-14  职场小达人欢晓    Tags:算法   点击:(164)  评论:(0)  加入收藏
站内最新
站内热门
站内头条