Hur man implementerar linjär diskriminantanalys i R?



Den här artikeln berättar vad som är linjär diskriminerande analys och ger dig också en detaljerad demonstration med R-programmeringsspråk.

Linear Discriminant Analysis är en mycket populär Machine Learning-teknik som används för att lösa klassificeringsproblem. I den här artikeln kommer vi att försöka förstå intuitionen och matematiken bakom denna teknik. Ett exempel på implementering av LDA i R tillhandahålls också.

Så låt oss komma igång då





Linjärt antagande om diskriminerande analys

Linjär diskriminantanalys baseras på följande antaganden:

  • Den beroende variabeln Y är diskret. I den här artikeln antar vi att den beroende variabeln är binär och tar klassvärden {+1, -1} . Sannolikheten för att ett prov tillhör klass +1 , dvs P (Y = +1) = p . Därför är sannolikheten för att ett prov tillhör klass -ett är 1-sid .



  • Den oberoende variabeln X kommer från gaussiska distributioner. Medelvärdet för den gaussiska fördelningen beror på klassetiketten Y . dvs. om Y i = +1 , då medelvärdet av X i är & # 120583 +1 , annars är det & # 120583 -ett . Variansen & # 120590 2 är samma för båda klasserna. Matematiskt sett, X | (Y = +1) ~ N (& # 120583 +1 , & # 120590 2 ) och X | (Y = -1) ~ N (& # 120583 -ett , & # 120590 2 ) , var N betecknar normalfördelningen.

Med denna information är det möjligt att skapa en gemensam distribution P (X, Y) för den oberoende och beroende variabeln. Därför tillhör LDA klassen Generativa klassificeringsmodeller . En närbesläktad generativ klassificerare är Quadratic Discriminant Analysis (QDA). Det bygger på alla samma antaganden från LDA, förutom att klassavvikelserna är olika.

Låt oss fortsätta med artikeln om linjär diskriminantanalys och se

Intuition

Tänk på klassens villkorliga gaussiska fördelningar för X givet klassen Y . Figuren nedan visar densitetsfunktionerna för fördelningarna. I denna figur, om Y = +1 , då medelvärdet av X är 10 och om Y = -1 är medelvärdet 2. Variansen är 2 i båda fallen.

intuition - Linjär diskrimineringsanalys - Edureka

Antag nu att ett nytt värde av X ges till oss. Låt oss bara beteckna det som x i . Uppgiften är att bestämma den mest troliga klassetiketten för detta x i , d.v.s. Y i . För enkelhetens skull anta att sannolikheten sid av provet som tillhör klass +1 är samma som att tillhöra klass -ett , d.v.s. p = 0,5 .

Intuitivt är det vettigt att säga att om x i är närmare & # 120583 +1 än det är att & # 120583 -ett , då är det mer troligt att Y i = +1 . Mer formellt, Y i = +1 om:

| x i - & # 120583 +1 |<|x i - & # 120583 -ett |

Normalisering av båda sidor med standardavvikelsen:

| x i - & # 120583 +1 | / & # 120590<|x i - & # 120583 -ett | / & # 120590

Kvadrera båda sidor:

