Advertisement
JanuszKowalski123

zadanie_5

May 6th, 2024 (edited)
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.63 KB | None | 0 0
  1. #############################################################################################
  2. #                                                                                           #
  3. #                                         ZADANIE 5                                         #                                                                                                      #
  4. #                                                                                           #
  5. #############################################################################################
  6.  
  7. # ALGORYTM: C4.5 (C5.0)
  8. # ZBIÓR DANYCH: CLEVELAND
  9.  
  10. # ustawianie ścieżki
  11. setwd("C:\\Users\\....")
  12. #getwd()
  13. # wczytywanie pakietów
  14. #install.packages(c("rpart","rpart.plot","C50", "plyr"))
  15.  
  16. library("rpart")
  17. library("rpart.plot")
  18. library("C50")
  19. library("plyr")
  20.  
  21. # wczytywanie danych
  22. cleveland <-read.csv(file="2_cleveland.csv", stringsAsFactors =TRUE)
  23. str(cleveland)
  24.  
  25. ################### Zadanie 5.2 ######################################
  26.  
  27. # dataframe do zbierania wyników
  28. wyniki<-data.frame(mincases = numeric(), poziom_błędu_train = numeric(), poziom_błędu_test = numeric())
  29.  
  30. for (step in 1:60){
  31.   # ustawianie ziarna dla powtarzalności wyników
  32.   set.seed(123)
  33.   # tworzenie podzbiorów
  34.   folds <- split(cleveland, cut(sample(1:nrow(cleveland)),10))
  35.   # wektory pod zbieranie błędów z każdego podzbioru
  36.   errs.c50.train <- rep(NA, length(folds))
  37.   errs.c50.test <- rep(NA, length(folds))
  38.  
  39.   for (i in 1:length(folds)) {
  40.     # budowanie i testowanie modelu dla jednego podzbioru
  41.     test <- ldply(folds[i], data.frame)[-1] # bez kolumny .id
  42.     train <- ldply(folds[-i], data.frame)[-1]
  43.     tmp.model <- C5.0(Num~., control=C5.0Control(CF=1,minCases = step), train)
  44.     # predykcja dla zbioru trenującego
  45.     tmp.pred.train <- predict(tmp.model, newdata=train, type="class")
  46.     errs.c50.train[i]<-mean(tmp.pred.train != train$Num)
  47.     #predykcja dla zbioru testowego
  48.     tmp.pred.test <- predict(tmp.model, newdata=test, type="class")
  49.     errs.c50.test[i]<-mean(tmp.pred.test != test$Num)
  50.   }
  51.  
  52.   #średni błąd po 10-krotnej walidacji krzyżowej przy minCases = step
  53.   wyniki[step, "mincases"] = step
  54.   wyniki[step, "poziom_błędu_train"] = mean(errs.c50.train)
  55.   wyniki[step, "poziom_błędu_test"] =  mean(errs.c50.test)
  56.  
  57. }
  58.  
  59. # wykres błędów
  60. grid()
  61. plot(wyniki$poziom_błędu_train ~ wyniki$mincases,  type= "l", col = "green", xlab = "mincases", ylab = "Średni błąd", ylim= c(0,0.7))
  62. lines(wyniki$poziom_błędu_test ~ wyniki$mincases,  type= "l", col = "blue")
  63.  
  64. legend("topright", legend = c("Średni błąd na zbiorze trenującym", "Średni błąd na zbiorze testowym"),
  65.        col = c("green", "blue"), lty = 1)
  66.  
  67. # Obserwacja:
  68. # Dla wartości mincases do ok. 10 średni błąd na zbiorze trenującym jest nieduży
  69. # w przeciwieństwie do średniego błędu na zbiorze testowym. Może to świadczyć o tym, że
  70. # przy dużej wielkości drzewa model dopasowuje się bardzo dobrze do danych trenujących,
  71. # a słabo do danych na których nie był uczony, czyli tzw.overfitting.
  72.  
  73. ################### Zadanie 5.3 ######################################
  74.  
  75. #nowy zbiór treningowy
  76.  
  77. cleveland.train <- cleveland[, -ncol(cleveland)] # bez ostatniej kolumny
  78. cleveland.train.class <- unlist(cleveland["Num"])
  79.  
  80. # tworzenie drzewa
  81. model<-C5.0(x=cleveland.train,y=cleveland.train.class,control=C5.0Control(CF=1,minCases = 10))
  82. summary(model)
  83.  
  84. # wczytywanie nowych danych do klasyfikacji i predykcja za pomocą modelu
  85. new_data<-read.csv(file="new records_clev.txt")
  86. new_data["pred_Num"] <- predict(model,new_data,type="class")
  87. new_data
  88.  
  89.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement