-
Notifications
You must be signed in to change notification settings - Fork 0
/
LSED_Lab_12_Kolokwium_2_2.R
66 lines (60 loc) · 3.08 KB
/
LSED_Lab_12_Kolokwium_2_2.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# LSED - Kolokwium 2
# Autor: Szymon Baczyński 270626
rm(list=ls())
library(MASS)
library(e1071)
# Punkt 1
cytowania_raw <- read.table("http://www.if.pw.edu.pl/~julas/LSED/file_sciento.txt")
cytowania <- cytowania_raw
# Punkt 2
cytowania$cit <- ifelse(cytowania$cit>20,2,1)
# Punkt 3
colnames(cytowania)[10] <- "class"
cytowania$class <- factor(cytowania$class)
### ----------------------------------------------------------------------------- ###
CM.large <- function(org.class, pred.class) {
CM <- table(org.class, pred.class)
ACC <- sum(diag(CM)) / sum(CM)
return(ACC = round(ACC,4))
}
# Punkt 4
# SVM <- svm(cytowania[,ncol(cytowania)] ~ ., type = "C-classification", data = cytowania, cost = 100, scale = F, kernel = "linear")
cyt_SVM <- lapply(c(2:(ncol(cytowania)-1)), function(v) svm(cytowania[,ncol(cytowania)] ~ ., type = "C-classification", data = cytowania[,1:v], cost = 100, scale = F, kernel = "linear"))
# Punkt 5
SVM_Predict <- lapply(cyt_SVM, function(v) predict(v,cytowania))
SVM_ACC <- sapply(SVM_Predict, function(v) CM.large(v,cytowania$class))
names(SVM_ACC) <- c(2:9)
print("SVM - Skuteczność w zależności od ilości zmiennych:"); print(SVM_ACC)
# Punkt 6
plot(c(2:(ncol(cytowania)-1)), SVM_ACC, main="Skuteczność w zależności od ilości zmiennych",xlab="Ilość użytych zmiennych", ylab="Skuteczność", type = "b")
png("Kol_2_SB_Punkt_6.png")
plot(c(2:(ncol(cytowania)-1)), SVM_ACC, main="Skuteczność w zależności od ilości zmiennych",xlab="Ilość użytych zmiennych", ylab="Skuteczność", type = "b")
dev.off()
# Punkt 7
PCA <- princomp(~., cor=F, data=cytowania[,-ncol(cytowania)])
# Punkt 8
cat("\n"); print("PCA - Wariancja:"); print(round(PCA$sdev^2,4))
plot(PCA, main=""); title("Wariancja", cex.main=1.4)
sum_PCA <- sapply(c(1:(ncol(cytowania)-1)), function(v) sum(PCA$sdev[1:v]^2))
suma <- max(sum_PCA)
plot(sum_PCA/suma, main="Unormowana Skumulowana Wariancja", xlab="Liczba składowych", ylab="Unormowana Skumulowana Wariancja",type="b", col="red" )
png("Kol_2_SB_Punkt_8.png")
plot(sum_PCA/suma, main="Unormowana Skumulowana Wariancja", xlab="Liczba składowych", ylab="Unormowana Skumulowana Wariancja",type="b", col="red" )
dev.off()
# text(c(1:9), sum_PCA/suma, labels=(round(sum_PCA/suma,4)), cex= 0.7, pos=4)
axis(side=1, at=c(1:length(sum_PCA)))
# Punkt 9
print(PCA$loadings)
plot(PCA$scores, col = as.factor(cytowania$class)); title("Składowe", cex.main=1.4);
# Punkt 10
cat("\n")
print("Według wykresu Unormowanej Skumulowanej Wariancji - do opisu układu wystarczyłyby 3 pierwsze składowe główne z PCA")
# Punkt 11
SVM_4 <- svm(cytowania[,ncol(cytowania)] ~ ., type = "C-classification", data = PCA$scores[,1:3], cost = 100, scale = F, kernel = "linear")
SVM_4_Predict <- predict(SVM_4,PCA$scores)
# Punkt 12
cat(c("ACC dla wybranej wartości nowych zmiennych PCA_Comp[1:3]: ", ACC_PCA<-CM.large(SVM_4_Predict,cytowania$class), "\n"))
print("SVM - Skuteczność w zależności od ilości zmiennych:"); print(SVM_ACC)
cat("\n")
Podsumowanie <- paste("Skuteczność klasyfikatora wynosi: ACC = ",ACC_PCA," .Wynik ten jest porównywalny do maksymalnej skuteczności SVM na danych podstawowych." ,sep="")
print(Podsumowanie)