Maskininlärning i R för nybörjare med exempel



Den här bloggen om maskininlärning med R hjälper dig att lära dig kärnkoncept för maskininlärning och implementera olika maskininlärningsalgoritmer med R.

Maskininlärning med R

Maskininlärning är nutiden och framtiden! Från Netflixs rekommendationsmotor till Googles självkörande bil är allt maskininlärning. Den här bloggen om maskininlärning med R hjälper dig att förstå kärnkoncepten maskininlärning följt av olika maskininlärningsalgoritmer och implementera dessa maskininlärningsalgoritmer med R.

Den här bloggen om ”Machine Learning with R” består av följande avsnitt:





Maskininlärning med R | Edureka

Förstå maskininlärning

Fish1- Machine Learning med R - Edureka



Hur vet du att alla dessa är fiskar?



Som barn kanske du har stött på en bild av en fisk och du skulle ha fått höra av dina dagislärare eller föräldrar att det här är en fisk och den har några specifika funktioner som är kopplade till den som att den har fenor, gälar, ett par ögon, en svans och så vidare. Nu, när din hjärna stöter på en bild med den uppsättningen funktioner, registreras den automatiskt som en fisk eftersom din hjärna har det lärt mig att det är en fisk.

Så fungerar vår hjärna men hur är det med en maskin? Om samma bild matas till en maskin, hur identifierar maskinen att den är en fisk?

Det är här M achine Learning kommer in. Vi fortsätter att mata bilder av en fisk till en dator med taggen 'fisk' tills maskinen lär sig alla tillhörande funktioner med en fisk.

När maskinen har lärt sig alla funktioner som är associerade med en fisk kommer vi att mata den nya data för att avgöra hur mycket den har lärt sig.

Med andra ord, Rådata / träningsdata ges till maskinen så att den lär sig alla funktioner som är associerade med Utbildningsdata. När inlärningen är klar ges den Nya data / testdata för att avgöra hur bra maskinen har lärt sig.

Låt oss gå vidare i denna maskininlärning med R-blogg och förstå vilka typer av maskininlärning.

Typer av maskininlärning

  • Övervakat lärande:

Övervakad inlärningsalgoritm lär sig från en känd datamängd (Training Data) som har etiketter för att göra förutsägelser.

Regression och klassificering är några exempel på övervakat lärande.

#Klassificering:

Klassificering avgör vilken uppsättning av kategorier som en ny observation tillhör, dvs. en klassificeringsalgoritm lär sig alla funktioner och etiketter för träningsdata och när nya data ges till den måste den tilldela etiketter till de nya observationerna beroende på vad den har lärt sig från träningsdata.

För det här exemplet, om den första observationen får etiketten ”Man” klassificeras den med rätta men om den får etiketten ”Kvinna” är klassificeringen fel. På samma sätt för den andra observationen, om den angivna etiketten är 'Kvinna', klassificeras den med rätta, annars är klassificeringen fel.

#Regression:

Regression är en övervakad inlärningsalgoritm som hjälper till att bestämma hur en variabel påverkar en annan variabel.

Härifrån är 'levande område' den oberoende variabeln och 'pris' är den beroende variabeln, dvs vi bestämmer hur 'pris' varierar med avseende på 'levande område'.

  • Oövervakad inlärning:

Oövervakad inlärningsalgoritm drar slutsatser från data som inte har etiketter.

Kluster är ett exempel på övervakat lärande. 'K-betyder', 'Hierarkisk', 'Fuzzy C-medel' är några exempel på klusteralgoritmer.

I detta exempel är uppsättningen observationer uppdelad i två kluster. Kluster görs på grundval av likheten mellan observationerna. Det finns en hög likhet mellan kluster och låg likhet mellan kluster, dvs. det finns en mycket hög likhet mellan alla bussar men låg likhet mellan bussar och bilar.

  • Inlärning av förstärkning:

Förstärkningslärande är en typ av maskininlärningsalgoritm där maskin / agent i en miljö lär sig perfekt beteende för att maximera dess prestanda. Enkel återkoppling av belöning krävs för att agenten ska lära sig dess beteende, detta kallas förstärkningssignal .

Låt oss ta Pac Man till exempel. Så länge Pacman fortsätter att äta mat tjänar det poäng men när det kraschar mot ett monster förlorar det livet. Således lär Pacman att det måste äta mer mat och undvika monsterför att förbättra dess prestanda.

