当前位置: 首页 > news >正文

亲和传播聚类算法应用(Affinity Propagation)

亲和传播聚类算法应用(Affinity Propagation)

亲和传播(Affinity Propagation,简称 AP)是一种基于“消息传递”的聚类算法,与 K-Means 等传统聚类方法不同,它不需要用户预先指定簇的数量,而是通过在数据点之间传递相似度信息来自动确定簇数。其核心思想是每个数据点都会向其他数据点发送关于是否可以作为簇中心的“责任”信息,同时也会接收来自其他数据点的“可用性”信息,从而在算法迭代中自我调整,最终找到簇中心。

1. 亲和传播的基本思路

亲和传播算法通过两个主要的消息:责任值 $r_{ij} $ 和可用性值 a i j a_{ij} aij,它首先通过相似度矩阵计算数据点之间的相似性,然后通过迭代更新责任值和可用性值,最终根据这些消息选择簇中心并确定每个数据点所属的簇。

1.1 相似度矩阵

首先,计算数据点之间的相似度矩阵 S S S。给定 NN 个数据点 { x 1 , x 2 , … , x N } \{x_1, x_2, \dots, x_N\} {x1,x2,,xN},相似度 S i j S_{ij} Sij 表示数据点 x i x_i xi x j x_j xj 之间的相似度(通常使用欧几里得距离或余弦相似度等)。

对于欧几里得距离的相似度:

S i j = − ∥ x i − x j ∥ 2 S_{ij} = -\| x_i - x_j \|^2 Sij=xixj2

对于余弦相似度:

S i j = x i ⋅ x j ∥ x i ∥ ∥ x j ∥ S_{ij} = \frac{x_i \cdot x_j}{\| x_i \| \| x_j \|} Sij=xi∥∥xjxixj

1.2 责任值

责任值 r i j r_{ij} rij 衡量数据点 x j x_j xj 对数据点 x i x_i xi 作为簇中心的吸引力。它考虑了数据点 x j x_j xj 作为簇中心的相似度,并减去其他数据点作为簇中心时的影响。

责任值的更新公式为:
r i j = S i j − max ⁡ k ≠ j ( a i k + S i k ) r_{ij} = S_{ij} - \max_{k \neq j} \left( a_{ik} + S_{ik} \right) rij=Sijk=jmax(aik+Sik)
其中, a i k a_{ik} aik 是可用性值,表示数据点 x k x_k xk 对数据点 x i x_i xi 作为簇中心的支持度。

1.3 可用性值

可用性值 a i j a_{ij} aij 衡量数据点 x i x_i xi 是否支持数据点 x j x_j xj 作为簇中心。它表示的是数据点 x i x_i xi 在选择簇中心时对其他点的支持情况。

可用性值的更新公式为:
a i j = min ⁡ ( 0 , r j j + ∑ k ≠ j max ⁡ ( 0 , r k j ) ) a_{ij} = \min \left( 0, r_{jj} + \sum_{k \neq j} \max(0, r_{kj}) \right) aij=min 0,rjj+k=jmax(0,rkj)
其中, r j j r_{jj} rjj 是数据点 x j x_j xj 对自己作为簇中心的责任值,其他项为所有其他点对 x j x_j xj 作为簇中心的支持。

1.4 簇中心选择

在每次更新责任值和可用性值后,亲和传播算法会根据这些信息为每个数据点选择一个簇中心。簇中心是根据责任值和可用性值之和来确定的。

对于数据点 x i x_i xi,其簇中心 c i c_i ci 是使得责任值与可用性值之和最大化的点:
c i = arg ⁡ max ⁡ j ( r i j + a i j ) c_i = \arg\max_j \left( r_{ij} + a_{ij} \right) ci=argjmax(rij+aij)
即选择 r i j + a i j r_{ij} + a_{ij} rij+aij 最大的 j j j 作为数据点 x i x_i xi 的簇中心。

1.5 消息传递的迭代更新

亲和传播算法是一个迭代过程,算法不断更新责任值 r i j r_{ij} rij 和可用性值 a i j a_{ij} aij,直到达到收敛条件。收敛条件通常是责任值和可用性值的变化小于某个阈值,或者达到最大迭代次数。

1.6 簇的形成

每一轮更新后,簇中心被选定为具有最大 r i j + a i j r_{ij} + a_{ij} rij+aij 的点。如果每个点的簇中心没有发生变化,则认为算法已经收敛,完成聚类。

1.7 完整的数学过程

  1. 初始化
    • 计算相似度矩阵 S i j S_{ij} Sij
    • 初始化责任值和可用性值为零: r i j = 0 r_{ij} = 0 rij=0, a i j = 0 a_{ij} = 0 aij=0
  2. 迭代更新
    • 更新责任值: r i j = S i j − max ⁡ k ≠ j ( a i k + S i k ) r_{ij} = S_{ij} - \max_{k \neq j} \left( a_{ik} + S_{ik} \right) rij=Sijmaxk=j(aik+Sik)
    • 更新可用性值: a_{ij} = \min \left( 0, r_{jj} + \sum_{k \neq j} \max(0, r_{kj}) \right)$。
  3. 簇中心选择
    • 选择簇中心 c i = arg ⁡ max ⁡ j ( r i j + a i j ) c_i = \arg\max_j \left( r_{ij} + a_{ij} \right) ci=argmaxj(rij+aij)
  4. 收敛检测
    • 如果责任值和可用性值的变化小于阈值,则算法收敛。

