SlideShare uma empresa Scribd logo
1 de 3
Baixar para ler offline
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);
c[k].DistanciaPonto.push_back(p1);
}
float calculaDistancia(float x1,float y1,float xc,float yc){
return sqrt(pow((x1-xc),2)+pow((y1-yc),2));
}
void imprimir(){
int v=0;
for(int k=0;k<centro;k++){
cout<<endl<<"CENTRÓIDE "<<++v<<endl;
for(int i=0;i<c[k].DistanciaPonto.size();i++){
cout<<"Ponto["<<c[k].DistanciaPonto[i].first<<"] Distancia: "<<
fixed<<setprecision(2)<<c[k].DistanciaPonto[i].second<<" Posicao"<<
"("<<c[k].coordenadas[i].first<<","<<c[k].coordenadas[i].second<<")"<<endl;
}
}
}
void NewPosition(){
vector<pair<float,float>> vetorAux;
vector<int> Chave;
pair<float,float> p;
float Vx,Vy;
for(int k=0;k<centro;k++){
Vx=0,Vy=0;
for(int i=0;i<c[k].DistanciaPonto.size();i++){
Vx+=c[k].coordenadas[i].first;
Vy+=c[k].coordenadas[i].second;
p.first=c[k].coordenadas[i].first;
p.second=c[k].coordenadas[i].second;
vetorAux.push_back(p);
}
if(c[k].DistanciaPonto.size()!=0){
c[k].xc=Vx/c[k].DistanciaPonto.size();
c[k].yc=Vy/c[k].DistanciaPonto.size();
}
c[k].coordenadas.clear();
for(int i =0;i<c[k].DistanciaPonto.size();i++){
Chave.push_back(c[k].DistanciaPonto[i].first);
}
c[k].DistanciaPonto.clear();
for(int i=0;i<vetorAux.size();i++){
addPonto(vetorAux[i].first,vetorAux[i].second,Chave[i]);
}
vetorAux.clear();
Chave.clear();
}
}
void imprimirPosicaoCentroide(){
int k=1;
for(int i=0;i<centro;i++){
cout<<"POSICAO DO CENTROIDE "<<k<<": "<<c[i].xc<<" "<<c[i].yc<<endl;
k++;
}
}
};

Mais conteúdo relacionado

Mais procurados (11)

Avaliação (númeors complexos )
Avaliação   (númeors complexos )Avaliação   (númeors complexos )
Avaliação (númeors complexos )
 
Noção de expressão algebrica.pdf
Noção de expressão algebrica.pdfNoção de expressão algebrica.pdf
Noção de expressão algebrica.pdf
 
Td 13 matemática ii
Td 13   matemática iiTd 13   matemática ii
Td 13 matemática ii
 
Geometria analítica: ponto, reta e circunferência
Geometria analítica: ponto, reta e circunferênciaGeometria analítica: ponto, reta e circunferência
Geometria analítica: ponto, reta e circunferência
 
Simulado 2
Simulado 2Simulado 2
Simulado 2
 
Números complexos 1
Números complexos 1Números complexos 1
Números complexos 1
 
Divisão de polinômios
Divisão de polinômiosDivisão de polinômios
Divisão de polinômios
 
Lista m3
Lista m3Lista m3
Lista m3
 
matematica 8 ano
matematica 8 anomatematica 8 ano
matematica 8 ano
 
Lista de matemática 8 ano 2 unidade
Lista de matemática 8 ano 2 unidadeLista de matemática 8 ano 2 unidade
Lista de matemática 8 ano 2 unidade
 
Td 2 matemática ii
Td 2   matemática ii Td 2   matemática ii
Td 2 matemática ii
 

Destaque

Proyecto 2 de opcion del alumno ii
Proyecto  2 de opcion del alumno iiProyecto  2 de opcion del alumno ii
Proyecto 2 de opcion del alumno iiAbdon Duran
 
Corporate Lessons
Corporate LessonsCorporate Lessons
Corporate Lessonskoolkaleem
 
Functional Conf 2015
Functional Conf 2015Functional Conf 2015
Functional Conf 2015Naresh Jain
 
Typeography poster
Typeography posterTypeography poster
Typeography posterLucy Taylor
 
Rúbrica orientativa: Presentación de Prototipo - Unidad 4 - Emprendumooc
Rúbrica orientativa: Presentación de Prototipo - Unidad 4 - EmprendumoocRúbrica orientativa: Presentación de Prototipo - Unidad 4 - Emprendumooc
Rúbrica orientativa: Presentación de Prototipo - Unidad 4 - EmprendumoocINTEF
 

