手动设置kmean聚类的起始点的C++代码
以下是一个示例代码,用于手动设置k-means聚类的起始点:
#include <iostream>
#include <vector>
// 计算两个点之间的欧氏距离
double euclideanDistance(const std::vector<double>& point1, const std::vector<double>& point2) {
double sum = 0.0;
for (int i = 0; i < point1.size(); ++i) {
double diff = point1[i] - point2[i];
sum += diff * diff;
}
return std::sqrt(sum);
}
// 手动设置k-means聚类的起始点
std::vector<std::vector<double>> setInitialCentroids(const std::vector<std::vector<double>>& data, int k) {
std::vector<std::vector<double>> centroids;
// 在数据集中选择前k个点作为初始聚类中心
for (int i = 0; i < k; ++i) {
centroids.push_back(data[i]);
}
return centroids;
}
int main() {
// 数据集
std::vector<std::vector<double>> data = {
{1.0, 2.0},
{2.0, 1.0},
{3.0, 2.0},
{8.0, 9.0},
{9.0, 10.0},
{10.0, 8.0}
};
// 设置聚类数和初始聚类中心
int k = 2;
std::vector<std::vector<double>> centroids = setInitialCentroids(data, k);
// 打印初始聚类中心
std::cout << "Initial centroids:" << std::endl;
for (const auto& centroid : centroids) {
for (const auto& coordinate : centroid) {
std::cout << coordinate << " ";
}
std::cout << std::endl;
}
return 0;
}
这个示例代码演示了如何手动设置k-means聚类的起始点。在setInitialCentroids函数中,我们选择了数据集中的前k个点作为初始聚类中心。然后,在main函数中,我们设置了聚类数k为2,并调用setInitialCentroids函数来获取初始聚类中心。最后,我们打印出初始聚类中心的坐标。
请注意,这只是一个示例代码,实际应用中还需要添加k-means聚类算法的其他部分,例如计算每个点与聚类中心的距离、更新聚类中心等。
原文地址: https://www.cveoy.top/t/topic/hVzl 著作权归作者所有。请勿转载和采集!