Skalar \(\lambda\) naywamy wartością własną macierzy A jeżeli istnieje niezerowy wektor \(v\), taki że:
\(Av = \lambda v\)
Wektor \(v\) nazywamy wektorem własnym odpowiadającym wartości własnej \(\lambda\)
Następujące warunki są równoważne:
\(\lambda\) jest wartością własną macierzy A
układ równań \((A-\lambda I)v=0\) ma niezerowe rozwiązanie
\(det(A-\lambda I)=0\)
A <- matrix(c(1,2,0,0,2,0,-2,-2,-1), nrow=3, ncol=3, byrow=TRUE)
A
## [,1] [,2] [,3]
## [1,] 1 2 0
## [2,] 0 2 0
## [3,] -2 -2 -1
eigen(A)
## eigen() decomposition
## $values
## [1] 2 -1 1
##
## $vectors
## [,1] [,2] [,3]
## [1,] 0.6666667 0 0.7071068
## [2,] 0.3333333 0 0.0000000
## [3,] -0.6666667 1 -0.7071068
#Wartości własne:
lambda<-eigen(A)$values
v<-eigen(A)$vectors
#pierwszaw wartość własna
A %*% v[,1]
## [,1]
## [1,] 1.3333333
## [2,] 0.6666667
## [3,] -1.3333333
lambda[1]*v[,1]
## [1] 1.3333333 0.6666667 -1.3333333
det(A - lambda[2]*diag(3))
## [1] 0
#druga wartość własna
A %*% v[,2]
## [,1]
## [1,] 0
## [2,] 0
## [3,] -1
lambda[2]*v[,2]
## [1] 0 0 -1
det(A - lambda[2]*diag(3))
## [1] 0
#trzecia wartość własna
A %*% v[,3]
## [,1]
## [1,] 0.7071068
## [2,] 0.0000000
## [3,] -0.7071068
lambda[3]*v[,3]
## [1] 0.7071068 0.0000000 -0.7071068
det(A - lambda[3]*diag(3))
## [1] 0
sum(lambda)
## [1] 2
Kowariancja dwóch zmiennych:
\(Cov(X,Y) = \frac{1}{n}\sum_{i=1}^{n}(x_{i}-\bar{x})(y_{i}-\bar{y})\)
Estymator nieobciążony:
\(Cov(X,Y) = \frac{1}{n-1}\sum_{i=1}^{n}(x_{i}-\bar{x})(y_{i}-\bar{y})\)
#kowariancja pomiędzy pierwszą i drugą kolumną macierzy A
sum( (A[,1] - mean(A[,1])) * (A[,2] - mean(A[,2])))/(nrow(A)-1)
## [1] 3.333333
#lub
cov(A[,1], A[,2])
## [1] 3.333333
#kowariancja pomiędzy pierwszą i trzecią kolumną macierzy A
cov(A[,1], A[,3])
## [1] 0.8333333
cov(A)
## [,1] [,2] [,3]
## [1,] 2.3333333 3.333333 0.8333333
## [2,] 3.3333333 5.333333 1.3333333
## [3,] 0.8333333 1.333333 0.3333333
\(tr(A) = \lambda_{1} + \lambda_{2} + \cdots + \lambda_{p}\)
library(ISLR)
df<-USArrests
df.scaled<-scale(df)
mean(df.scaled[,1])
## [1] -7.663087e-17
#macierz kowariancji zmiennych
S<-cov(df.scaled)
S
## Murder Assault UrbanPop Rape
## Murder 1.00000000 0.8018733 0.06957262 0.5635788
## Assault 0.80187331 1.0000000 0.25887170 0.6652412
## UrbanPop 0.06957262 0.2588717 1.00000000 0.4113412
## Rape 0.56357883 0.6652412 0.41134124 1.0000000
eigen(S)
## eigen() decomposition
## $values
## [1] 2.4802416 0.9897652 0.3565632 0.1734301
##
## $vectors
## [,1] [,2] [,3] [,4]
## [1,] -0.5358995 0.4181809 -0.3412327 0.64922780
## [2,] -0.5831836 0.1879856 -0.2681484 -0.74340748
## [3,] -0.2781909 -0.8728062 -0.3780158 0.13387773
## [4,] -0.5434321 -0.1673186 0.8177779 0.08902432
pca<-prcomp(df.scaled)
Całkowita wariancja zmiennych ustandaryzowanych:
\(\sum_{j=1}^{p} Var(X_j) = \sum_{j=1}^{p}\frac{1}{n-1}\sum{x_{ij}^2}\)
#estymator wariancji
sum(df.scaled^2)/(nrow(df.scaled)-1)
## [1] 4
#wariancja skladowych atrybutow
apply(df.scaled,2,var)
## Murder Assault UrbanPop Rape
## 1 1 1 1
\(\mathbf{S}\) macierz kowariancji z próby
Pierwsza składowa główna to unormowana liniowa kombinacja cech o największej wariancji:
\(z_{1}=\phi_{11}x_1 + \phi_{21}x_2 + \cdots + \phi_{p1}x_p = \mathbf{\Phi'_{1}}\mathbf{X}\)
\(\phi_{11} , \phi_{21} , \cdots , \phi_{p1}\) - ładunki pierszej składowej
Kwadrat długości wynosi 1, zapewnia jednoznaczność składowej głównej:
\(\sum_{j=1}^{p} \phi_{j1}^2=1\) ,czyli \(\mathbf{\Phi^{`}_{1}}\mathbf{\Phi_{1}}=1\)
Wariancja z próby
\(S_{z_{1}}^2 = \mathbf{\Phi^{`}_{1}}\mathbf{S}\mathbf{\Phi_{1}}\)
Wektor, który makysmalizuje wariancję jest wektorem charakterystycznym odpowiadającym największej wartości własnej macierzy \(\mathbf{S}\) lub inaczej największemu pierwiastkowi równiania wyzancznikowego:
\(|\mathbf{S} - \lambda \mathbf{I} |= 0\)
library(ggplot2)
library(ggrepel)
fi<-prcomp(df.scaled)[[2]]
fi1<-as.matrix(fi[,1])
z1<-df.scaled%*%fi1
head(z1)
## [,1]
## Alabama -0.9756604
## Alaska -1.9305379
## Arizona -1.7454429
## Arkansas 0.1399989
## California -2.4986128
## Colorado -1.4993407
plot(z1)
var(z1)
## [,1]
## [1,] 2.480242
z1df<-data.frame(state<-rownames(z1),z1)
p<- ggplot(z1df, aes(x=z1, y=0))+geom_point() + geom_text_repel(aes(y=0,label=state),size=3)
p
Kombinacja liniowa:
\(z_{2} = \mathbf{\Phi_{2}}\mathbf{x}\)
taka, że jest nieskorelowana z \(z_{1}\), ma maksymalną wariancję oraz spełnia warunek:
\(Cov(z_{2}, z_{1})=0\)
co implikuje, że: \(\mathbf{\Phi_{2}^{`}}\mathbf{\Phi_{1}}=0\)
Wariancja z próby \(S_{z_{2}}^2 = \mathbf{\Phi^{`}_{2}}\mathbf{S}\mathbf{\Phi_{2}}\)
Poszukujemy wektora maksymalizującego wariancję z próby przy dodatkowych warunkach: \(\mathbf{\Phi^{`}_{2}}\mathbf{\Phi_{2}}=1\)
oraz
\(\mathbf{\Phi^{`}_{2}}\mathbf{\Phi_{1}}=0\)
fi2<-as.matrix(fi[,2])
z2<-df.scaled%*%fi2
head(z2)
## [,1]
## Alabama 1.1220012
## Alaska 1.0624269
## Arizona -0.7384595
## Arkansas 1.1085423
## California -1.5274267
## Colorado -0.9776297
var(z2)
## [,1]
## [1,] 0.9897652
z12df<-data.frame(z1, z2)
head(z12df)
## z1 z2
## Alabama -0.9756604 1.1220012
## Alaska -1.9305379 1.0624269
## Arizona -1.7454429 -0.7384595
## Arkansas 0.1399989 1.1085423
## California -2.4986128 -1.5274267
## Colorado -1.4993407 -0.9776297
p<- ggplot(z12df, aes(x=z1, y=z2))+geom_point() + geom_text_repel(aes(label=rownames(z12df)),size=3)
p
Składowe główne są wzajemnie ortogonalne t.j.
\(\mathbf{\Phi^{`}_{j}}\mathbf{\Phi_{k}}=0\) dla wszystkich \(j \neq k\)
Wariancja z próby każdej składowej głównej jest równa odpowiedniej wartości własnej
Sumwa wariancji z próby składowych głównych jest równa sumie wariancji z próby zmiennych pierwotnych \(tr(S)\)
Składowe nieistotne można pominąć: - procent wariancji () - wykres osypiskowy (piargowy)
sd<-pca[[1]]
var<-sd^2
eigen(S)$values
## [1] 2.4802416 0.9897652 0.3565632 0.1734301
variance.pca<-data.frame("var"=var, "cumvar"=cumsum(var) )
variance.pca$pct_total<-var/sum(var)
variance.pca$cum_pct_total<-variance.pca$cumvar/sum(var)
head(variance.pca)
## var cumvar pct_total cum_pct_total
## 1 2.4802416 2.480242 0.62006039 0.6200604
## 2 0.9897652 3.470007 0.24744129 0.8675017
## 3 0.3565632 3.826570 0.08914080 0.9566425
## 4 0.1734301 4.000000 0.04335752 1.0000000
#wykres osypiskowy
plot(var, type="l")
library(e1071)
data(iris)
iris
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
## 7 4.6 3.4 1.4 0.3 setosa
## 8 5.0 3.4 1.5 0.2 setosa
## 9 4.4 2.9 1.4 0.2 setosa
## 10 4.9 3.1 1.5 0.1 setosa
## 11 5.4 3.7 1.5 0.2 setosa
## 12 4.8 3.4 1.6 0.2 setosa
## 13 4.8 3.0 1.4 0.1 setosa
## 14 4.3 3.0 1.1 0.1 setosa
## 15 5.8 4.0 1.2 0.2 setosa
## 16 5.7 4.4 1.5 0.4 setosa
## 17 5.4 3.9 1.3 0.4 setosa
## 18 5.1 3.5 1.4 0.3 setosa
## 19 5.7 3.8 1.7 0.3 setosa
## 20 5.1 3.8 1.5 0.3 setosa
## 21 5.4 3.4 1.7 0.2 setosa
## 22 5.1 3.7 1.5 0.4 setosa
## 23 4.6 3.6 1.0 0.2 setosa
## 24 5.1 3.3 1.7 0.5 setosa
## 25 4.8 3.4 1.9 0.2 setosa
## 26 5.0 3.0 1.6 0.2 setosa
## 27 5.0 3.4 1.6 0.4 setosa
## 28 5.2 3.5 1.5 0.2 setosa
## 29 5.2 3.4 1.4 0.2 setosa
## 30 4.7 3.2 1.6 0.2 setosa
## 31 4.8 3.1 1.6 0.2 setosa
## 32 5.4 3.4 1.5 0.4 setosa
## 33 5.2 4.1 1.5 0.1 setosa
## 34 5.5 4.2 1.4 0.2 setosa
## 35 4.9 3.1 1.5 0.2 setosa
## 36 5.0 3.2 1.2 0.2 setosa
## 37 5.5 3.5 1.3 0.2 setosa
## 38 4.9 3.6 1.4 0.1 setosa
## 39 4.4 3.0 1.3 0.2 setosa
## 40 5.1 3.4 1.5 0.2 setosa
## 41 5.0 3.5 1.3 0.3 setosa
## 42 4.5 2.3 1.3 0.3 setosa
## 43 4.4 3.2 1.3 0.2 setosa
## 44 5.0 3.5 1.6 0.6 setosa
## 45 5.1 3.8 1.9 0.4 setosa
## 46 4.8 3.0 1.4 0.3 setosa
## 47 5.1 3.8 1.6 0.2 setosa
## 48 4.6 3.2 1.4 0.2 setosa
## 49 5.3 3.7 1.5 0.2 setosa
## 50 5.0 3.3 1.4 0.2 setosa
## 51 7.0 3.2 4.7 1.4 versicolor
## 52 6.4 3.2 4.5 1.5 versicolor
## 53 6.9 3.1 4.9 1.5 versicolor
## 54 5.5 2.3 4.0 1.3 versicolor
## 55 6.5 2.8 4.6 1.5 versicolor
## 56 5.7 2.8 4.5 1.3 versicolor
## 57 6.3 3.3 4.7 1.6 versicolor
## 58 4.9 2.4 3.3 1.0 versicolor
## 59 6.6 2.9 4.6 1.3 versicolor
## 60 5.2 2.7 3.9 1.4 versicolor
## 61 5.0 2.0 3.5 1.0 versicolor
## 62 5.9 3.0 4.2 1.5 versicolor
## 63 6.0 2.2 4.0 1.0 versicolor
## 64 6.1 2.9 4.7 1.4 versicolor
## 65 5.6 2.9 3.6 1.3 versicolor
## 66 6.7 3.1 4.4 1.4 versicolor
## 67 5.6 3.0 4.5 1.5 versicolor
## 68 5.8 2.7 4.1 1.0 versicolor
## 69 6.2 2.2 4.5 1.5 versicolor
## 70 5.6 2.5 3.9 1.1 versicolor
## 71 5.9 3.2 4.8 1.8 versicolor
## 72 6.1 2.8 4.0 1.3 versicolor
## 73 6.3 2.5 4.9 1.5 versicolor
## 74 6.1 2.8 4.7 1.2 versicolor
## 75 6.4 2.9 4.3 1.3 versicolor
## 76 6.6 3.0 4.4 1.4 versicolor
## 77 6.8 2.8 4.8 1.4 versicolor
## 78 6.7 3.0 5.0 1.7 versicolor
## 79 6.0 2.9 4.5 1.5 versicolor
## 80 5.7 2.6 3.5 1.0 versicolor
## 81 5.5 2.4 3.8 1.1 versicolor
## 82 5.5 2.4 3.7 1.0 versicolor
## 83 5.8 2.7 3.9 1.2 versicolor
## 84 6.0 2.7 5.1 1.6 versicolor
## 85 5.4 3.0 4.5 1.5 versicolor
## 86 6.0 3.4 4.5 1.6 versicolor
## 87 6.7 3.1 4.7 1.5 versicolor
## 88 6.3 2.3 4.4 1.3 versicolor
## 89 5.6 3.0 4.1 1.3 versicolor
## 90 5.5 2.5 4.0 1.3 versicolor
## 91 5.5 2.6 4.4 1.2 versicolor
## 92 6.1 3.0 4.6 1.4 versicolor
## 93 5.8 2.6 4.0 1.2 versicolor
## 94 5.0 2.3 3.3 1.0 versicolor
## 95 5.6 2.7 4.2 1.3 versicolor
## 96 5.7 3.0 4.2 1.2 versicolor
## 97 5.7 2.9 4.2 1.3 versicolor
## 98 6.2 2.9 4.3 1.3 versicolor
## 99 5.1 2.5 3.0 1.1 versicolor
## 100 5.7 2.8 4.1 1.3 versicolor
## 101 6.3 3.3 6.0 2.5 virginica
## 102 5.8 2.7 5.1 1.9 virginica
## 103 7.1 3.0 5.9 2.1 virginica
## 104 6.3 2.9 5.6 1.8 virginica
## 105 6.5 3.0 5.8 2.2 virginica
## 106 7.6 3.0 6.6 2.1 virginica
## 107 4.9 2.5 4.5 1.7 virginica
## 108 7.3 2.9 6.3 1.8 virginica
## 109 6.7 2.5 5.8 1.8 virginica
## 110 7.2 3.6 6.1 2.5 virginica
## 111 6.5 3.2 5.1 2.0 virginica
## 112 6.4 2.7 5.3 1.9 virginica
## 113 6.8 3.0 5.5 2.1 virginica
## 114 5.7 2.5 5.0 2.0 virginica
## 115 5.8 2.8 5.1 2.4 virginica
## 116 6.4 3.2 5.3 2.3 virginica
## 117 6.5 3.0 5.5 1.8 virginica
## 118 7.7 3.8 6.7 2.2 virginica
## 119 7.7 2.6 6.9 2.3 virginica
## 120 6.0 2.2 5.0 1.5 virginica
## 121 6.9 3.2 5.7 2.3 virginica
## 122 5.6 2.8 4.9 2.0 virginica
## 123 7.7 2.8 6.7 2.0 virginica
## 124 6.3 2.7 4.9 1.8 virginica
## 125 6.7 3.3 5.7 2.1 virginica
## 126 7.2 3.2 6.0 1.8 virginica
## 127 6.2 2.8 4.8 1.8 virginica
## 128 6.1 3.0 4.9 1.8 virginica
## 129 6.4 2.8 5.6 2.1 virginica
## 130 7.2 3.0 5.8 1.6 virginica
## 131 7.4 2.8 6.1 1.9 virginica
## 132 7.9 3.8 6.4 2.0 virginica
## 133 6.4 2.8 5.6 2.2 virginica
## 134 6.3 2.8 5.1 1.5 virginica
## 135 6.1 2.6 5.6 1.4 virginica
## 136 7.7 3.0 6.1 2.3 virginica
## 137 6.3 3.4 5.6 2.4 virginica
## 138 6.4 3.1 5.5 1.8 virginica
## 139 6.0 3.0 4.8 1.8 virginica
## 140 6.9 3.1 5.4 2.1 virginica
## 141 6.7 3.1 5.6 2.4 virginica
## 142 6.9 3.1 5.1 2.3 virginica
## 143 5.8 2.7 5.1 1.9 virginica
## 144 6.8 3.2 5.9 2.3 virginica
## 145 6.7 3.3 5.7 2.5 virginica
## 146 6.7 3.0 5.2 2.3 virginica
## 147 6.3 2.5 5.0 1.9 virginica
## 148 6.5 3.0 5.2 2.0 virginica
## 149 6.2 3.4 5.4 2.3 virginica
## 150 5.9 3.0 5.1 1.8 virginica
# model_normal<-glm(NSP1 ~ . -FileName -Date -SegFile -CLASS -NSP -NSP2 -NSP3, data=train, family=binomial)
regr<-naiveBayes( Species~., data=iris, family="binomial")
regr
##
## Naive Bayes Classifier for Discrete Predictors
##
## Call:
## naiveBayes.default(x = X, y = Y, laplace = laplace, family = "binomial")
##
## A-priori probabilities:
## Y
## setosa versicolor virginica
## 0.3333333 0.3333333 0.3333333
##
## Conditional probabilities:
## Sepal.Length
## Y [,1] [,2]
## setosa 5.006 0.3524897
## versicolor 5.936 0.5161711
## virginica 6.588 0.6358796
##
## Sepal.Width
## Y [,1] [,2]
## setosa 3.428 0.3790644
## versicolor 2.770 0.3137983
## virginica 2.974 0.3224966
##
## Petal.Length
## Y [,1] [,2]
## setosa 1.462 0.1736640
## versicolor 4.260 0.4699110
## virginica 5.552 0.5518947
##
## Petal.Width
## Y [,1] [,2]
## setosa 0.246 0.1053856
## versicolor 1.326 0.1977527
## virginica 2.026 0.2746501
pSpecies<-predict(regr, iris, type="class")
head(pSpecies)
## [1] setosa setosa setosa setosa setosa setosa
## Levels: setosa versicolor virginica
table(iris$Species,pSpecies)
## pSpecies
## setosa versicolor virginica
## setosa 50 0 0
## versicolor 0 47 3
## virginica 0 3 47
## redukujemy
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
pca.iris<-prcomp(iris[,1:4], scale=TRUE)
plot(pca.iris)
#pca.iris$rotation[,1]%*%iris[1,1:4]
head(scale(iris[,1:4]))
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## [1,] -0.8976739 1.01560199 -1.335752 -1.311052
## [2,] -1.1392005 -0.13153881 -1.335752 -1.311052
## [3,] -1.3807271 0.32731751 -1.392399 -1.311052
## [4,] -1.5014904 0.09788935 -1.279104 -1.311052
## [5,] -1.0184372 1.24503015 -1.335752 -1.311052
## [6,] -0.5353840 1.93331463 -1.165809 -1.048667
#Wektor
head(pca.iris$x)
## PC1 PC2 PC3 PC4
## [1,] -2.257141 -0.4784238 0.12727962 0.024087508
## [2,] -2.074013 0.6718827 0.23382552 0.102662845
## [3,] -2.356335 0.3407664 -0.04405390 0.028282305
## [4,] -2.291707 0.5953999 -0.09098530 -0.065735340
## [5,] -2.381863 -0.6446757 -0.01568565 -0.035802870
## [6,] -2.068701 -1.4842053 -0.02687825 0.006586116
iris.ds.pca<-data.frame(pca.iris$x)
iris.ds.pca$Species<-iris$Species
head(iris.ds.pca)
## PC1 PC2 PC3 PC4 Species
## 1 -2.257141 -0.4784238 0.12727962 0.024087508 setosa
## 2 -2.074013 0.6718827 0.23382552 0.102662845 setosa
## 3 -2.356335 0.3407664 -0.04405390 0.028282305 setosa
## 4 -2.291707 0.5953999 -0.09098530 -0.065735340 setosa
## 5 -2.381863 -0.6446757 -0.01568565 -0.035802870 setosa
## 6 -2.068701 -1.4842053 -0.02687825 0.006586116 setosa
nb.pca<-naiveBayes(Species~PC1+PC2+PC3+PC4, data=iris.ds.pca)
pSpecies<-predict(nb.pca, iris.ds.pca, type="class")
table(iris$Species,pSpecies)
## pSpecies
## setosa versicolor virginica
## setosa 50 0 0
## versicolor 0 46 4
## virginica 0 5 45