Implementering av maskininlärning med R:

Linjär regression:

Vi kommer att arbeta med diamantuppsättningen för att implementera linjär regressionsalgoritm:

Beskrivning av datamängden:

Innan vi bygger någon modell på data ska vi dela upp data i 'tåg' och 'test' uppsättningar. Modellen kommer att byggas på 'tåg' -uppsättningen och dess noggrannhet kommer att kontrolleras på 'test' -uppsättningen.

Vi måste ladda paketet ”caTools” för att dela upp data i två uppsättningar.

bibliotek (caTools)

'CaTools' -paketet har en funktion 'sample.split ()' som hjälper till att dela upp data.

sample.split (diamanter $ pris, SplitRatio = 0,65) -> split_index

65% av observationerna från priskolumnen har tilldelats 'sann' etikett och resten 35% har tilldelats 'falsk' etikett.

delmängd (diamanter, split_index == T) -> tåg delmängd (diamanter, split_index == F) -> test

Alla observationer som har 'sann' etikett har lagrats i ' tåg ”objekt och de observationer som har 'falsk' etikett har tilldelats 'test' -uppsättningen.

Nu när delningen är klar och vi har våra 'tåg' och 'test' uppsättningar är det dags att bygga den linjära regressionsmodellen på träningsuppsättningen.

Vi använder funktionen 'lm ()' för att bygga den linjära regressionsmodellen på 'tåg' -data. Vi bestämmer pris av diamanterna med avseende på alla andra variabler i datamängden. Den inbyggda modellen lagras i objektet ”mod_regress”.

lm (pris ~., data = tåg) -> mod_regress

Nu när vi har byggt modellen måste vi göra förutsägelser på 'test' -uppsättningen. ”Förutsäga ()” -funktionen används för att få förutsägelser. Det krävs två argument: byggd modell och den testuppsättning. De förutsagda resultaten lagras i “result_regress” -objektet.

förutsäga (mod_regress, test) -> result_regress

Låt oss binda de faktiska prisvärdena från 'test' -uppsättningen och de förutspådda värdena till en enda uppsättning med funktionen 'cbind ()'. Den nya dataramen lagras i “Final_Data”

cbind (Actual = test $ price, Predicted = result_regress) -> Final_Data 
as.data.frame (Final_Data) -> Final_Data

En blick på 'Final_Data' som består av faktiska värden och förutsagda värden:

Låt oss hitta felet genom att subtrahera de förutsagda värdena från de faktiska värdena och lägga till det här felet som en ny kolumn i 'Final_Data':

(Final_Data $ Actual- Final_Data $ Predicted) -> fel
cbind (Final_Data, fel) -> Final_Data

En blick på 'Final_Data' som också består av fel i förutsägelsen:

Nu fortsätter vi och beräknar ' Root Mean Square Error ” vilket ger ett samlat fel för alla förutsägelser

rmse1<-sqrt(mean(Final_Data$error^2)) 
rmse1

Låt oss vidare bygga en annan modell så att vi kan jämföra noggrannheten för båda dessa modeller och avgöra vilken som är bättre.

Vi kommer att bygga en ny linjär regressionsmodell på 'tåg' -uppsättningen men den här gången släpper vi kolumnerna 'x' och 'y' från de oberoende variablerna, dvs 'priset' på diamanterna bestäms av alla kolumner utom 'x' och 'y'.

Den byggda modellen lagras i “mod_regress2”:

lm (pris ~.-y-z, data = tåg) -> mod_regress2

De förutsagda resultaten lagras i “result_regress2”

förutsäga (mod_regress2, test) -> result_regress2

Verkliga och förutsagda värden kombineras och lagras i “Final_Data2”:

cbind (Actual = test $ price, Predicted = result_regress2) -> Final_Data2 
as.data.frame (Final_Data2) -> Final_Data2

Låt oss också lägga till felet i förutsägelse till 'Final_Data2'

hur man ställer in klassvägen i Java i Windows 10
(Final_Data2 $ Actual- Final_Data2 $ Predicted) -> error2
cbind (Final_Data2, error2) -> Final_Data2

En blick på “Final_Data2”:

Hitta rotvärde kvadratfel för att få det sammanlagda felet:

rmse2<-sqrt(mean(Final_Data2$error^2))

Vi ser att 'rmse2' är marginellt mindre än 'rmse1' och därför är den andra modellen marginellt bättre än den första modellen.

Klassificering:

