社区#
- template<typename vertex_t, typename edge_t, typename weight_t, bool multi_gpu>
std::pair<size_t, weight_t> louvain(raft::handle_t const &handle, std::optional<std::reference_wrapper<raft::random::RngState>> rng_state, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, vertex_t *clustering, size_t max_level = 100, weight_t threshold = weight_t{1e-7}, weight_t resolution = weight_t{1})#Louvain 实现。
通过最大化模块度计算图的聚类
使用 Louvain 方法计算,详见
VD Blondel, J-L Guillaume, R Lambiotte and E Lefebvre: Fast unfolding of community hierarchies in large networks, J Stat Mech P10008 (2008), http://arxiv.org/abs/0803.0476
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
multi_gpu – 指示模板实例化是否应针对单 GPU 的标志 (false)
- 参数:
handle – [in] 库句柄 (RAFT)。如果句柄中设置了通信器,
rng_state – [in] 包含伪随机数生成器状态的 RngState 实例。
graph_view – [in] 输入图视图对象。
edge_weight_view – [in] 可选视图对象,包含
graph_view
的边权重。如果 @pedge_weight_view.has_value() == false,边权重默认为 1.0。clustering – [out] 指向应存储聚类结果的设备数组的指针
max_level – [in] (可选) 最大运行级别数 (默认为 100)
threshold – [in] (可选) 每级别收敛的阈值 (默认为 1e-7)
resolution – [in] (可选) 要使用的分辨率参数值。在模块度公式中称为 gamma,它会改变社区的大小。较高的分辨率会产生更多更小的社区,较低的分辨率会产生更少更大的社区。(默认为 1)
- 返回:
一个包含以下内容的对:1) 返回聚类的级别数 2) 返回聚类的模块度
- template<typename vertex_t, typename edge_t, typename weight_t, bool multi_gpu>
std::pair<std::unique_ptr<Dendrogram<vertex_t>>, weight_t> louvain(raft::handle_t const &handle, std::optional<std::reference_wrapper<raft::random::RngState>> rng_state, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, size_t max_level = 100, weight_t threshold = weight_t{1e-7}, weight_t resolution = weight_t{1})#Louvain 实现,返回树状图。
通过最大化模块度计算图的聚类
使用 Louvain 方法计算,详见
VD Blondel, J-L Guillaume, R Lambiotte and E Lefebvre: Fast unfolding of community hierarchies in large networks, J Stat Mech P10008 (2008), http://arxiv.org/abs/0803.0476
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
multi_gpu – 指示模板实例化是否应针对单 GPU 的标志 (false)
- 参数:
handle – [in] 库句柄 (RAFT)。如果句柄中设置了通信器,
rng_state – [in] 包含伪随机数生成器状态的 RngState 实例。
graph_view – [in] 输入图视图对象。
edge_weight_view – [in] 可选视图对象,包含
graph_view
的边权重。如果 @pedge_weight_view.has_value() == false,边权重默认为 1.0。max_level – [in] (可选) 最大运行级别数 (默认为 100)
threshold – [in] (可选) 每级别收敛的阈值 (默认为 1e-7)
resolution – [in] (可选) 要使用的分辨率参数值。在模块度公式中称为 gamma,它会改变社区的大小。较高的分辨率会产生更多更小的社区,较低的分辨率会产生更少更大的社区。(默认为 1)
- 返回:
一个包含以下内容的对:1) 指向树状图的唯一指针 2) 返回聚类的模块度
- template<typename graph_view_t>
void flatten_dendrogram(raft::handle_t const &handle, graph_view_t const &graph_view, Dendrogram<typename graph_view_t::vertex_type> const &dendrogram, typename graph_view_t::vertex_type *clustering)#将 Dendrogram 在特定级别展平。
一个 Dendrogram 表示图的分层聚类/划分。此函数会将分层聚类展平为每个顶点的标签,表示该顶点被分配到的最终集群/分区。
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
graph_view_t – 图的类型
- 参数:
handle – [in] 库句柄 (RAFT)。如果句柄中设置了通信器,
graph – [in] 输入图对象
dendrogram – [in] 输入树状图对象
clustering – [out] 指向应存储聚类结果的设备数组的指针
- template<typename vertex_t, typename edge_t, typename weight_t, bool multi_gpu>
std::pair<std::unique_ptr<Dendrogram<vertex_t>>, weight_t> leiden(raft::handle_t const &handle, raft::random::RngState &rng_state, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, size_t max_level = 100, weight_t resolution = weight_t{1}, weight_t theta = weight_t{1})#Leiden 实现。
使用 Leiden 对 Louvain 方法的改进,通过最大化模块度计算图的聚类。
使用 Leiden 方法计算,详见
Traag, V. A., Waltman, L., & van Eck, N. J. (2019). From Louvain to Leiden: guaranteeing well-connected communities. Scientific reports, 9(1), 5233. doi: 10.1038/s41598-019-41695-z
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
vertex_t – 顶点标识符的类型。支持的值:int (有符号, 32位)
edge_t – 边标识符的类型。支持的值:int (有符号, 32位)
weight_t – 边权重的类型。支持的值:float 或 double。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
rng_state – 包含伪随机数生成器状态的 RngState 实例。
graph_view – 图视图对象。
edge_weight_view – 可选视图对象,包含
graph_view
的边权重。如果edge_weight_view.has_value()
== false,边权重默认为 1.0。max_level – [in] (可选) 最大运行级别数 (默认为 100)
resolution – [in] (可选) 要使用的分辨率参数值。在模块度公式中称为 gamma,它会改变社区的大小。较高的分辨率会产生更多更小的社区,较低的分辨率会产生更少更大的社区。(默认为 1)
theta – [in] (可选) 用于在 Leiden 细化阶段缩放模块度增益的参数值。它用于计算加入随机 Leiden 社区的概率。在 Leiden 算法中称为 theta。
- 返回:
一个包含以下内容的对:1) 指向树状图的唯一指针 2) 返回聚类的模块度
- template<typename vertex_t, typename edge_t, typename weight_t, bool multi_gpu>
std::pair<size_t, weight_t> leiden(raft::handle_t const &handle, raft::random::RngState &rng_state, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, vertex_t *clustering, size_t max_level = 100, weight_t resolution = weight_t{1}, weight_t theta = weight_t{1})#Leiden 实现。
.*
使用 Leiden 对 Louvain 方法的改进,通过最大化模块度计算图的聚类。
使用 Leiden 方法计算,详见
Traag, V. A., Waltman, L., & van Eck, N. J. (2019). From Louvain to Leiden: guaranteeing well-connected communities. Scientific reports, 9(1), 5233. doi: 10.1038/s41598-019-41695-z
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
vertex_t – 顶点标识符的类型。支持的值:int (有符号, 32位)
edge_t – 边标识符的类型。支持的值:int (有符号, 32位)
weight_t – 边权重的类型。支持的值:float 或 double。
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
rng_state – 包含伪随机数生成器状态的 RngState 实例。
graph_view – 图视图对象。
edge_weight_view – 可选视图对象,包含
graph_view
的边权重。如果edge_weight_view.has_value()
== false,边权重默认为 1.0。max_level – [in] (可选) 最大运行级别数 (默认为 100)
resolution – [in] (可选) 要使用的分辨率参数值。在模块度公式中称为 gamma,它会改变社区的大小。较高的分辨率会产生更多更小的社区,较低的分辨率会产生更少更大的社区。(默认为 1)
theta – [in] (可选) 用于在 Leiden 细化阶段缩放模块度增益的参数值。它用于计算加入随机 Leiden 社区的概率。在 Leiden 算法中称为 theta。社区。(默认为 1)
- 返回:
一个包含以下内容的对:1) 返回聚类的级别数 2) 返回聚类的模块度
- template<typename vertex_t, typename edge_t, typename weight_t, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, size_t, weight_t> ecg(raft::handle_t const &handle, raft::random::RngState &rng_state, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, weight_t min_weight, size_t ensemble_size, size_t max_level = 100, weight_t threshold = weight_t{1e-7}, weight_t resolution = weight_t{1})#计算给定图的 ecg 聚类。
.*
ECG 对输入图的排列集合运行截断的 Louvain,然后使用集合划分来确定输入图的权重。最终结果是通过使用确定的权重在输入图上运行完整的 Louvain 找到的。有关更多信息,请参阅 https://arxiv.org/abs/1809.05578。
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
multi_gpu – 指示模板实例化是否应针对单 GPU 的标志 (false)
- 参数:
handle – [in] 库句柄 (RAFT)。如果句柄中设置了通信器,
rng_state – [in] 包含伪随机数生成器状态的 RngState 实例。
graph_view – [in] 输入图视图对象
edge_weight_view – [in] 包含
graph_view
边权重的视图对象。min_weight – [in] 如果某条边未出现在任何集合运行中,则在聚类算法的最终调用中使用的最小边权重。
ensemble_size – [in] 集合大小参数
max_level – [in] (可选) 最大运行级别数 (默认为 100)
threshold – [in] (可选) 每级别收敛的阈值 (默认为 1e-7)
resolution – [in] (可选) 要使用的分辨率参数值。在模块度公式中称为 gamma,它会改变社区的大小。较高的分辨率会产生更多更小的社区,较低的分辨率会产生更少更大的社区。(默认为 1)
- 返回:
一个包含以下内容的元组:1) 包含聚类结果的设备向量 2) 返回聚类的级别数 3) 返回聚类的模块度
- template<typename VT, typename ET, typename WT>
void spectralModularityMaximization(legacy::GraphCSRView<VT, ET, WT> const &graph, VT n_clusters, VT n_eig_vects, WT evs_tolerance, int evs_max_iter, WT kmean_tolerance, int kmean_max_iter, VT *clustering)#Nvgraph 谱模块度最大化算法的包装函数。
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
VT – 顶点标识符的类型。支持的值:int (有符号, 32位)
ET – 边标识符的类型。支持的值:int (有符号, 32位)
WT – 边权重的类型。支持的值:float 或 double。
- 参数:
graph – [in] 输入图对象 (CSR)
num_clusters – [in] 所需的集群数量
num_eigen_vects – [in] 要使用的特征向量数量
evs_tolerance – [in] 用于特征值求解器的容差
evs_max_iter – [in] 特征值求解器的最大迭代次数
kmean_tolerance – [in] 用于 kmeans 求解器的容差
kmean_max_iter – [in] k-means 求解器的最大迭代次数
clustering – [out] 指向将存储结果聚类的设备内存的指针
- template<typename VT, typename ET, typename WT>
void analyzeClustering_modularity(legacy::GraphCSRView<VT, ET, WT> const &graph, int n_clusters, VT const *clustering, WT *score)#Nvgraph 聚类模块度指标的包装函数。
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
VT – 顶点标识符的类型。支持的值:int (有符号, 32位)
ET – 边标识符的类型。支持的值:int (有符号, 32位)
WT – 边权重的类型。支持的值:float 或 double。
- 参数:
graph – [in] 输入图对象 (CSR)
n_clusters – [in] 聚类中的集群数量
clustering – [in] 指向包含要分析的聚类的设备数组的指针
score – [out] 指向将写入结果的浮点数的指针
- template<typename VT, typename ET, typename WT>
void analyzeClustering_edge_cut(legacy::GraphCSRView<VT, ET, WT> const &graph, int n_clusters, VT const *clustering, WT *score)#Nvgraph 聚类边割指标的包装函数。
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
VT – 顶点标识符的类型。支持的值:int (有符号, 32位)
ET – 边标识符的类型。支持的值:int (有符号, 32位)
WT – 边权重的类型。支持的值:float 或 double。
- 参数:
graph – [in] 输入图对象 (CSR)
n_clusters – [in] 聚类中的集群数量
clustering – [in] 指向包含要分析的聚类的设备数组的指针
score – [out] 指向将写入结果的浮点数的指针
- template<typename VT, typename ET, typename WT>
void analyzeClustering_ratio_cut(legacy::GraphCSRView<VT, ET, WT> const &graph, int n_clusters, VT const *clustering, WT *score)#Nvgraph 聚类比率割指标的包装函数。
- 抛出:
cugraph::logic_error – 当发生错误时。
- 模板参数:
VT – 顶点标识符的类型。支持的值:int (有符号, 32位)
ET – 边标识符的类型。支持的值:int (有符号, 32位)
WT – 边权重的类型。支持的值:float 或 double。
- 参数:
graph – [in] 输入图对象 (CSR)
n_clusters – [in] 聚类中的集群数量
clustering – [in] 指向包含要分析的聚类的设备数组的指针
score – [out] 指向将写入结果的浮点数的指针
- template<typename vertex_t, typename edge_t, typename weight_t, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, rmm::device_uvector<size_t>> extract_ego(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, vertex_t *source_vertex, vertex_t n_subgraphs, vertex_t radius)#返回以 `source_vertex` 中的节点为中心、给定半径内的邻居组成的诱导 EgoNet 子图。
.*
- 已弃用
该算法将被弃用,取而代之的是使用 raft::device_span 的新版本。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
multi_gpu – 标志,指示模板实例化是针对单 GPU (false) 还是多 GPU (true)。
- 参数:
handle – RAFT 句柄对象,用于封装资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)以运行图算法。必须至少有一个工作流。
graph_view – 图视图对象,我们从
graph_view
中提取诱导 egonet 子图。edge_weight_view – 可选的视图对象,包含
graph_view
的边权重。source_vertex – 指向 egonet 中心顶点的指针(大小 ==
n_subgraphs
)。n_subgraphs – 要提取的诱导 EgoNet 子图的数量(即
source_vertex
中的元素数量)。radius – 包含与
source_vertex
距离 <= radius 的所有邻居。- 返回:
边的源顶点四元组、边的目标顶点、边权重(如果
edge_weight_view.has_value()
== true),以及每个诱导 EgoNet 子图的边偏移。
- template<typename vertex_t, typename edge_t, typename weight_t, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>, rmm::device_uvector<size_t>> extract_ego(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, raft::device_span<vertex_t const> source_vertices, vertex_t radius, bool do_expensive_check = false)#返回以 `source_vertex` 中的节点为中心、给定半径内的邻居组成的诱导 EgoNet 子图。
.*
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
weight_t – 边权重的类型。需要是浮点类型。
multi_gpu – 标志,指示模板实例化是针对单 GPU (false) 还是多 GPU (true)。
- 参数:
handle – RAFT 句柄对象,用于封装资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)以运行图算法。必须至少有一个工作流。
graph_view – 图视图对象,我们从
graph_view
中提取诱导 egonet 子图。edge_weight_view – 可选的视图对象,包含
graph_view
的边权重。source_vertex – 指向 egonet 中心顶点的指针(大小 ==
n_subgraphs
)。n_subgraphs – 要提取的诱导 EgoNet 子图的数量(即
source_vertex
中的元素数量)。radius – 包含与
source_vertex
距离 <= radius 的所有邻居。- 返回:
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, rmm::device_uvector<weight_t>, rmm::device_uvector<size_t>> 边的源顶点、边的目标顶点、边权重以及每个诱导 EgoNet 子图的边偏移的四元组。
- template<typename vertex_t, typename edge_t, bool multi_gpu>
void triangle_count(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, std::optional<raft::device_span<vertex_t const>> vertices, raft::device_span<edge_t> counts, bool do_expensive_check = false)#计算三角形计数。
计算整个顶点集(如果
vertices
是 std::nullopt)或给定顶点(如果vertices.has_value()
为 true)的三角形计数。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
multi_gpu – 指示模板实例化是否应针对单 GPU 的标志 (false)
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 图视图对象。
vertices – 要计算三角形计数的顶点。如果
vertices.has_value()
为 false,则计算整个顶点集的三角形计数。counts – 输出三角形计数数组。数组的大小应为局部顶点分区范围大小(如果
vertices
是 std::nullopt)或vertices
的大小(如果vertices.has_value()
为 true)。do_expensive_check – 用于对输入参数运行昂贵检查的标志(如果设置为
true
)。
- template<typename vertex_t, typename edge_t, bool multi_gpu>
edge_property_t<graph_view_t<vertex_t, edge_t, false, multi_gpu>, edge_t> edge_triangle_count(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, bool do_expensive_check = false)#计算边三角形计数。
.*
计算整个边集的边三角形计数。
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
multi_gpu – 指示模板实例化是否应针对单 GPU 的标志 (false)
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 图视图对象。
do_expensive_check – 用于对输入参数运行昂贵检查的标志(如果设置为
true
)。- 返回:
包含边三角形计数的 edge_property_t
- template<typename vertex_t, typename edge_t, typename weight_t, bool multi_gpu>
std::tuple<rmm::device_uvector<vertex_t>, rmm::device_uvector<vertex_t>, std::optional<rmm::device_uvector<weight_t>>> k_truss(raft::handle_t const &handle, graph_view_t<vertex_t, edge_t, false, multi_gpu> const &graph_view, std::optional<edge_property_view_t<edge_t, weight_t const*>> edge_weight_view, edge_t k, bool do_expensive_check = false)#计算 K-Truss。
.*
提取图的 K-Truss 子图
- 模板参数:
vertex_t – 顶点标识符的类型。需要是整数类型。
edge_t – 边标识符的类型。需要是整数类型。
multi_gpu – 指示模板实例化是否应针对单 GPU 的标志 (false)
- 参数:
handle – RAFT 句柄对象,用于封装运行图算法的资源(例如 CUDA 流、通信器以及各种 CUDA 库的句柄)。
graph_view – 图视图对象。
edge_weight_view – 可选的视图对象,包含
graph_view
的边权重。k – 用于提取 K-Truss 子图的期望 k 值
do_expensive_check – 用于对输入参数运行昂贵检查的标志(如果设置为
true
)。- 返回:
K-Truss 子图的边列表