• Nie Znaleziono Wyników

Klasyfikacja oparta na nieparametrycznej estymacji

N/A
N/A
Protected

Academic year: 2021

Share "Klasyfikacja oparta na nieparametrycznej estymacji"

Copied!
5
0
0

Pełen tekst

(1)

Klasyfikacja oparta na nieparametrycznej estymacji

Marcin Orchel

1 Wstęp

1.1 Estymatory jądrowe

2 Zadania

2.1 Zadania na 3.0

Napisać skrypt w R. W skrypcie

• dla wygenerowanych danych dwuwymiarowych dwóch klas z rozkładów normalnych wykonać klasyfikację estymatorami jądrowymi

• przetestować klasyfikację dla różnej liczności próby, róznych wartości współczyn- nika wygładzającego

• wyświetlić na jednym wykresie punkty, granicę decyzyjną oraz poziomice rozkła- dów

• wyświetlać na konsoli szybkość wyszukania rozwiązania i jakość mierzoną za po- mocą średniego błędu klasyfikacji na zbiorze testowym

• wyświetlić punkty, granicę decyzyjną oraz dwie funkcje gęstości prawdopodobień- stwa na wykresie trójwymiarowym

• Dodać komentarz do skryptu opisujący krótko na czym polegają użyte metody oraz wnioski z badań.

Wskazówki do R Wskazówki do Matlaba Przykłady

• dla jednego wymiaru

dens1 <- density(dane$X1, kernel="gaussian")

dens2 <- density(dane$X1, bw=bw.nrd(dane$X1), kernel="gaussian") dens3 <- density(dane$X1, bw=bw.SJ(dane$X1), kernel="gaussian") plot(dens1, type="l", lwd=2, lty=2, xlab="X1", xlim=c(-10, 10),

ylim=c(0, 0.25))

(2)

lines(dens2, lwd=2, col="red") lines(dens3, lwd=2, col="blue")

hist(dane$X1, breaks=15, add=TRUE, probability=TRUE)

• dla jednego wymiaru dla różnych klas

gest1 <- density(dane$X1[c(1:50)], bw="nrd", from=-10, to=10) gest2 <- density(dane$X1[c(51:100)], bw="nrd", from=-10, to=10) plot(gest1, type="l", xlab="X1", xlim=c(-10, 10), ylim=c(0, 1.0),

main="") lines(gest2)

plot(gest1$x, (50/100)*gest1$y + (11/62)*gest2$y, type="l", xlim=c(-10, 10), ylim=c(0,0.25), xlab="X1", main="") text(0, 0.23, "Mieszanina gestosci")

• dla dwóch wymiarów gęstości prawdopodobieństwa par(mfrow=c(2,2), pty="m", mar=c(4,2,2,1))

kde2dResult1 <- kde2d(points1[,1], points1[,2], n=25, h=c(3,3), lims=c(-6, 8, -4, 6))

kde2dResult2 <- kde2d(points2[,1], points2[,2], n=25, h=c(3,3), lims=c(-6, 8, -4, 6))

persp(kde2dResult1, phi=20, theta=10, d=5, xlab=c("X1"), ylab=c("X2"))

persp(kde2dResult2, phi=20, theta=10, d=5, xlab=c("X1"), ylab=c("X2"))

• wyświetlanie konturów gęstości prawdopodobieństwa contour(kde2dResult1, nlevels=15, col="red")

contour(kde2dResult2, nlevels=15, col="blue", add=TRUE)

• wyświetlenie granicy decyzyjnej f1mod <- f1

f2mod <- f2

f1mod$z <- p1*f1$z f2mod$z <- p2*f2$z

contour(kde2dResult1, nlevels=25, col="red")

contour(kde2dResult2, nlevels=15, col="blue", add=TRUE) zerojeden <- ifelse((f1mod$z > f2mod$z), 1, 0)

contour(f1$x, f1$y, zerojeden, levels=c(0.5), add=TRUE, lwd=4) points(dane$X1[num1], dane$X2[num1], pch=19, cex=1.2)

points(dane$X1[num2], dane$X2[num2], pch=22, lwd=2)

• przykład z lda i kde2d

(3)

require("MASS") require("rgl")

sigma <- matrix(c(10,3,3,2),2,2) sigma2 <- matrix(c(10,1,1,5),2,2)

points1<-mvrnorm(n = 1000, c(-1, -1), sigma) points2<-mvrnorm(n = 1000, c(2, 1), sigma2) points1b<-cbind(points1, rep(1, 1000)) points2b<-cbind(points2, rep(-1, 1000)) rbind(points1b, points2b)

allPoints<-rbind(points1b, points2b) as.data.frame(allPoints)

allPointsDataFrame<-as.data.frame(allPoints) c <- allPointsDataFrame$V3

w <- allPointsDataFrame$V1 l <- allPointsDataFrame$V2

lda.allPointsDataFrame <- lda(c~w+l, data=allPointsDataFrame) myallPointsDataFrame<- matrix(nrow=2000, ncol=2)

myallPointsDataFrame[,1] <- w myallPointsDataFrame[,2] <- l class<- c

min.w <- min(w) max.w <- max(w) min.l <- min(l) max.l <- max(l)

x<- seq(min.w, max.w, length=100) y<- seq(min.l, max.l, length=100)

myallPointsDataFrameT<-expand.grid(w=x, l=y) n <- length(x)

y.pred <- predict(lda.allPointsDataFrame,

as.data.frame(myallPointsDataFrame)) error <- 1 - sum(y.pred$class==class)/length(class)

y.pred <- predict(lda.allPointsDataFrame, myallPointsDataFrameT) plot(w, l, type="n", xlim=c(min.w, max.w), ylim=c(min.l, max.l)) text(w, l, substr(c, 1, 1))