2. 参数说明

通过调整这些参数,可以根据实际数据的特点优化亲和传播模型的性能和效果。

from sklearn.cluster import AffinityPropagationap = AffinityPropagation(*,damping=0.5,max_iter=200,convergence_iter=15,copy=True,preference=None,affinity='euclidean',verbose=False,random_state=None,
)
  1. damping (float, 默认=0.5):
    • 该参数控制消息更新的平滑度。它帮助防止模型在每次迭代时震荡过大。值的范围是[0.5, 1.0)。
    • 较大的 damping 值可以增强稳定性,但可能使算法收敛较慢。
  2. max_iter (int, 默认=200):
    • 该参数控制最大迭代次数。当达到最大迭代次数时,算法会停止运行,无论是否已收敛。
    • 如果数据量较大或收敛较慢,可以增加这个值。
  3. convergence_iter (int, 默认=15):
    • 如果相邻的迭代中,簇中心的变化小于某个阈值时,算法就会停止。convergence_iter 控制的是连续多少次迭代簇中心变化小于阈值才认为已经收敛。
    • 增加该值会要求更强的收敛条件,可能导致更长的计算时间。
  4. copy (bool, 默认=True):
    • 如果为 True,会对输入的数据进行复制,这样原始数据不会被修改。如果为 False,则会修改原始数据。
    • 通常保持 True,除非你非常确定不需要保留原始数据。
  5. preference (array-like, 默认=None):
    • 该参数指定了每个数据点被选为簇中心的偏好值。它的大小应该与数据点数量相等。
    • 如果设置为 None,则默认将所有点的偏好值设置为 -2,即倾向于较小的簇数。调整该值可以影响簇的数量。
  6. affinity ({‘euclidean’, ‘manhattan’, ‘cosine’}, 默认=‘euclidean’):
    • 用来计算数据点间相似度的度量方法。常用的度量方法包括:
      • 'euclidean':欧几里得距离
      • 'manhattan':曼哈顿距离
      • 'cosine':余弦相似度
    • 根据数据的特性选择合适的相似度度量。
  7. verbose (bool, 默认=False):
    • 如果为 True,则会输出算法运行时的详细信息。对于调试和了解算法的迭代过程有帮助。
  8. random_state (int, RandomState instance or None, 默认=None):
    • 控制随机数生成器的种子。如果设置为 None,则使用随机的种子。如果需要重现实验结果,可以设置为一个整数值。

3. 注意事项

  1. 计算复杂度:亲和传播算法对数据点数目较为敏感,适合中小规模数据(< 1000 个样本)。
  2. 结果可解释性:簇数由算法动态决定,但可以通过调整 preference 来影响结果。
  3. 内存限制:需要计算完整的相似度矩阵,对于高维或大规模数据可能会占用较多内存。

4. 亲和传播聚类样例

4.1 生成样例数据

# 导入必要的库
import numpy as np  # 用于数组和数学运算from sklearn import metrics  # 导入用于评估聚类效果的评估指标
from sklearn.cluster import AffinityPropagation  # 导入亲和传播聚类算法
from sklearn.datasets import make_blobs  # 用于生成测试用的聚类数据集# 设置聚类中心
centers = [[1, 1], [-1, -1], [1, -1]]  # 设置三个聚类的中心点坐标# 生成模拟数据,包含300个样本,数据点以centers为中心分布,标准差为0.5,随机种子设为0
X, labels_true = make_blobs(n_samples=300, centers=centers, cluster_std=0.5, random_state=0
)

4.2 计算亲和传播

# 创建亲和传播聚类模型,设置偏好值为-50,并使用随机种子0
af = AffinityPropagation(preference=-50, random_state=0).fit(X)# 获取聚类中心的索引
cluster_centers_indices = af.cluster_centers_indices_# 获取每个数据点的聚类标签
labels = af.labels_# 计算聚类的数量
n_clusters_ = len(cluster_centers_indices)# 打印聚类分析结果
print("估计的聚类数量: %d" % n_clusters_)  # 输出聚类的数量
print("同质性: %0.3f" % metrics.homogeneity_score(labels_true, labels))  # 输出同质性得分
print("完整性: %0.3f" % metrics.completeness_score(labels_true, labels))  # 输出完整性得分
print("V-度量: %0.3f" % metrics.v_measure_score(labels_true, labels))  # 输出V-度量得分
print("调整兰德指数: %0.3f" % metrics.adjusted_rand_score(labels_true, labels))  # 输出调整兰德指数
print("调整互信息: %0.3f"% metrics.adjusted_mutual_info_score(labels_true, labels)
)  # 输出调整互信息得分
print("轮廓系数: %0.3f"% metrics.silhouette_score(X, labels, metric="sqeuclidean")
)  # 输出轮廓系数

估计的聚类数量: 3
同质性: 0.872
完整性: 0.872
V-度量: 0.872
调整兰德指数: 0.912
调整互信息: 0.871
轮廓系数: 0.753