Destaque (11)

Moon Spirit(Sm) S
Moon Spirit(Sm) SMoon Spirit(Sm) S
Moon Spirit(Sm) S
 
Blog project
Blog projectBlog project
Blog project
 
Proyecto 2 de opcion del alumno ii
Proyecto  2 de opcion del alumno iiProyecto  2 de opcion del alumno ii
Proyecto 2 de opcion del alumno ii
 
Corporate Lessons
Corporate LessonsCorporate Lessons
Corporate Lessons
 
Functional Conf 2015
Functional Conf 2015Functional Conf 2015
Functional Conf 2015
 
Reference-Sambuichi
Reference-SambuichiReference-Sambuichi
Reference-Sambuichi
 
Uma escola informatizada
Uma escola informatizadaUma escola informatizada
Uma escola informatizada
 
Typeography poster
Typeography posterTypeography poster
Typeography poster
 
Rúbrica orientativa: Presentación de Prototipo - Unidad 4 - Emprendumooc
Rúbrica orientativa: Presentación de Prototipo - Unidad 4 - EmprendumoocRúbrica orientativa: Presentación de Prototipo - Unidad 4 - Emprendumooc
Rúbrica orientativa: Presentación de Prototipo - Unidad 4 - Emprendumooc
 
Aulão solidário 2015
Aulão solidário 2015Aulão solidário 2015
Aulão solidário 2015
 
Einladungsbroschüre_Trendtag-2011.pdf
Einladungsbroschüre_Trendtag-2011.pdfEinladungsbroschüre_Trendtag-2011.pdf
Einladungsbroschüre_Trendtag-2011.pdf
 

Semelhante a Kmeans

Introdução a programação gráfica com Processing - Aula 02
Introdução a programação gráfica com Processing - Aula 02Introdução a programação gráfica com Processing - Aula 02
Introdução a programação gráfica com Processing - Aula 02Lucas Cabral
 
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Os Fantasmas !
 
Cg 03 primitivas_graficas
Cg 03 primitivas_graficasCg 03 primitivas_graficas
Cg 03 primitivas_graficasAngelo Oliveira
 
Cartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfCartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfEdkallenn Lima
 
Aula 13 - Matrizes
Aula 13 - MatrizesAula 13 - Matrizes
Aula 13 - MatrizesPacc UAB
 
Modular
ModularModular
Modulargdw147
 
Estatistica descritiva
Estatistica descritivaEstatistica descritiva
Estatistica descritivaAdhara Savi
 
Classificação: Dimensão VC e Máquinas de Vetores Suporte (SVMs)
Classificação: Dimensão VC e Máquinas de Vetores Suporte (SVMs)Classificação: Dimensão VC e Máquinas de Vetores Suporte (SVMs)
Classificação: Dimensão VC e Máquinas de Vetores Suporte (SVMs)Ben Hur Bahia do Nascimento
 
CAP 375 - Aula 1 - Introdução - Eduardo Luz
CAP 375 - Aula 1 - Introdução - Eduardo LuzCAP 375 - Aula 1 - Introdução - Eduardo Luz
CAP 375 - Aula 1 - Introdução - Eduardo LuzEduardo Luz
 
Redes neurais com matlab
Redes neurais com matlabRedes neurais com matlab
Redes neurais com matlabRenato Vicente
 
Inteligencia artificial 10
Inteligencia artificial 10Inteligencia artificial 10
Inteligencia artificial 10Nauber Gois
 
Aula 11 - Vetores unidimensionais - parte 1
Aula 11 - Vetores unidimensionais - parte 1Aula 11 - Vetores unidimensionais - parte 1
Aula 11 - Vetores unidimensionais - parte 1Pacc UAB
 
Principais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoPrincipais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoIntel Software Brasil
 
Trabalho nº8
Trabalho nº8Trabalho nº8
Trabalho nº8Rui Lopes
 
Trabalho nº9
Trabalho nº9Trabalho nº9
Trabalho nº9Rui Lopes
 

Semelhante a Kmeans (20)

Introdução a programação gráfica com Processing - Aula 02
Introdução a programação gráfica com Processing - Aula 02Introdução a programação gráfica com Processing - Aula 02
Introdução a programação gráfica com Processing - Aula 02
 
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 14 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Cg 03 primitivas_graficas
Cg 03 primitivas_graficasCg 03 primitivas_graficas
Cg 03 primitivas_graficas
 
VetoresMatrizes.pdf
VetoresMatrizes.pdfVetoresMatrizes.pdf
VetoresMatrizes.pdf
 
linear-algebra.pdf
linear-algebra.pdflinear-algebra.pdf
linear-algebra.pdf
 
Cartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfCartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdf
 
Aula 13 - Matrizes
Aula 13 - MatrizesAula 13 - Matrizes
Aula 13 - Matrizes
 
Aula 5
Aula 5 Aula 5
Aula 5
 
Modular
ModularModular
Modular
 
Estatistica descritiva
Estatistica descritivaEstatistica descritiva
Estatistica descritiva
 
Bubble Sort Classe Java
Bubble Sort Classe JavaBubble Sort Classe Java
Bubble Sort Classe Java
 
Classificação: Dimensão VC e Máquinas de Vetores Suporte (SVMs)
Classificação: Dimensão VC e Máquinas de Vetores Suporte (SVMs)Classificação: Dimensão VC e Máquinas de Vetores Suporte (SVMs)
Classificação: Dimensão VC e Máquinas de Vetores Suporte (SVMs)
 
CAP 375 - Aula 1 - Introdução - Eduardo Luz
CAP 375 - Aula 1 - Introdução - Eduardo LuzCAP 375 - Aula 1 - Introdução - Eduardo Luz
CAP 375 - Aula 1 - Introdução - Eduardo Luz
 
Redes neurais com matlab
Redes neurais com matlabRedes neurais com matlab
Redes neurais com matlab
 
Inteligencia artificial 10
Inteligencia artificial 10Inteligencia artificial 10
Inteligencia artificial 10
 
Insertion Sort Classe Java
Insertion Sort Classe JavaInsertion Sort Classe Java
Insertion Sort Classe Java
 
Aula 11 - Vetores unidimensionais - parte 1
Aula 11 - Vetores unidimensionais - parte 1Aula 11 - Vetores unidimensionais - parte 1
Aula 11 - Vetores unidimensionais - parte 1
 
Principais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoPrincipais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorização
 
Trabalho nº8
Trabalho nº8Trabalho nº8
Trabalho nº8
 
Trabalho nº9
Trabalho nº9Trabalho nº9
Trabalho nº9
 

Kmeans

  • 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);
  • 2. c[k].DistanciaPonto.push_back(p1); } float calculaDistancia(float x1,float y1,float xc,float yc){ return sqrt(pow((x1-xc),2)+pow((y1-yc),2)); } void imprimir(){ int v=0; for(int k=0;k<centro;k++){ cout<<endl<<"CENTRÓIDE "<<++v<<endl; for(int i=0;i<c[k].DistanciaPonto.size();i++){ cout<<"Ponto["<<c[k].DistanciaPonto[i].first<<"] Distancia: "<< fixed<<setprecision(2)<<c[k].DistanciaPonto[i].second<<" Posicao"<< "("<<c[k].coordenadas[i].first<<","<<c[k].coordenadas[i].second<<")"<<endl; } } } void NewPosition(){ vector<pair<float,float>> vetorAux; vector<int> Chave; pair<float,float> p; float Vx,Vy; for(int k=0;k<centro;k++){ Vx=0,Vy=0; for(int i=0;i<c[k].DistanciaPonto.size();i++){ Vx+=c[k].coordenadas[i].first; Vy+=c[k].coordenadas[i].second; p.first=c[k].coordenadas[i].first; p.second=c[k].coordenadas[i].second; vetorAux.push_back(p); } if(c[k].DistanciaPonto.size()!=0){ c[k].xc=Vx/c[k].DistanciaPonto.size(); c[k].yc=Vy/c[k].DistanciaPonto.size(); } c[k].coordenadas.clear(); for(int i =0;i<c[k].DistanciaPonto.size();i++){ Chave.push_back(c[k].DistanciaPonto[i].first); } c[k].DistanciaPonto.clear(); for(int i=0;i<vetorAux.size();i++){ addPonto(vetorAux[i].first,vetorAux[i].second,Chave[i]); } vetorAux.clear(); Chave.clear(); } } void imprimirPosicaoCentroide(){ int k=1; for(int i=0;i<centro;i++){ cout<<"POSICAO DO CENTROIDE "<<k<<": "<<c[i].xc<<" "<<c[i].yc<<endl; k++; }