Vi kommer att arbeta med datauppsättningen 'bil_köp' för att implementera rekursiv partitionering vilket är en klassificeringsalgoritm.

Låt oss dela upp data i 'tåg' och 'test' uppsättningar med hjälp av 'sample.split ()' funktion från 'caTools' paketet.

bibliotek (caTools)

65% av observationerna från kolumnen ”Köpt” tilldelas ”SANT” etiketter och resten tilldelas ”FALSE” -etiketter.

sample.split (car_purchase $ Purchased, SplitRatio = 0.65) -> split_values

Alla observationer som har 'SANT' -etikett lagras i 'tåg' -data och observationer med 'FALSE' -etikett kommer att tilldelas 'test' -data.

delmängd (bilköp, delvärden == T) -> tågdata
delmängd (bilköp, delvärden == F) -> testdata

Dags att bygga algoritmen för rekursiv partitionering:

Vi börjar med att ladda paketet 'rpart':

bibliotek (rpart)

Kolumnen 'Köpt' kommer att vara den beroende variabeln och alla andra kolumner är de oberoende variablerna, dvs vi bestämmer om personen har köpt bilen eller inte med avseende på alla andra kolumner. Modellen bygger på 'train_data' och resultatet lagras i 'mod1'.

rpart (köpt ~., data = train_data) -> mod1

Låt oss plotta resultatet:

tomt (mod1, marginal = 0,1) text (mod1, söt = T, cex = 0,8)

Nu ska vi fortsätta och förutsäga resultaten på 'test_data'. Vi ger den inbyggda rpart-modellen 'mod1' som det första argumentet, testuppsättningen 'test_data' som det andra argumentet och förutsägelsestypen som 'klass' för det tredje argumentet. Resultatet lagras i ett 'resultat1'-objekt.

förutsäga (mod1, test_data, typ = 'klass') -> resultat1

Låt oss utvärdera modellens noggrannhet med hjälp av funktionen 'confusionMatrix ()' från vaktpaketet.

bibliotek (vakt) confusionMatrix (tabell (test_data $ köpt, resultat1))

Förvirringsmatrisen berättar att av de 90 observationer där personen inte köpte bilen, har 79 observationer rätt klassificerats som ”Nej” och 11 har felaktigt klassificerats som ”JA”. På samma sätt har 47 av de 50 observationer där personen faktiskt köpte bilen med rätta klassificerats som ”JA” och 3 har felaktigt klassificerats som ”NEJ”.

Vi kan hitta modellens noggrannhet genom att dela rätt förutsägelser med totala förutsägelser, dvs (79 + 47) / (79 + 47 + 11 + 3).

K-medelkluster:

Vi kommer att arbeta med 'iris' -datauppsättning för att implementera k-betyder kluster:

Låt oss ta bort kolumnen 'Arter' och skapa en ny datamängd som endast innehåller de första fyra kolumnerna från 'iris' -mängden.

iris [1: 4] -> iris_k

Låt oss ta antalet kluster till att vara 3. ”Kmeans ()” -funktionen tar ingångsdata och antalet kluster där data ska grupperas. Syntaxen är: kmeans (data, k) där k är antalet klustercentra.

kmeans (iris_k, 3) -> k1

Analysera klustret:

str (k1)

Str () -funktionen ger strukturen för kmeanerna som innehåller olika parametrar som withinss, betweenss, etc, analyserar vilka du kan ta reda på kmeans prestanda.

betweenss: Mellan summan av kvadrater, dvs Intracluster-likhet

withinss: Inom summan av kvadraten dvs Intercluster likhet

totwithinss: Summan av alla withinss av alla kluster, dvs. total likhet inom klustret

En bra gruppering kommer att ha ett lägre värde på 'tot.withinss' och högre värde på 'betweenss' vilket beror på antalet kluster 'k' som valdes ursprungligen.

Tiden är mogen att bli expert på maskininlärning för att dra nytta av nya möjligheter som kommer din väg. Detta leder oss till slutet av detta ” Maskininlärning med R ”Blogg. Jag hoppas att den här bloggen var informativ fruktbar.

Edureka har en speciellt kuraterad vilket hjälper dig att få expertis inom maskininlärningsalgoritmer som K-Means Clustering, Decision Trees, Random Forest, Naive Bayes. Du lär dig också begreppen statistik, tidsserier, textbrytning och en introduktion till djupt lärande. Nya satser för denna kurs börjar snart !!