- 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 <- data.frame(outDEoptim$member$storepop[[10]])
- #a<-k_means(iris[, 3:4], 3, 100,2)
- a<-k_means(tab, 5, 100,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()