library(datasets) library(cec2013) library(DEoptim) #WYMIAR D <- 2 #NUMER FUNKCJI: 1...28 I <- 11 lower <- rep(-10, D) upper <- -lower outDEoptim <- DEoptim(fn=function(x){cec2013(I, x)}, lower, upper, DEoptim.control(itermax = 100, storepopfrom = 1, storepopfreq = 2)) print(outDEoptim) ## plot intermediate populations #plot(outDEoptim, plot.type = "storepop") euclid <- function(x1,x2) #x musi byc postaci x1 - x2 { sqrt(rowSums((x1-x2)^2)) } klastry = list() wymiar <- 2 k_means <- function(dane, k, max_iter, wymiar) #k - liczba klastrow, max_iter - maksymalna liczba iteracji { # # losowanie punktow poczatkowych # means <- (sample(1:dim(dane)[1],k)) clusters <- dane[means,1:wymiar] print('klastry') print(clusters) #do kazdego klastra zostana przypisane najblizej lezace punkty #dla kazdego punktu obliczane sa odleglosci od wszystkich klastrow #przypisywany jest do najblizszego clustlist = list() #inicjalizacja listy na macierze klastrow w = list() s = list() for (i in 1:max_iter) { for (j in 1:k) #petla po wszystkich klastrach { # macierz klastrow clustlist[[j]] <- t(matrix(clusters[j,1:wymiar],wymiar,dim(dane)[1])) w[[j]]<-euclid(dane[,1:wymiar],unlist(clustlist[[j]])) } y<-matrix(unlist(w),dim(dane)[1],k) for (l in 1:dim(dane)[1]) { dane[l,wymiar+1]<-which.min(y[l,]) # przypisanie numeru klastra } colnames(dane)[wymiar+1] <- "klaster" #wybor nowych srodkow klastrow for (m in 1:k) { u = dane[dane$klaster == m,] clusters[m,] <- colSums(u[1:wymiar])/dim(u)[1] } klastry <- clusters print('nowe klastry') print(clusters) } return(dane) } tab <- outDEoptim$member$storepop[[49]] #a<-k_means(iris[, 3:4], 3, 100,2) a<-k_means(tab, 3, 2,2) #set.seed(20) #irisCluster <- kmeans(iris[, 3:4], 3, nstart = 20) #irisCluster #irisCluster$cluster <- as.factor(irisCluster$cluster) #ggplot(iris, aes(Petal.Length, Petal.Width, color = irisCluster$cluster)) + geom_point() colnames(a) <- c("x","y","klaster") b<-unlist(a[,wymiar+1]) b<-replace(b,b==1,'pierwszy') b<-replace(b,b==2,'drugi') b<-replace(b,b==3,'trzeci') b<-replace(b,b==4,'czwarty') b<-replace(b,b==5,'piaty') b<-replace(b,b==6,'szosty') b<-replace(b,b==7,'siodmy') b<-replace(b,b==8,'osmy') b<-replace(b,b==9,'dziewiaty') b<-replace(b,b==10,'dziesiaty') a[,wymiar+1]<-b library(ggplot2) ggplot(a, aes(x, y, color = klaster)) + geom_point()