Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #############################################################################################
- # #
- # ZADANIE 5 # #
- # #
- #############################################################################################
- # ALGORYTM: C4.5 (C5.0)
- # ZBIÓR DANYCH: CLEVELAND
- # ustawianie ścieżki
- setwd("C:\\Users\\....")
- #getwd()
- # wczytywanie pakietów
- #install.packages(c("rpart","rpart.plot","C50", "plyr"))
- library("rpart")
- library("rpart.plot")
- library("C50")
- library("plyr")
- # wczytywanie danych
- cleveland <-read.csv(file="2_cleveland.csv", stringsAsFactors =TRUE)
- str(cleveland)
- ################### Zadanie 5.2 ######################################
- # dataframe do zbierania wyników
- wyniki<-data.frame(mincases = numeric(), poziom_błędu_train = numeric(), poziom_błędu_test = numeric())
- for (step in 1:60){
- # ustawianie ziarna dla powtarzalności wyników
- set.seed(123)
- # tworzenie podzbiorów
- folds <- split(cleveland, cut(sample(1:nrow(cleveland)),10))
- # wektory pod zbieranie błędów z każdego podzbioru
- errs.c50.train <- rep(NA, length(folds))
- errs.c50.test <- rep(NA, length(folds))
- for (i in 1:length(folds)) {
- # budowanie i testowanie modelu dla jednego podzbioru
- test <- ldply(folds[i], data.frame)[-1] # bez kolumny .id
- train <- ldply(folds[-i], data.frame)[-1]
- tmp.model <- C5.0(Num~., control=C5.0Control(CF=1,minCases = step), train)
- # predykcja dla zbioru trenującego
- tmp.pred.train <- predict(tmp.model, newdata=train, type="class")
- errs.c50.train[i]<-mean(tmp.pred.train != train$Num)
- #predykcja dla zbioru testowego
- tmp.pred.test <- predict(tmp.model, newdata=test, type="class")
- errs.c50.test[i]<-mean(tmp.pred.test != test$Num)
- }
- #średni błąd po 10-krotnej walidacji krzyżowej przy minCases = step
- wyniki[step, "mincases"] = step
- wyniki[step, "poziom_błędu_train"] = mean(errs.c50.train)
- wyniki[step, "poziom_błędu_test"] = mean(errs.c50.test)
- }
- # wykres błędów
- grid()
- plot(wyniki$poziom_błędu_train ~ wyniki$mincases, type= "l", col = "green", xlab = "mincases", ylab = "Średni błąd", ylim= c(0,0.7))
- lines(wyniki$poziom_błędu_test ~ wyniki$mincases, type= "l", col = "blue")
- legend("topright", legend = c("Średni błąd na zbiorze trenującym", "Średni błąd na zbiorze testowym"),
- col = c("green", "blue"), lty = 1)
- # Obserwacja:
- # Dla wartości mincases do ok. 10 średni błąd na zbiorze trenującym jest nieduży
- # w przeciwieństwie do średniego błędu na zbiorze testowym. Może to świadczyć o tym, że
- # przy dużej wielkości drzewa model dopasowuje się bardzo dobrze do danych trenujących,
- # a słabo do danych na których nie był uczony, czyli tzw.overfitting.
- ################### Zadanie 5.3 ######################################
- #nowy zbiór treningowy
- cleveland.train <- cleveland[, -ncol(cleveland)] # bez ostatniej kolumny
- cleveland.train.class <- unlist(cleveland["Num"])
- # tworzenie drzewa
- model<-C5.0(x=cleveland.train,y=cleveland.train.class,control=C5.0Control(CF=1,minCases = 10))
- summary(model)
- # wczytywanie nowych danych do klasyfikacji i predykcja za pomocą modelu
- new_data<-read.csv(file="new records_clev.txt")
- new_data["pred_Num"] <- predict(model,new_data,type="class")
- new_data
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement