用c++写一个一维的k-means聚类算法
时间: 2023-07-01 17:22:45 浏览: 79
好的,以下是一个简单的C++实现一维k-means聚类算法的示例代码:
```c++
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<double> kMeans(vector<double>& data, int k) {
vector<double> centroids(k);
for (int i = 0; i < k; i++) {
centroids[i] = data[i];
}
vector<int> clusters(data.size());
while (true) {
bool changed = false;
for (int i = 0; i < data.size(); i++) {
double minDist = INFINITY;
int minIndex = -1;
for (int j = 0; j < k; j++) {
double dist = abs(data[i] - centroids[j]);
if (dist < minDist) {
minDist = dist;
minIndex = j;
}
}
if (clusters[i] != minIndex) {
changed = true;
clusters[i] = minIndex;
}
}
if (!changed) {
break;
}
for (int i = 0; i < k; i++) {
double sum = 0;
int count = 0;
for (int j = 0; j < data.size(); j++) {
if (clusters[j] == i) {
sum += data[j];
count++;
}
}
if (count > 0) {
centroids[i] = sum / count;
}
}
}
return centroids;
}
int main() {
vector<double> data = {1, 2, 3, 4, 5, 10, 11, 12, 13, 14};
int k = 2;
vector<double> centroids = kMeans(data, k);
for (int i = 0; i < centroids.size(); i++) {
cout << "Centroid " << i << ": " << centroids[i] << endl;
}
return 0;
}
```
这个示例代码接受一个一维的数据集和一个聚类数量k作为输入,返回每个聚类的中心点坐标。在算法的主体部分中,我们首先随机选取k个数据点作为聚类的中心点,然后不断迭代直到聚类的结果不再发生变化。在每次迭代中,我们先计算每个数据点与中心点的距离,并将其分配到距离最近的聚类中。然后,我们重新计算每个聚类的中心点坐标,将其作为下一轮迭代的中心点。最终,我们输出每个聚类的中心点坐标。在这个示例代码中,我们使用了一个简单的一维数据集来测试算法的正确性。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)