4.3 可视化结果

# 绘图
plt.close("all")  # 关闭所有已打开的图形窗口
plt.figure(1)  # 创建新的图形窗口
plt.clf()  # 清除当前图形中的所有内容# 设置颜色循环,用于不同聚类的颜色
colors = plt.cycler("color", plt.cm.viridis(np.linspace(0, 1, 4)))# 对每个聚类进行可视化
for k, col in zip(range(n_clusters_), colors):class_members = labels == k  # 获取属于当前聚类的数据点cluster_center = X[cluster_centers_indices[k]]  # 获取当前聚类的中心点plt.scatter(X[class_members, 0], X[class_members, 1], color=col["color"], marker="."  # 绘制当前聚类的数据点)plt.scatter(cluster_center[0], cluster_center[1], s=14, color=col["color"], marker="o"  # 绘制聚类中心)# 绘制聚类中心与数据点之间的连线for x in X[class_members]:plt.plot([cluster_center[0], x[0]], [cluster_center[1], x[1]], color=col["color"])# 设置图表标题
plt.title("估计的聚类数量: %d" % n_clusters_)
plt.show()  # 显示图表

在这里插入图片描述


5. 对鸢尾花数据集进行亲和传播算法聚类

5.1 导入并可视化鸢尾花数据集

import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import pandas as pd# 设置主题和字体
sns.set_theme(style="darkgrid", palette="Set2", font="SimHei", rc={"axes.unicode_minus": False})  # 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target# 进行PCA降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 创建一个包含PCA结果和目标变量的DataFrame
df = pd.DataFrame(X_pca, columns=['主成分1', '主成分2'])
df['类别'] = iris.target_names[y]# 绘制PCD图,修改点的大小、颜色和透明度
plt.figure(figsize=(10, 8))
sns.scatterplot(data=df, x='主成分1', y='主成分2', hue='类别', s=150, marker='o', edgecolor='black', alpha=0.7
)# 设置标题、标签,并美化图表
plt.title('鸢尾花数据集的主成分分析(PCA)', fontsize=16, fontweight='bold')
plt.xlabel('主成分 1', fontsize=14)
plt.ylabel('主成分 2', fontsize=14)
plt.legend(title='类别', title_fontsize='14', loc='best', fontsize='13')# 显示图表
plt.show()

在这里插入图片描述

5.2 进行亲和传播聚类

# 进行亲和传播聚类
affinity_propagation = AffinityPropagation(random_state=42)
affinity_propagation.fit(X_pca)# 获取聚类标签
labels = affinity_propagation.labels_# 创建一个包含PCA降维结果和聚类标签的DataFrame
df = pd.DataFrame(X_pca, columns=['主成分1', '主成分2'])
df['聚类集群'] = labels# 绘制二维散点图,使用PCA降维后的主成分
plt.figure(figsize=(10, 8))
sns.scatterplot(data=df, x='主成分1', y='主成分2', hue='聚类集群',palette="Set1", s=100, marker='o', edgecolor='black', alpha=0.7
)# 设置标题、标签,并美化图表
plt.title('鸢尾花数据集的亲和传播聚类(PCA)', fontsize=16, fontweight='bold')
plt.xlabel('主成分 1', fontsize=14)
plt.ylabel('主成分 2', fontsize=14)
plt.legend(title='聚类集群', title_fontsize='13', loc='best', fontsize='12')# 显示图表
plt.show()

在这里插入图片描述

5.3 对模型进行改进

# 进行亲和传播聚类
affinity_propagation = AffinityPropagation(preference=-50, # 设置平滑度damping=0.9, 	# 设置偏好值random_state=42
)

在这里插入图片描述

5.4 检验模型的准确率

from sklearn.metrics import adjusted_rand_score# 获取真实标签
y = iris.target
# 获取聚类标签
cluster_labels = affinity_propagation.labels_# 计算聚类与真实标签的调整兰德指数(ARI)
ari_score = adjusted_rand_score(y, cluster_labels)
print(f'调整兰德指数(ARI):{ari_score:.4f}')

调整兰德指数(ARI):0.7859


6. 对于社交网络中用户的社交属性进行强度划分

6.1 生成模拟数据

import networkx as nx
import seaborn as sns
import matplotlib.pyplot as plt
from faker import Faker
import random
from sklearn.manifold import TSNE
from sklearn.cluster import AffinityPropagation
from sklearn.preprocessing import StandardScaler
from sklearn.metrics.pairwise import euclidean_distances
from sklearn.metrics import pairwise_distances
from sklearn.decomposition import PCA
import numpy as np
import pandas as pd
from adjustText import adjust_text# 可视化配置
sns.set_theme(style="whitegrid", font="SimHei", rc={"axes.unicode_minus": False})
plt.rcParams['font.sans-serif'] = ['SimHei']
# 初始化 Faker 实例
fake = Faker('zh_CN')# 创建社交网络图
G = nx.Graph()
num_users = 50# 添加节点
for _ in range(num_users):G.add_node(fake.name())# 创建社交关系(修改为更合理的连接方式)
all_nodes = list(G.nodes)
for node in G.nodes:num_connections = min(len(all_nodes)-1, np.random.poisson(lam=3))  # 泊松分布模拟社交关系friends = random.sample([n for n in all_nodes if n != node], num_connections)G.add_edges_from([(node, friend) for friend in friends])# 可视化社交关系网络
plt.figure(figsize=(12, 12))
pos = nx.spring_layout(G, seed=42)  # 使用 spring 布局来定位节点
nx.draw(G, pos, with_labels=True, node_size=1000, node_color="skyblue", font_size=10, font_weight="bold", edge_color="gray"
)plt.title("社交关系网络图", fontsize=15)
plt.show()