(x i - & # 120583 +1 ) 2 / & # 120590 2 <(x i - & # 120583 -ett ) 2 / & # 120590 2

x i 2 / & # 120590 2 + & # 120583 +1 2 / & # 120590 2 - 2 x i & # 120583 +1 / & # 120590 2 i 2 / & # 120590 2 + & # 120583 -ett 2 / & # 120590 2 - 2 x i & # 120583 -ett / & # 120590 2

2 x i (& # 120583 -ett - & # 120583 +1 ) / & # 120590 2 - (& # 120583 -ett 2 / & # 120590 2 - & # 120583 +1 2 / & # 120590 2 )<0

-2 x i (& # 120583 -ett - & # 120583 +1 ) / & # 120590 2 + (& # 120583 -ett 2 / & # 120590 2 - & # 120583 +1 2 / & # 120590 2 )> 0

Ovanstående uttryck är av formen bx i + c> 0 var b = -2 (& # 120583 -ett - & # 120583 +1 ) / & # 120590 2 och c = (& # 120583 -ett 2 / & # 120590 2 - & # 120583 +1 2 / & # 120590 2 ) .

Det är uppenbart att formen på ekvationen är linjär , därav namnet Linear Discriminant Analysis.

åsidosättande vs överbelastning c ++

Låt oss fortsätta med artikeln om linjär diskriminantanalys och se,

Matematisk beskrivning av LDA

Den matematiska härledningen av uttrycket för LDA baseras på begrepp som Bayes regel och Bayes Optimal Classifier . Intresserade läsare uppmanas att läsa mer om dessa begrepp. Ett sätt att härleda uttrycket kan hittas här .

Vi kommer att ge uttrycket direkt för vårt specifika fall där Y tar två klasser {+1, -1} . Vi kommer också att utvidga intuitionen som visas i föregående avsnitt till det allmänna fallet där X kan vara flerdimensionellt. Låt oss säga att det finns till oberoende variabler. I det här fallet betyder klassen & # 120583 -ett och & # 120583 +1 skulle vara måttvektorer k * 1 och varians-kovariansmatrisen & # 120622 skulle vara en måttmatris k * k .

Klassificeringsfunktionen ges som

Y = h (X) = tecken (b T X + c)

Var,

b = -2 & # 120622 -ett (& # 120583 -ett - & # 120583 +1 )

c = & # 120583 -ett T & # 120622 -ett & # 120583 -ett - & # 120583 -ett T & # 120622 -ett & # 120583 -ett {-2 ln (1-p) / p}

Teckenfunktionen återgår +1 om uttrycket b T x + c> 0 , annars återkommer den -ett . Den naturliga loggen i c är närvarande för att justera för det faktum att klasssannolikheterna inte behöver vara lika för båda klasserna, dvs. sid kan vara vilket värde som helst mellan (0, 1) och inte bara 0,5.

Lär dig modellparametrarna

Givet en dataset med N datapunkter (x ett , Y ett ), (x 2 , Y 2 ), ... (X n , Y n ) måste vi uppskatta p, & # 120583 -ett , & # 120583 +1 och & # 120622 . En statistisk uppskattningsteknik som kallas Maximal sannolikhetsuppskattning används för att uppskatta dessa parametrar. Uttrycken för ovanstående parametrar ges nedan.

& # 120583 +1 = (1 / N. +1 ) * & # 120506 i: yi = + 1 x i

& # 120583 -ett = (1 / N. -ett ) * & # 120506 i: yi = -1 x i

p = N +1 / N

& # 120622 = (1 / N) * & # 120506i = 1: N (x i - & # 120583 i ) (x i - & # 120583 i ) T

Var N +1 = antal prover där y i = +1 och N -ett = antal prover där y i = -1 .

Med ovanstående uttryck är LDA-modellen komplett. Man kan uppskatta modellparametrarna med hjälp av ovanstående uttryck och använda dem i klassificeringsfunktionen för att få klassetiketten för varje nytt ingångsvärde för oberoende variabel X .

Låt oss fortsätta med artikeln om linjär diskriminantanalys och se

Exempel i R

Följande kod genererar en dummy-datauppsättning med två oberoende variabler X1 och X2 och en beroende variabel Y . För X1 och X2 , kommer vi att generera prov från två multivariata gaussiska fördelningar med medel & # 120583 -ett = (2, 2) och & # 120583 +1 = (6, 6) . 40% av proverna tillhör klass +1 och 60% tillhör klass -ett därför p = 0,4 .

bibliotek (ggplot2) bibliotek (MASS) bibliotek (mvtnorm) # Varians Kovariansmatris för slumpmässigt bivariat gaussiskt prov var_covar = matris (data = c (1,5, 0,3, 0,3, 1,5), nrow = 2) # Slumpmässiga bivariata gaussprover för klass + 1 Xplus1<- rmvnorm(400, mean = c(6, 6), sigma = var_covar) # Random bivariate gaussian samples for class -1 Xminus1 <- rmvnorm(600, mean = c(2, 2), sigma = var_covar) #Samples for the dependent variable Y_samples <- c(rep(1, 400), rep(-1, 600)) #Combining the independent and dependent variables into a dataframe dataset <- as.data.frame(cbind(rbind(Xplus1, Xminus1), Y_samples)) colnames(dataset) <- c('X1', 'X2', 'Y') dataset$Y <- as.character(dataset$Y) #Plot the above samples and color by class labels ggplot(data = dataset)+ geom_point(aes(X1, X2, color = Y)) 

I figuren ovan representerar de blå prickarna prover från klassen +1 och de röda representerar urvalet från klass -ett . Det finns viss överlappning mellan proverna, dvs. klasserna kan inte separeras helt med en enkel linje. Med andra ord är de inte perfekt linjärt separerbara .

Vi kommer nu att träna en LDA-modell med ovanstående data.

# Träna LDA-modellen med ovanstående dataset lda_model<- lda(Y ~ X1 + X2, data = dataset) #Print the LDA model lda_model 

Produktion:

Tidigare sannolikheter för grupper:

-elva

0,6 0,4

Grupp betyder:

X1 X2

-1 1,928108 2,010226

1 5,961004 6,015438

Koefficienter för linjära diskriminanter:

LD1

X1 0,5646116

X2 0,5004175

Som man kan se är klassmedlen som lärts av modellen (1.928108, 2.010226) för klass -ett och (5.961004, 6.015438) för klass +1 . Dessa medel ligger väldigt nära de klassmedel vi använt för att generera dessa slumpmässiga prover. Den tidigare sannolikheten för grupp +1 är uppskattningen för parametern sid . De b vektorn är de linjära diskrimineringskoefficienterna.

Vi kommer nu att använda ovanstående modell för att förutsäga klassetiketter för samma data.

#Förutsäga klassen för varje prov i ovanstående dataset med hjälp av LDA-modellen y_pred<- predict(lda_model, newdata = dataset)$class #Adding the predictions as another column in the dataframe dataset$Y_lda_prediction <- as.character(y_pred) #Plot the above samples and color by actual and predicted class labels dataset$Y_actual_pred <- paste(dataset$Y, dataset$Y_lda_prediction, sep=',') ggplot(data = dataset)+ geom_point(aes(X1, X2, color = Y_actual_pred))

I figuren ovan är de lila proverna från klass +1 som klassificerades korrekt av LDA-modellen. På samma sätt är de röda proverna från klass -ett som klassificerades korrekt. De blå är från klassen +1 men klassificerades felaktigt som -ett . De gröna är från klassen -ett som felklassificerades som +1 . Felklassificeringarna händer eftersom dessa prover är närmare det andra klassmedlet (mitt) än det faktiska klassmedlet.

Detta tar oss till slutet av den här artikeln, kolla in av Edureka, ett pålitligt inlärningsföretag online med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Edurekas dataanalys med R-utbildning hjälper dig att få expertis inom R-programmering, datamanipulation, Exploratory Data Analysis, Data Visualization, Data Mining, Regression, Sentiment Analysis och användning av R Studio för verkliga fallstudier inom detaljhandel, sociala medier.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i den här artikeln så kommer vi tillbaka till dig så snart som möjligt.