z <- y.pred$posterior[,1] - y.pred$posterior[,2]

contour(x, y, matrix(z, n), add=TRUE, levels=0.5, labcex = 0, drawlabels = FALSE)

par(mfrow=c(2,2), pty="m", mar=c(4,2,2,1))

kde2dResult1 <- kde2d(points1[,1], points1[,2], n=30, h=c(3,3)) kde2dResult2 <- kde2d(points2[,1], points2[,2], n=30, h=c(3,3),

lims=c(-6, 8, -4, 6))

persp(kde2dResult1, phi=20, theta=10, d=5, xlab=c("X1"), ylab=c("X2"))

(4)

persp(kde2dResult2, phi=20, theta=10, d=5, xlab=c("X1"), ylab=c("X2"))

col1 <- rainbow(length(kde2dResult1$z))[rank(kde2dResult1$z)]

col2 <- rev(rainbow(length(kde2dResult2$z))[rank(kde2dResult2$z)]) persp3d(kde2dResult1, col=col1)

persp3d(kde2dResult2, col=col2, add=TRUE) f1mod <- kde2dResult1

f2mod <- kde2dResult2 f1mod$z <- kde2dResult1$z f2mod$z <- kde2dResult2$z

contour(kde2dResult1, nlevels=15, col="red")

contour(kde2dResult2, nlevels=15, col="blue", add=TRUE) zerojeden <- ifelse((f1mod$z > f2mod$z), 1, 0)

contour(kde2dResult1$x, kde2dResult2$y, zerojeden, levels=c(0.5), add=TRUE, lwd=4)

contour(x, y, matrix(z, n), add=TRUE, levels=0.5, labcex = 0, drawlabels = FALSE)

#points(points1[,1], points1[,2], pch=19, cex=1.2)

#points(points2[,1], points2[,2], pch=22, lwd=2)

• predykcja dla kde2d

gr <- data.frame(with(kde2dResult1, expand.grid(x,y)), as.vector(kde2dResult1$z))

names(gr) <- c("xgr", "ygr", "zgr")

gr2 <- data.frame(with(kde2dResult2, expand.grid(x,y)), as.vector(kde2dResult2$z))

names(gr2) <- c("xgr", "ygr", "zgr") mod2 <- loess(zgr~xgr*ygr, data=gr2,

control=loess.control(surface="direct")) mod <- loess(zgr~xgr*ygr, data=gr,

control=loess.control(surface="direct"))

result1a<- predict(mod, newdata=data.frame(xgr=points1[,1], ygr=points1[,2]))

result1b<- predict(mod2, newdata=data.frame(xgr=points1[,1], ygr=points1[,2]))

result2a<- predict(mod, newdata=data.frame(xgr=points2[,1], ygr=points2[,2]))

result2b<- predict(mod2, newdata=data.frame(xgr=points2[,1], ygr=points2[,2]))

(5)

zerojedenResult1 <- ifelse((result1a > result1b), 1, 0) zerojedenResult2 <- ifelse((result2b > result2a), 1, 0) (length(zerojedenResult1) -

sum(zerojedenResult1))/length(zerojedenResult1) (length(zerojedenResult2) -

sum(zerojedenResult2))/length(zerojedenResult2) ((length(zerojedenResult1) - sum(zerojedenResult1)) +

(length(zerojedenResult2) - sum(zerojedenResult2))) / (length(zerojedenResult1) + length(zerojedenResult2))

2.2 Zadania na 4.0

• na wykresie trójwymiarowym zaznacz funkcje gęstości dla danych z zadania na 3.0, dane treningowe i klasyfikator oparty na estymacji jądrowej

• dla wygenerowanych danych trójwymiarowych dwóch klas z rozkładów normalnych zaznacz na wykresie trójwymiarowym dane treningowe i klasyfikator oparty na estymacji jądrowej

• oblicz błąd klasyfikacji na zbiorze testowym dla tego klasyfikatora 2.3 Zadania na 5.0

• wykonać klasyfikację opartą na estymacji jądrowej dla wybranych danych wielo- wymiarowych ze strony uci, porównać jakość klasyfikacji z klasyfikatorem gaus- sowskim

Cytaty

Powiązane dokumenty

W celu weryfikacji poprawności proponowanej metody wyznaczania linii kontrolnych na podstawie kwantyli funkcji gęstości rozkładu empirycznego oszacowanej w drodze estymacji

• dla wygenerowanych danych dwuwymiarowych dwóch klas z rozkładów normalnych zaznacz na wykresie dane treningowe, klasyfikator svm, dla różnych wartości C oraz sigma, dla

• dla wygenerowanych danych dwuwymiarowych dwóch klas z rozkładów normal- nych zaznacz na wykresie dane treningowe, klasyfikator sieciami neuronowymi, dla różnej liczby neuronów

• dla wygenerowanych danych jednowymiarowych dwóch klas z rozkładów normal- nych zaznacz na wykresie dwuwymiarowym funkcję regresji logistycznej wraz z danymi treningowymi

„ Wektory własne są najszybszym rozwiązaniem dla pewnych operacji, mogą jednak być wykorzystane tylko w sytuacjach, gdy zbiór uniwersalny jest mały. „ Tablice mieszające

Jeśli drzewo T nie jest puste oraz jego korzeń zawiera element x, to x znajduje się już w drzewie i nie wykonujemy żadnych dodatkowych kroków. Indukcja: Jeśli T nie jest puste i

Zasada największej wiarygodności sugeruje taki wybór parametru  , przy którym zaobserwowany wynik eksperymentu x X jest najbardziej prawdopodobny.. Kłopoty z

4.3 Entomolog pobierał próbkę losową z dużej populacji pewnych owadów.. Wyznacz estymator największej wiarogodności