在这里插入图片描述

6.2 将NX图转换为指标数据

# 计算中心性指标
centrality_metrics = {'度中心性': nx.degree_centrality(G),'介数中心性': nx.betweenness_centrality(G),'接近中心性': nx.closeness_centrality(G),'特征向量中心性': nx.eigenvector_centrality(G, max_iter=1000)
}# 创建DataFrame
df = pd.DataFrame({'节点': list(G.nodes),**{metric: [values[node] for node in G.nodes] for metric, values in centrality_metrics.items()}
})# 数据标准化
features = ['度中心性', '介数中心性', '接近中心性', '特征向量中心性']
X_scaled = StandardScaler().fit_transform(df[features])

在这里插入图片描述

6.3 对数据进行亲和传播聚类

# 亲和传播聚类
ap = AffinityPropagation(affinity='euclidean', random_state=42)
df['聚类标签'] = ap.fit_predict(X_scaled)
n_clusters = len(ap.cluster_centers_indices_)# PCA降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
df[['PCA1', 'PCA2']] = X_pca
# 可视化降维后的数据,按聚类标签着色
plt.figure(figsize=(10, 8))
sns.scatterplot(x='PCA1', y='PCA2', hue='聚类标签', data=df, palette='Set1', s=100, marker='o')# # 在每个点上添加名称
# for i in range(df.shape[0]):
#     plt.text(df['PCA1'][i], df['PCA2'][i], df['节点'][i], fontsize=9, ha='right')# 添加标题和标签
plt.title(f'PCA降维后的亲和传播聚类结果(聚类数: {n_clusters})', fontsize=16)
plt.xlabel('PCA 1', fontsize=12)
plt.ylabel('PCA 2', fontsize=12)# 显示图例
plt.legend(title='聚类标签')# 显示图表
plt.show()

在这里插入图片描述

6.4 改进模型参数

# 亲和传播聚类
ap = AffinityPropagation(damping=0.75, 	# 设置平滑度preference=-30, # 设置偏好值affinity='euclidean', random_state=42
)

在这里插入图片描述

6.5 对亲和传播聚类的可视化结果进行美化

