结构体 faiss::ProgressiveDimClustering

struct ProgressiveDimClustering : public faiss::ProgressiveDimClusteringParameters

使用渐进维度的 K-means 聚类

聚类首先发生在维度 1 中,然后以指数方式增加维度,直到 d(I 步)。 这通常在 PCA 变换之后应用(可选)。 参考

“用于高维近似的改进残差向量量化

最近邻搜索”

刘世聪、卢洪涛、邵俊茹,AAAI'15

https://arxiv.org/abs/1509.05195

公共函数

ProgressiveDimClustering(int d, int k)
ProgressiveDimClustering(int d, int k, const ProgressiveDimClusteringParameters &cp)
void train(idx_t n, const float *x, ProgressiveDimIndexFactory &factory)
inline virtual ~ProgressiveDimClustering()

公共成员

size_t d

向量的维度

size_t k

质心数量

std::vector<float> centroids

质心 (k * d)

std::vector<ClusteringIterationStats> iteration_stats

聚类每次迭代的统计信息

int progressive_dim_steps

增量步数

bool apply_pca

对输入应用 PCA

int niter = 25

聚类迭代次数

int nredo = 1

重新进行聚类这么多次,并保留具有最佳目标的聚类

bool verbose = false
bool spherical = false

是否在每次迭代后对质心进行归一化(对内积聚类有用)

bool int_centroids = false

每次迭代后将质心坐标四舍五入为整数?

bool update_index = false

每次迭代后重新训练索引?

bool frozen_centroids = false

使用作为输入提供的质心的子集,并且在迭代期间不更改它们

int min_points_per_centroid = 39

如果每个质心提供的训练向量少于此数量,则写入警告。 请注意,每个质心的点少于 1 个会引发异常。

int max_points_per_centroid = 256

限制数据集大小,否则训练集会被二次采样

int seed = 1234

随机数生成器的种子。 负值会导致使用 std::high_resolution_clock 为内部 rng 播种。

size_t decode_block_size = 32768

当训练集被编码时,codec 解码器的批处理大小

bool check_input_data_for_NaNs = true

是否检查输入数据中是否存在 NaN 值

bool use_faster_subsampling = false

是否使用基于 splitmix64 的随机数生成器进行子采样,速度更快,但可能会选择重复的点。