Facebook
From byq, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 253
  1. library(datasets)
  2.  
  3.  
  4. library(cec2013)
  5. library(DEoptim)
  6.  
  7.  
  8. #WYMIAR
  9. D <- 2
  10. #NUMER FUNKCJI: 1...28
  11. I <- 11
  12.  
  13.  
  14. lower <- rep(-10, D)
  15. upper <- -lower
  16.  
  17. outDEoptim <- DEoptim(fn=function(x){cec2013(I, x)}, lower, upper,
  18.                       DEoptim.control(itermax = 100, storepopfrom = 1, storepopfreq = 2))
  19.  
  20.  
  21. print(outDEoptim)
  22.  
  23. ## plot intermediate populations
  24. #plot(outDEoptim, plot.type = "storepop")
  25.  
  26.  
  27.  
  28.  
  29. euclid <- function(x1,x2) #x musi byc postaci x1 - x2
  30. {
  31.   sqrt(rowSums((x1-x2)^2))
  32. }
  33.  
  34. klastry = list()
  35. wymiar <- 2
  36.  
  37. k_means <- function(dane, k, max_iter, wymiar)
  38.   #k - liczba klastrow, max_iter - maksymalna liczba iteracji
  39. {
  40.   #
  41.   # losowanie punktow poczatkowych
  42.   #
  43.   means <- (sample(1:dim(dane)[1],k))
  44.   clusters <- dane[means,1:wymiar]
  45.   print('klastry')
  46.   print(clusters)
  47.   #do kazdego klastra zostana przypisane najblizej lezace punkty
  48.   #dla kazdego punktu obliczane sa odleglosci od wszystkich klastrow
  49.   #przypisywany jest do najblizszego
  50.   clustlist = list() #inicjalizacja listy na macierze klastrow
  51.   w = list()
  52.   s = list()
  53.   for (i in 1:max_iter)
  54.   {
  55.     for (j in 1:k) #petla po wszystkich klastrach
  56.     {
  57.       # macierz klastrow
  58.       clustlist[[j]] <- t(matrix(clusters[j,1:wymiar],wymiar,dim(dane)[1]))
  59.       w[[j]]<-euclid(dane[,1:wymiar],unlist(clustlist[[j]]))
  60.     }
  61.     y<-matrix(unlist(w),dim(dane)[1],k)
  62.     for (l in 1:dim(dane)[1])
  63.     {
  64.       dane[l,wymiar+1]<-which.min(y[l,]) # przypisanie numeru klastra
  65.     }
  66.     colnames(dane)[wymiar+1] <- "klaster"
  67.     #wybor nowych srodkow klastrow
  68.    
  69.     for (m in 1:k)
  70.     {
  71.       u = dane[dane$klaster == m,]
  72.  
  73.       clusters[m,] <- colSums(u[1:wymiar])/dim(u)[1]
  74.  
  75.     }
  76.     klastry <- clusters
  77.    
  78.     print('nowe klastry')
  79.     print(clusters)
  80.   }
  81.   return(dane)
  82. }
  83.  
  84. tab <- outDEoptim$member$storepop[[49]]
  85.  
  86. #a<-k_means(iris[, 3:4], 3, 100,2)
  87.  
  88. a<-k_means(tab, 3, 2,2)
  89. #set.seed(20)
  90. #irisCluster <- kmeans(iris[, 3:4], 3, nstart = 20)
  91. #irisCluster
  92.  
  93. #irisCluster$cluster <- as.factor(irisCluster$cluster)
  94. #ggplot(iris, aes(Petal.Length, Petal.Width, color = irisCluster$cluster)) + geom_point()
  95.  
  96.  
  97. colnames(a) <- c("x","y","klaster")
  98.                
  99. b<-unlist(a[,wymiar+1])
  100. b<-replace(b,b==1,'pierwszy')
  101. b<-replace(b,b==2,'drugi')
  102. b<-replace(b,b==3,'trzeci')
  103. b<-replace(b,b==4,'czwarty')
  104. b<-replace(b,b==5,'piaty')
  105. b<-replace(b,b==6,'szosty')
  106. b<-replace(b,b==7,'siodmy')
  107. b<-replace(b,b==8,'osmy')
  108. b<-replace(b,b==9,'dziewiaty')
  109. b<-replace(b,b==10,'dziesiaty')
  110.  
  111. a[,wymiar+1]<-b
  112.  
  113.  
  114. library(ggplot2)
  115. ggplot(a, aes(x, y, color = klaster)) + geom_point()