结构体 faiss::Clustering
-
struct Clustering : public faiss::ClusteringParameters
基于分配的 K-means 聚类 - 质心更新迭代
聚类基于一个 Index 对象,该对象将训练点分配给质心。 因此,在每次迭代中,质心都会被添加到索引中。
在输出时,质心表被设置为最新的质心版本,并且它们也被添加到索引中。 如果质心表在输入时不是空的,它也会被用于初始化。
被 faiss::Clustering1D 继承
公共函数
-
Clustering(int d, int k)
-
Clustering(int d, int k, const ClusteringParameters &cp)
-
virtual void train(idx_t n, const float *x, faiss::Index &index, const float *x_weights = nullptr)
运行 k-means 训练
- 参数:
x – 训练向量,大小为 n * d
index – 用于分配的索引
x_weights – 与每个向量关联的权重:NULL 或大小为 n
-
void train_encoded(idx_t nx, const uint8_t *x_in, const Index *codec, Index &index, const float *weights = nullptr)
使用编码向量运行
除了 train() 的参数之外,还接受一个 codec 作为参数来解码输入向量。
- 参数:
codec – 用于解码向量的 codec (nullptr = 向量实际上是浮点数)
-
void post_process_centroids()
在每次质心更新后对质心进行后处理。 包括可选的 L2 归一化和最近整数舍入
-
inline virtual ~Clustering()
公共成员
-
size_t d
向量的维度
-
size_t k
质心的数量
-
std::vector<float> centroids
质心 (k * d) 如果在训练的输入中设置了质心,它们将被用作初始化
-
std::vector<ClusteringIterationStats> iteration_stats
聚类每次迭代的统计信息
-
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
当训练集被编码时,编解码器解码器的批量大小
-
bool check_input_data_for_NaNs = true
是否检查输入数据中是否存在 NaN
-
bool use_faster_subsampling = false
是否使用基于 splitmix64 的随机数生成器进行二次采样,它速度更快,但可能会选择重复的点。
-
Clustering(int d, int k)