12 Klasyfikacja
W zagadnieniach klasyfikacyjnych poszukujemy reguły (klasyfikatora) (zazwyczaj oznaczanego literą \(d\)) pozwalającego na przyporządkowanie obiektu (opisanego przez \(p\)-wymiarowy wektor obserwowanych cech \(\pmb x=(x_1,x_2,\ldots ,x_p)'\)) do jednej z \(K\) \((K\geq 2)\) klas. \[d:\ \mathcal{X} \rightarrow \{ 1,2,\ldots ,K \}.\]
Uwaga: Liczby \(1,2,\ldots ,K\) oznaczają etykiety klas.
Oznaczenia:
\(\pi_1=P(Y=1),\ldots ,\pi_K=P(Y=K)\) - prawdopodobieństwa a priori,
\(p_1(\pmb x)=P(Y=1|\pmb X=\pmb x),\ldots ,p_K(\pmb x)=P(Y=K|\pmb X=\pmb x)\) - prawdopodobieństwa a posteriori.
Wzór Bayesa
\[p_k(\pmb x)=\frac{\pi_kf_k(\pmb x)}{\sum_{i=1}^K\pi_if_i(\pmb x)},\ k=1,\ldots ,K,\]
gdzie \(f_k(\pmb x)\) oznacza gęstość rozkładu wektora \(\pmb X\) w \(k\)-tej klasie.
Bayesowska reguła klasyfikacyjna
\[d_B(\pmb x)=\arg\max_k p_k(\pmb x)=\arg\max_k \pi_kf_k(\pmb x),\]
gdzie \(\arg\max_k\) oznacza tę wartość \(k\), która maksymalizuje dane wyrażenie.
Jeżeli \(f_k(\pmb x)\) jest gęstością \(p\)-wymiarowego rozkładu normalnego \(N_p(\pmb\mu_k,\pmb\Sigma)\), to klasyfikator bayesowski ma postać \[d_B(\pmb x)=\arg\max_k\delta_k(\pmb x),\] gdzie \[\delta_k(\pmb x)=\pmb x'\pmb \Sigma^{-1}\pmb \mu_k-\frac{1}{2}\pmb \mu_k'\pmb \Sigma^{-1}\pmb \mu_k+\ln \pi_k.\]
Parametry \(\pi_k\), \(\pmb \mu_k\), \(\pmb \Sigma\), \(k=1,2,\ldots ,K\), występujące w funkcji klasyfikującej \(\delta_k(\pmb x)\) nie są znane i należy zastąpić je ich estymatorami.
\[\hat{\delta}_k(\pmb x)=\pmb x'\pmb S^{-1}\pmb {\bar{Y}}_k-\frac{1}{2}\pmb {\bar{Y}}_k'\pmb S^{-1}\pmb {\bar{Y}}_k+\ln \frac{n_k}{n},\]
gdzie \(n_k\) oznacza liczbę obserwacji z \(k\)-tej grupy.
Prognoza
Dokonujemy prognozy dla nowego obiektu opisanego wektorem \(p\) cech \(\pmb x_p\). Prognozowaną wartość etykiety \(Y\) równą \(y_p\) wyznaczamy ze wzoru
\[y_p=\arg\max_k\hat{\delta}_k(\pmb x_p).\]
Szacowanie jakości klasyfikatora
Metoda ponownego podstawienia. Korzystając z całej próby (uczącej) uzyskujemy klasyfikator \(\hat d\). Następnie, wykorzystując ten klasyfikator, prognmozujemy etykiety wszystkich elementów próby (obiektów). Miarą jakości jest proporcja poprawnie zaklasyfikowanych obiektów.
Metoda sprawdzania krzyżowego. W losowy sposób dzielimy całą próbę (uczącą) na \(v\) podzbiorów (zazwyczaj \(v=3, 5\) lub 10). \(v-1\) z nich tworzy nową próbę (uczącą) na bazie której uzyskujemy klasyfikator \(\hat d\). Dla pozostałych elementów próby dokonujemy prognozy (z wykorzystaniem klasyfikatora \(\hat d\). Procedure tę powtarzamy kolejno \(v\)-razy. Miarą jakości jest proporcja poprawnie zaklasyfikowanych obiektów.
Funkcje związane z klasyfikacją:
lda/qda (MASS) - metoda LDA/QDA, procedura główna,
k-NN (class) - metoda k-NN, procedura główna,
errorest (ipred) - metoda sprawdzania krzyżowego.
12.1 Wywołania w R
Metoda LDA
load("Vehicle.RData")
library(MASS)
library(ipred)
d <- lda(Class~. ,data=Vehicle)
Y <- predict(d)
etykieta <- Vehicle$Class
prognoza <- Y$class
a_posteriori <- Y$posterior
table(prognoza,etykieta)
error_res <- 1-sum(prognoza==etykieta)/length(etykieta)
error_res
mypredict.lda <- function(object,newdata) predict(object,newdata = newdata)$class
errorest(Class ~ ., data=Vehicle, model=lda, estimator = "cv", predict= mypredict.lda)
Metoda QDA
d <- qda(Class~. ,data=Vehicle)
Y <- predict(d)
etykieta <- Vehicle$Class
prognoza <- Y$class
a_posteriori <- Y$posterior
table(prognoza,etykieta)
error_res <- 1-sum(prognoza==etykieta)/length(etykieta)
error_res
mypredict.qda <- function(object,newdata) predict(object,newdata = newdata)$class
errorest(Class ~ ., data=Vehicle, model=qda, estimator = "cv", predict= mypredict.qda)
Metoda k-NN
library(class)
X <- Vehicle[,-19]
etykieta <- Vehicle$Class
d <- knn(X,X,etykieta,k=5)
table(d,etykieta)
error_res <- 1-sum(d==etykieta)/length(etykieta)
error_res
mypredict.KNN <- function(object,newdata) predict(object,newdata = newdata,'class')
errorest(Class ~ ., data=Vehicle, model=ipredknn ,estimator = "cv", predict=mypredict.KNN, K=5)