1.K_Means算法核心思想:(计算,递归)
(1) 从 n个数据对象任意选择 k 个对象作为初始聚类中心;
(2) 根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;
(3) 重新计算每个(有变化)聚类的均值(中心对象)
(4) 循环(2)到(3)直到每个聚类不再发生变化为止
2.简单实列:
问题:假设数据挖掘的任务是将8个点聚类成3个类别, A1(2,10), A2(2,5), A3(8,4), B1(5,8), B2(7,5), B3(6,4), C1(1,2), C2(3,7), C3(4,9),距离函数是Euclidean距离。 假设初始选择A1, B1, C1分别作为每个聚类的中心用 K-means来给出,
代码(C++实现):
第一次循环执行后的三个聚类中心是多少?最后的三个中心是多少?
(题目来自某位我喜欢的AI领域老师的课后习题。)
#include<iostream>
#include<math.h>
#include<vector>
#include<cstring>
using namespace std;
enum center_flag {
set_1,
set_2,
set_3
};//集合标志
struct Point {
float x{0};
float y{0};
center_flag flag{ set_1 };
}Point_A1, Point_A