如何为聚类分析创建n维测试数据
How to create n-dimensional test data for cluster analysis?
我正在研究k-means的c++实现,因此我需要n维测试数据。对于开始的2D点是足够的,因为它们可以很容易地在2D图像中可视化,但我最终更喜欢支持n维的通用方法。
在stackoverflow上有一个答案,它建议用不同的偏移量和扩展连接随机数字的顺序向量,但我不确定如何创建这些,特别是没有包括第三方库。
下面是我目前为止的方法声明,它包含了应该变化的参数。但可以改变,如果有必要-除了data
,它需要是一个指针类型,因为我使用OpenCL。
auto populateTestData(float** data, uint8_t dimension, uint8_t clusters, uint32_t elements) -> void;
我想到的另一个问题是在生成随机数时有效检测/避免碰撞。这难道不是性能瓶颈吗?例如,如果在1M值的域中生成100k个数字,即生成的数字与数字空间之间的关系不够小?
如何有效地为聚类分析创建n维测试数据?我需要遵循哪些概念?
可以使用c++11(或boost)随机的东西来创建集群,但这需要一些工作。
-
std::normal_distribution
可以生成均值为零的单变量正态分布。 使用1 。你可以从法向量中采样(只需创建一个n维向量)。
如果从2中取向量n。和输出A n + b,那么你就把中心b移走了+被A修改了。(特别是,对于2维和3维,很容易构建A作为旋转矩阵。)重复采样2。执行这个变换可以得到一个以b为中心的样本。
选择A, b中的k对,并生成k簇。
指出
可以使用不同类型的A矩阵生成不同的集群场景。例如,如果A是一个非长度保持矩阵乘以一个旋转矩阵,那么你可以得到"抛物面"簇(沿着连接中心的向量使它们更宽实际上很有趣)。
您可以生成硬编码的"中心"向量b,或者使用上面用于x向量的分布(可能是统一的,但是,使用这个)。
相关文章:
- 为测试目标创建具有不同源文件夹的文件
- 从 bmp 文件数据创建 MFC CBitmap
- 如何在 QML 中使用从 c++ 公开的序列数据创建图表
- 在谷歌测试中创建模拟类的向量
- c++用输入数据创建数组
- 使用 2D 数据创建 3D 直方图(OpenCV?
- 如何使C++代码更快:使用 CFile 从相机数据创建.csv文件
- 为测试单元创建目录 C++ [代码::块]
- 使用 C++ 从 16 位数据创建灰度图像
- 如何根据过滤的数据创建笛卡尔产品范围
- C - 在单位测试中创建间谍
- C 双重调度,出厂模式或一种从接收到的序列数据创建派生对象的方法
- 为 ppm/pgm 图像数据创建存储
- 如何从二进制数据创建 QIcon
- 基于输入数据创建 STL 向量 - 标量或复杂类型
- DirectX11如何从未签名的char*数据创建Texture2D
- 使用相机的初始数据创建d3d11Texture2D
- 如何测试数据包发送是否正确
- OpenCV C++:从存储在 int 向量的索引中为垫子类型数据创建列范围
- 如何为聚类分析创建n维测试数据