1. Passo à passo, implementação do k-médias.
Função objetivo para k-means.
c ci
E= ∑ ∑ || xi - vj ||²
i=1 j=1
onde:
'|| xi – vj ||' é a distância euclidiana entre xi e vj.
th
' ci ' é o número de pontos de dados em i cluster.
' c ' é o número de centros de cluster.
Passos algorítmos para k-médias de agrupamento.
Deixe X = {x1,x2,x3,...,xn} o conjunto de pontos de dados e V={v1,v2,v3,…,Vc} o conjunto de
centróides.
A seguir é mostrado o código do k-means em c++ .
class Centroide{
public:
float x1=rand() % 40+50,y1= rand() % 30+30;
float xc=x1,yc=y1;
int tam1=0,tam2=0;
vector<pair<float,float>> coordenadas;
vector<pair<int,float>> DistanciaPonto;
Centroide(){
}
};
class Kmedias{
int p,centro;
Centroide c[5];
public:
Kmedias(int p,int centro){
this->p=p;
this->centro=centro;
}
void addPonto(float x1,float y1,int chave_){
int k=0;
float minimo=9999.0;
pair<float,float> p;
pair<int,float> p1;
for(int i=0;i<centro;i++){
if(calculaDistancia(x1,y1,c[i].xc,c[i].yc)<minimo){
minimo=calculaDistancia(x1,y1,c[i].xc,c[i].yc);
k=i;
}
}
p.first=x1;
p.second=y1;
c[k].coordenadas.push_back(p);
p1.first=chave_;
p1.second=calculaDistancia(x1,y1,c[k].xc,c[k].yc);