# 获取聚类中心数据
centers_scaled = X_scaled[ap.cluster_centers_indices_]
centers_pca = pca.transform(centers_scaled)
df_centers = pd.DataFrame({'PCA1': centers_pca[:, 0],'PCA2': centers_pca[:, 1],'聚类标签': range(n_clusters)
})# 可视化配置
plt.figure(figsize=(14, 10))
colors = plt.cm.tab20(np.linspace(0, 1, n_clusters))
marker_size = 300          # 普通节点大小
center_size = 300          # 中心点大小
# edge_width = 0.8           # 边缘线宽
center_marker = 'o'        # 中心点标记符号
alpha = 1                # 透明度# 绘制普通节点
for k, col in zip(range(n_clusters), colors):class_members = df['聚类标签'] == kplt.scatter(df[class_members]['PCA1'], df[class_members]['PCA2'],color=col, marker=".", s=marker_size, edgecolor='w', # linewidth=edge_width, label=f"集群 {k}")# 绘制聚类中心
for k, col in zip(range(n_clusters), colors):center_mask = df_centers['聚类标签'] == kif df_centers[center_mask].shape[0] > 0:plt.scatter(df_centers[center_mask]['PCA1'], df_centers[center_mask]['PCA2'],color=col, marker=center_marker, s=center_size,# edgecolor='k', # linewidth=edge_width*1.5,)# 绘制聚类中心与节点之间的连线
for k, col in zip(range(n_clusters), colors):class_members = df['聚类标签'] == kcenter_mask = df_centers['聚类标签'] == kif df_centers[center_mask].shape[0] > 0:center_pca1 = df_centers[center_mask]['PCA1'].values[0]center_pca2 = df_centers[center_mask]['PCA2'].values[0]for i in df[class_members].index:plt.plot([center_pca1, df.loc[i, 'PCA1']],[center_pca2, df.loc[i, 'PCA2']],color=col, alpha=0.3, linewidth=0.8)# 添加节点标签
texts = []
for _, row in df.iterrows():texts.append(plt.text(row['PCA1'], row['PCA2'], row['节点'],fontsize=10, ha="center", va="center", fontweight='bold', alpha=0.8))# 标签避让处理
adjust_text(texts,arrowprops=dict(arrowstyle='->', color='gray', lw=0.8, alpha=0.6),expand_points=(1.5, 1.5),expand_text=(1.5, 1.5),force_text=(0.5, 0.5))# 设置标题和图例
plt.title(f"社交网络聚类分析 (PCA降维 | 聚类数: {n_clusters})", fontsize=15)
plt.legend(title="聚类标签", loc="best", fontsize=12)
plt.xlabel("PCA 1", fontsize=12)
plt.ylabel("PCA 2", fontsize=12)
plt.grid(True, linestyle='--', alpha=0.4)
plt.show()

在这里插入图片描述

6.6 将聚类结果映射至社交网络图上

# 将聚类标签存入节点的属性中
for node, cluster in zip(G.nodes, df['聚类标签']):G.nodes[node]['集群'] = cluster  # 为每个节点添加 'cluster' 属性# 可视化配置
plt.figure(figsize=(12, 12))
pos = nx.spring_layout(G, seed=42)# 创建颜色映射
color_map = plt.cm.tab20(np.linspace(0, 1, n_clusters))
node_colors = [color_map[G.nodes[node]['集群']] for node in G.nodes]# 绘制网络节点
nx.draw_networkx_nodes(G, pos, node_size=600, node_color=node_colors, edgecolors='black', linewidths=0.8)
nx.draw_networkx_edges(G, pos, edge_color='gray', alpha=0.4)# 智能标签系统
texts = []
for node, (x, y) in pos.items():texts.append(plt.text(x, y, node, fontsize=9, ha='center', va='center',bbox=dict(boxstyle='round', facecolor='white', edgecolor='none',alpha=0.8)))# 调整标签位置
adjust_text(texts, precision=0.8,expand_text=(1.2, 1.2),expand_points=(1.2, 1.2),force_text=(0.3, 0.3),arrowprops=dict(arrowstyle='-', color='gray', lw=0.5, alpha=0.6))# 设置标题
plt.title("基于聚类结果的社交网络可视化", fontsize=15)
plt.axis('off')  # 关闭坐标轴
plt.show()

在这里插入图片描述

相关文章:

亲和传播聚类算法应用(Affinity Propagation)

亲和传播聚类算法应用&#xff08;Affinity Propagation&#xff09; 亲和传播&#xff08;Affinity Propagation&#xff0c;简称 AP&#xff09;是一种基于“消息传递”的聚类算法&#xff0c;与 K-Means 等传统聚类方法不同&#xff0c;它不需要用户预先指定簇的数量&#…...

【VM】VirtualBox安装CentOS8虚拟机

阅读本文前&#xff0c;请先根据 VirtualBox软件安装教程 安装VirtualBox虚拟机软件。 1. 下载centos8系统iso镜像 可以去两个地方下载&#xff0c;推荐跟随本文的操作用阿里云的镜像 centos官网&#xff1a;https://www.centos.org/download/阿里云镜像&#xff1a;http://…...

pytorch实现文本摘要

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 import numpy as npfrom modelscope.hub.snapshot_download import snapshot_download from transformers import BertTokenizer, BertModel import torch# 下载模型到本地目录 model_dir snapshot_download(tians…...

大数据相关职位介绍之一(数据分析,数据开发,数据产品经理,数据运营)

大数据相关职位介绍之一 随着大数据、人工智能&#xff08;AI&#xff09;和机器学习的快速发展&#xff0c;数据分析与管理已经成为各行各业的重要组成部分。从互联网公司到传统行业的数字转型&#xff0c;数据相关职位在中国日益成为推动企业创新和提升竞争力的关键力量。以…...

Vue3.0实战:大数据平台可视化(附完整项目源码)

文章目录 创建vue3.0项目项目初始化项目分辨率响应式设置项目顶部信息条创建页面主体创建全局引入echarts和axios后台接口创建express销售总量图实现完整项目下载项目任何问题都可在评论区,或者直接私信即可。 创建vue3.0项目 创建项目: vue create vueecharts选择第三项:…...

多模态论文笔记——NaViT

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细解读多模态论文NaViT&#xff08;Native Resolution ViT&#xff09;&#xff0c;将来自不同图像的多个patches打包成一个单一序列——称为Patch n’ Pack—…...

AI大模型开发原理篇-5:循环神经网络RNN

神经概率语言模型NPLM也存在一些明显的不足之处:模型结构简单&#xff0c;窗口大小固定&#xff0c;缺乏长距离依赖捕捉&#xff0c;训练效率低&#xff0c;词汇表固定等。为了解决这些问题&#xff0c;研究人员提出了一些更先进的神经网络语言模型&#xff0c;如循环神经网络、…...

无人机图传模块 wfb-ng openipc-fpv,4G

openipc 的定位是为各种模块提供底层的驱动和linux最小系统&#xff0c;openipc 是采用buildroot系统编译而成&#xff0c;因此二次开发能力有点麻烦。为啥openipc 会用于无人机图传呢&#xff1f;因为openipc可以将现有的网络摄像头ip-camera模块直接利用起来&#xff0c;从而…...

C++ Primer 自定义数据结构

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

Kanass快速安装配置教程(入门级)

Kanass是一款国产开源免费的项目管理工具&#xff0c;工具简洁易用、开源免费&#xff0c;本文将介绍如何快速安装配置kanass&#xff0c;以快速上手。&#xfeff; 1、快速安装 1.1 Linux 安装 点击官网 -> 演示与下载 ->下载&#xff0c;下载Linux安装包&#xff0c;…...

【自然语言处理(NLP)】基于Transformer架构的预训练语言模型:BERT 训练之数据集处理、训练代码实现

文章目录 介绍BERT 训练之数据集处理BERT 原理及模型代码实现数据集处理导包加载数据生成下一句预测任务的数据从段落中获取nsp数据生成遮蔽语言模型任务的数据从token中获取mlm数据将文本转换为预训练数据集创建Dataset加载WikiText-2数据集 BERT 训练代码实现导包加载数据构建…...

深度解析:网站快速收录与网站安全性的关系

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/58.html 网站快速收录与网站安全性之间存在着密切的关系。以下是对这一关系的深度解析&#xff1a; 一、网站安全性对收录的影响 搜索引擎惩罚&#xff1a; 如果一个网站存在安全隐患&am…...

《基于Scapy的综合性网络扫描与通信工具集解析》

在网络管理和安全评估中&#xff0c;网络扫描和通信是两个至关重要的环节。Python 的 Scapy 库因其强大的网络数据包处理能力&#xff0c;成为开发和实现这些功能的理想工具。本文将介绍一个基于 Scapy 编写的 Python 脚本&#xff0c;该脚本集成了 ARP 扫描、端口扫描以及 TCP…...

MySQL索引详解

MySQL索引详解 什么是索引索引的原理索引的分类索引的数据结构二叉树平衡二叉树B树B树 聚集索引与非聚集索引概念利用聚集索引查找数据利用非聚集索引查找数据覆盖索引与回表操作 如何正确使用索引 什么是索引 索引是存储引擎中一种数据结构&#xff0c;或者说数据的组织方式&…...

【NEXT】网络编程——上传文件(不限于jpg/png/pdf/txt/doc等),或请求参数值是file类型时,调用在线服务接口

最近在使用华为AI平台ModelArts训练自己的图像识别模型&#xff0c;并部署了在线服务接口。供给客户端&#xff08;如&#xff1a;鸿蒙APP/元服务&#xff09;调用。 import核心能力&#xff1a; import { http } from kit.NetworkKit; import { fileIo } from kit.CoreFileK…...

【Qt】界面优化

界面优化 设置全局样式样式文件使⽤ Qt Designer 编辑样式选择器设置子控件样式伪类选择器样式属性盒模型设置按钮样式设置复选框样式输入框样式列表样式菜单栏样式 在 Qt 中对界面的优化和 CSS 类似。语法结构如下&#xff1a; 选择器 {属性名: 属性值; }例如&#xff1a; QP…...

机器学习算法在网络安全中的实践

机器学习算法在网络安全中的实践 本文将深入探讨机器学习算法在网络安全领域的应用实践&#xff0c;包括基本概念、常见算法及其应用案例&#xff0c;从而帮助程序员更好地理解和应用这一领域的技术。"> 序言 网络安全一直是信息技术领域的重要议题&#xff0c;随着互联…...

课题介绍:基于惯性与单目视觉信息融合的室内微小型飞行器智能自主导航研究

室内微小型飞行器在国防、物流和监测等领域中应用广泛&#xff0c;但在复杂的非合作环境中实时避障和导航仍面临诸多挑战。由于微小型飞行器的载荷和能源限制&#xff0c;迫切需要开发高效的智能自主导航系统。本项目旨在研究基于惯性导航与单目视觉信息融合的技术&#xff0c;…...

Observability:实现 OpenTelemetry 原生可观察性的商业价值

作者&#xff1a;来自 Elastic David Hope 利用开放标准和简化的数据收集转变组织的可观察性策略。 现代组织面临着前所未有的可观察性挑战。随着系统变得越来越复杂和分散&#xff0c;传统的监控方法难以跟上步伐。由于数据量每两年翻一番&#xff0c;系统跨越多个云和技术&am…...

nginx 报错404

404&#xff1a;服务器无法正常解析页面&#xff0c;大多是配置问题(路径配置错误)、或访问页面不存在 如果你也是用nginx来转接服务的话&#xff0c;那你有可能碰到过这种情况&#xff0c;当你启动服务后&#xff0c;在本地打开页面&#xff0c;发现404&#xff0c;然后你找遍…...

2.2.1 人眼色觉与色度图

文章目录 人眼色觉色度图 人眼色觉 视网膜上的视杆细胞、视锥细胞在人眼色觉中起到重要作用。视杆细胞主要用在弱光暗环境下&#xff0c;其数量远远多于视锥细胞。视锥细胞负责明亮环境的视觉&#xff0c;有L,M,S三种类型的细胞&#xff0c;分别对长、中、短波长敏感&#xff0…...

DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”

当算力博弈升级为网络战争&#xff1a;拆解DDoS攻击背后的技术攻防战——从DeepSeek遇袭看全球网络安全新趋势 在数字化浪潮席卷全球的当下&#xff0c;网络已然成为人类社会运转的关键基础设施&#xff0c;深刻融入经济、生活、政务等各个领域。从金融交易的实时清算&#xf…...

c语言(关键字)

前言&#xff1a; 感谢b站鹏哥c语言 内容&#xff1a; 栈区&#xff08;存放局部变量&#xff09; 堆区 静态区&#xff08;存放静态变量&#xff09; rigister关键字 寄存器&#xff0c;cpu优先从寄存器里边读取数据 #include <stdio.h>//typedef&#xff0c;类型…...

眼见着折叠手机面临崩溃,三星计划增强抗摔能力挽救它

据悉折叠手机开创者三星披露了一份专利&#xff0c;通过在折叠手机屏幕上增加一个抗冲击和遮光层的方式来增强折叠手机的抗摔能力&#xff0c;希望通过这种方式进一步增强折叠手机的可靠性和耐用性&#xff0c;来促进折叠手机的发展。 据悉三星和研发可折叠玻璃的企业的做法是在…...

Excel to form ?一键导入微软表单

一句话痛点 “你的Excel越强大&#xff0c;手动复制到Forms就越痛苦。” 合并单元格崩溃成乱码、下拉菜单变纯文本、条件逻辑消失无踪——这些不是技术问题&#xff0c;而是低效工作模式的死刑判决书。 直击解决方案&#xff1a;3分钟&#xff0c;3步&#xff0c;300%效率 1…...

使用Ollama本地化部署DeepSeek

1、Ollama 简介 Ollama 是一个开源的本地化大模型部署工具&#xff0c;旨在简化大型语言模型&#xff08;LLM&#xff09;的安装、运行和管理。它支持多种模型架构&#xff0c;并提供与 OpenAI 兼容的 API 接口&#xff0c;适合开发者和企业快速搭建私有化 AI 服务。 Ollama …...

【xdoj-离散线上练习】T251(C++)

解题反思&#xff1a; 开始敲代码前想清楚整个思路比什么都重要嘤嘤嘤&#xff01;看到输入m, n和矩阵&#xff0c;注意不能想当然地认为就是高m&#xff0c;宽n的矩阵&#xff0c;细看含义 比如本题给出了树的邻接矩阵&#xff0c;就是n*n的&#xff0c;代码实现中没有用到m这…...

【数据结构】_链表经典算法OJ(力扣/牛客第二弹)

目录 1. 题目1&#xff1a;返回倒数第k个节点 1.1 题目链接及描述 1.2 解题思路 1.3 程序 2. 题目2&#xff1a;链表的回文结构 2.1 题目链接及描述 2.2 解题思路 2.3 程序 1. 题目1&#xff1a;返回倒数第k个节点 1.1 题目链接及描述 题目链接&#xff1a; 面试题 …...

线性代数复习笔记

1. 课程学习 1.1 3Blue1Brown 线性代数 2. 基本术语 eigenvector&#xff08;特征向量&#xff09;&#xff1a;线性变换中方向保持不变的向量 可以视作3D旋转矩阵形成的旋转的轴...

51单片机 01 LED

一、点亮一个LED 在STC-ISP中单片机型号选择 STC89C52RC/LE52RC&#xff1b;如果没有找到hex文件&#xff08;在objects文件夹下&#xff09;&#xff0c;在keil中options for target-output- 勾选 create hex file。 如果要修改编程 &#xff1a;重新编译-下载/编程-单片机重…...

用一个例子详细说明python单例模式

单例模式是一种设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。这在需要控制资源&#xff08;如数据库连接、文件系统等&#xff09;的访问时非常有用。 下面是一个使用Python实现单例模式的例子&#xff1a; class Singleton:…...

QT知识点复习

1.qt核心机制 对象树、信号和槽、事件机制 2.对象树的作用 优化了内存回收机制。子对象实例化的时候&#xff0c;被父对象放对象树上&#xff0c;父对象释放内存&#xff0c;子对象也释放内存 3.信号和槽的作用 实现多个组件之间的通讯 4.信号和槽的几种连接方式 1.UI界面提…...

医学图像分割任务的测试代码

测试集进行测试 import os import torch import numpy as np from torch.utils.data import DataLoader from sklearn.metrics import (precision_score,recall_score,f1_score,roc_curve,auc,confusion_matrix, ) import matplotlib.pyplot as plt from utils import NiiData…...

linux下ollama更换模型路径

Linux下更换Ollama模型下载路径指南   在使用Ollama进行AI模型管理时&#xff0c;有时需要根据实际需求更改模型文件的存储路径。本文将详细介绍如何在Linux系统中更改Ollama模型的下载路径。 一、关闭Ollama服务   在更改模型路径之前&#xff0c;需要先停止Ollama服务。…...

手机上运行AI大模型(Deepseek等)

最近deepseek的大火&#xff0c;让大家掀起新一波的本地部署运行大模型的热潮&#xff0c;特别是deepseek有蒸馏的小参数量版本&#xff0c;电脑上就相当方便了&#xff0c;直接ollamaopen-webui这种类似的组合就可以轻松地实现&#xff0c;只要硬件&#xff0c;如显存&#xf…...

第一性原理:游戏开发成本的思考

利润 营收-成本 营收定价x销量x分成比例 销量 曝光量x 点击率x &#xff08;购买率- 退款率&#xff09; 分成比例 100%- 平台抽成- 税- 引擎费- 发行抽成 成本开发成本运营成本 开发成本 人工外包办公地点租金水电设备折旧 人工成本设计成本开发成本迭代修改成本后续内容…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.11 视图与副本:内存优化的双刃剑

2.11 视图与副本&#xff1a;内存优化的双刃剑 目录 #mermaid-svg-OpelXRXip4Xj1A2e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OpelXRXip4Xj1A2e .error-icon{fill:#552222;}#mermaid-svg-OpelXRXip4Xj1A2e .…...

React 封装高阶组件 做路由权限控制

React 高阶组件是什么 官方解释∶ 高阶组件&#xff08;HOC&#xff09;是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分&#xff0c;它是一种基于 React 的组合特性而形成的设计模式。 高阶组件&#xff08;HOC&#xff09;就是一个函数&…...

Python sider-ai-api库 — 访问Claude、llama、ChatGPT、gemini、o1等大模型API

目前国内少有调用ChatGPT、Claude、Gemini等国外大模型API的库。 Python库sider_ai_api 提供了一个完整的解决方案。通过调用 sider.ai 的API&#xff0c;开发者可以实现对这些大模型的访问。 众所周知&#xff0c;sider是一个Chrome&#xff0c;以及Edge的浏览器插件&#xf…...

深入解析 Linux 内核内存管理核心:mm/memory.c

在 Linux 内核的众多组件中,内存管理模块是系统性能和稳定性的关键。mm/memory.c 文件作为内存管理的核心实现,承载着页面故障处理、页面表管理、内存区域映射与取消映射等重要功能。本文将深入探讨 mm/memory.c 的设计思想、关键机制以及其在内核中的作用,帮助读者更好地理…...

git基础使用--3---git安装和基本使用

git基础使用–3–git-安装和基本使用 1. git工具安装 使用git如果不考虑开发工具我们一般需要关注三个点 1.1 git 本地化仓库管理的基础 打开https://git-scm.com/downloads地址下载安装 安装完成后&#xff0c;配置环境变量 配置完打开cmd&#xff0c;输入git --versio…...

Python 网络爬虫实战:从基础到高级爬取技术

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 网络爬虫&#xff08;Web Scraping&#xff09;是一种自动化技术&#xff0c;利用程序从网页中提取数据&#xff0c;广泛…...

【PyQt】学习PyQt进行GUI开发从基础到进阶逐步掌握详细路线图和关键知识点

学习PyQt的必要性 PyQt是开发跨平台GUI应用的强大工具&#xff0c;适合需要构建复杂、高性能界面的开发者。无论是职业发展还是项目需求&#xff0c;学习PyQt都具有重要意义。 1. 跨平台GUI开发 跨平台支持&#xff1a;PyQt基于Qt框架&#xff0c;支持Windows、macOS、Linux…...

Web - CSS3基础语法与盒模型

概述 这篇文章是关于 Web 前端 CSS3 的基础语法与盒模型的讲解。包括 CSS3 层叠性及处理冲突规则、伪元素和新增伪类元素、属性选择器等。还介绍了文本与字体属性&#xff0c;如段落和行相关属性、字体文本属性。最后阐述了盒子模型&#xff0c;如元素隐藏、行内与块元素转换、…...

【开源免费】基于Vue和SpringBoot的公寓报修管理系统(附论文)

本文项目编号 T 186 &#xff0c;文末自助获取源码 \color{red}{T186&#xff0c;文末自助获取源码} T186&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

成绩案例demo

本案例较为简单&#xff0c;用到的知识有 v-model、v-if、v-else、指令修饰符.prevent .number .trim等、computed计算属性、toFixed方法、reduce数组方法。 涉及的功能需求有&#xff1a;渲染、添加、删除、修改、统计总分&#xff0c;求平均分等。 需求效果如下&#xff1a…...

【tiktok 国际版抖抖♬♬ __ac_signature算法】逆向分析

一开始的参数是没有X-Bogus和 __ac_signature的 先是加密请求参数得到乱码。最终得到X-Bogus 然后请求参数添加了X-Bogus之后再去生成__ac_signature __ac_signature的生成需要用到X-Bogus...

【Linux】动静态库

一、库 静态库 .a[Linux]、.lib[windows] 动态库 .so[Linux]、.dll[windows] 二、静态库使用 如果我们要做一个静态库的话&#xff0c;首先我们需要把我们源文件(.c/.cpp)隐藏起来&#xff0c;头文件(.h)必须暴露出来&#xff0c; 1.我们先要把我们所有的.c文件编译成.o文件…...

《手札·开源篇》从开源到商业化:中小企业的低成本数字化转型路径 ——以Odoo为数据中台低成本实现售前售中一体化

某机电设备有限公司数字化转型案例&#xff1a;以Odoo为数据中台实现售前售中一体化 一、企业背景某机电设备有限公司在机电设备领域历经多年发展&#xff0c;业务广泛&#xff0c;涵盖工业自动化设备、电力设备等产品的销售与服务。随着业务版图不断拓展&#xff0c;企业面临…...

携程Android开发面试题及参考答案

在项目中,给别人发的动态点赞功能是如何实现的? 数据库设计:首先要在数据库中为动态表添加一个点赞字段,用于记录点赞数量,同时可能需要一个点赞关系表,记录用户与动态之间的点赞关联,包括点赞时间等信息。界面交互:在 Android 界面上,为点赞按钮设置点击事件监听器。…...