Spark MLlib - Machine Learning-bibliotheek van Apache Spark



Deze Spark MLlib-blog laat je kennismaken met de Machine Learning-bibliotheek van Apache Spark. Het bevat een Movie Recommendation System-project met Spark MLlib.

Spark MLlib is de Machine Learning-component van Apache Spark.Een van de belangrijkste voordelen van Spark is de mogelijkheid om berekeningen enorm te schalen, en dat is precies wat u nodig hebt voor algoritmen voor machine learning. Maar de beperking is dat alle algoritmen voor machine learning niet effectief kunnen worden parallel geschakeld. Elk algoritme heeft zijn eigen uitdagingen voor parallellisatie, of het nu gaat om taakparallellisme of gegevensparallellisme.

Dat gezegd hebbende, Spark wordt het de facto platform voor het bouwen van algoritmen en applicaties voor machine learning.Nou, je kunt de samengesteld door Industry Experts alvorens verder te gaan met de blog.De ontwikkelaars die aan de Spark MLlib werken, implementeren steeds meer machine-algoritmen op een schaalbare en beknopte manier in het Spark-framework. Via deze blog leren we de concepten Machine Learning, Spark MLlib, de hulpprogramma's, algoritmen en een complete use case van Movie Recommendation System.





In deze blog komen de volgende onderwerpen aan bod:

  1. Wat is machine learning?
  2. Spark MLlib Overzicht
  3. Spark MLlib Tools
  4. MLlib-algoritmen
  5. Use Case - Movie Recommendation System

Wat is machine learning?

Ontwikkeld uit de studie van patroonherkenning en computationele leertheorie in kunstmatige intelligentie, onderzoekt machine learning de studie en constructie van algoritmen die kunnen leren van en voorspellingen kunnen doen over gegevens - dergelijke algoritmen kunnen worden overwonnen door strikt statische programma-instructies te volgen door datagestuurde voorspellingen of beslissingen te maken , door een model te bouwen op basis van steekproefinvoer.



Machine Learning - Spark MLlib - Edureka Figuur: Tools voor machine learning

Machine learning is nauw verwant aan computationele statistieken, die zich ook richten op het maken van voorspellingen door het gebruik van computers. Het heeft sterke banden met wiskundige optimalisatie, die methoden, theorie en toepassingsdomeinen aan het veld levert. Binnen het veld van data-analyse is machine learning een methode die wordt gebruikt om complexe modellen en algoritmen te bedenken die zich lenen voor een voorspelling die bij commercieel gebruik bekend staat als voorspellende analyse.

Er zijn drie categorieën machine learning-taken:



  1. Leren onder toezicht : Begeleid leren is waar je invoervariabelen (x) en een uitvoervariabele (Y) hebt en je gebruikt een algoritme om de mappingfunctie van de invoer naar de uitvoer te leren.
  2. Ongecontroleerd leren : Unsupervised learning is een type algoritme voor machine learning dat wordt gebruikt om conclusies te trekken uit datasets die bestaan ​​uit invoergegevens zonder gelabelde reacties.
  3. Versterkend leren : Een computerprogramma staat in wisselwerking met een dynamische omgeving waarin het een bepaald doel moet uitvoeren (zoals autorijden of een wedstrijd spelen tegen een tegenstander). Het programma krijgt feedback in termen van beloningen en straffen terwijl het door zijn probleemruimte navigeert.Dit concept wordt bekrachtigingsleren genoemd.

Spark MLlib Overzicht

Spark MLlib wordt gebruikt om machine learning uit te voeren in Apache Spark. MLlib bestaat uit populaire algoritmen en hulpprogramma's.

MLlib Overzicht:

  • spark.mllib bevat de originele API die bovenop RDD's is gebouwd. Het bevindt zich momenteel in de onderhoudsmodus.
  • spark.ml biedt een API op een hoger niveau die bovenop DataFrames is gebouwd voorhet bouwen van ML-pijplijnen. spark.ml is op dit moment de primaire Machine Learning API voor Spark.

Spark MLlib Tools

Spark MLlib biedt de volgende tools:

  • ML-algoritmen: ML-algoritmen vormen de kern van MLlib. Deze omvatten gemeenschappelijke leeralgoritmen zoals classificatie, regressie, clustering en collaboratieve filtering.
  • Featurisatie: Featurization omvat functie-extractie, transformatie, dimensionaliteitsreductie en selectie.
  • Pijpleidingen: Pijplijnen bieden tools voor het construeren, evalueren en afstemmen van ML-pijpleidingen.
  • Persistentie: Persistentie helpt bij het opslaan en laden van algoritmen, modellen en pijplijnen.
  • Gereedschap: Gereedschapvoor lineaire algebra, statistieken en gegevensverwerking.

MLlib-algoritmen

De populaire algoritmen en hulpprogramma's in Spark MLlib zijn:

  1. Basisstatistieken
  2. Regressie
  3. Classificatie
  4. Aanbevelingssysteem
  5. Clustering
  6. Dimensionaliteitsreductie
  7. Functie-extractie
  8. Optimalisatie

Laten we enkele hiervan in detail bekijken.

Basisstatistieken

Basisstatistieken bevat de meest elementaire machine learning-technieken. Deze omvatten:

  1. Samenvattende statistieken : Voorbeelden zijn onder meer gemiddelde, variantie, aantal, max, min en aantalNonZeros.
  2. Correlaties : Spearman en Pearson zijn enkele manieren om correlatie te vinden.
  3. Gestratificeerde steekproef : Deze omvatten sampleBykey en sampleByKeyExact.
  4. Hypothese testen : Pearsons chikwadraat-test is een voorbeeld van hypothesetesten.
  5. Willekeurige gegevensgeneratie : RandomRDDs, Normal en Poisson worden gebruikt om willekeurige gegevens te genereren.

Regressie

Regressie analyse is een statistisch proces om de relaties tussen variabelen te schatten. Het bevat veel technieken voor het modelleren en analyseren van verschillende variabelen waarbij de nadruk ligt op de relatie tussen een afhankelijke variabele en een of meer onafhankelijke variabelen. Meer specifiek helpt regressieanalyse om te begrijpen hoe de typische waarde van de afhankelijke variabele verandert wanneer een van de onafhankelijke variabelen wordt gevarieerd, terwijl de andere onafhankelijke variabelen vast worden gehouden.

Regressieanalyse wordt veel gebruikt voor voorspelling en prognose, waar het gebruik ervan aanzienlijke overlap heeft met het gebied van machine learning. Regressieanalyse wordt ook gebruikt om te begrijpen welke van de onafhankelijke variabelen gerelateerd zijn aan de afhankelijke variabele, en om de vormen van deze relaties te onderzoeken. In beperkte omstandigheden kan regressieanalyse worden gebruikt om causale verbanden tussen de onafhankelijke en afhankelijke variabelen af ​​te leiden.

Classificatie

Classificatie is het probleem van het identificeren tot welke van een reeks categorieën (subpopulaties) een nieuwe waarneming behoort, op basis van een trainingsset met gegevens die waarnemingen (of gevallen) bevatten waarvan het categorielidmaatschap bekend is. Het is een voorbeeld van patroonherkenning.

Hier zou een voorbeeld zijn het toewijzen van een bepaalde e-mail aan de klassen ‘spam’ of ‘niet-spam’ of het toekennen van een diagnose aan een bepaalde patiënt zoals beschreven door de waargenomen kenmerken van de patiënt (geslacht, bloeddruk, aan- of afwezigheid van bepaalde symptomen, enzovoort.).

Aanbevelingssysteem

NAAR aanbevelingssysteem is een subklasse van een informatiefiltersysteem dat tracht de 'waardering' of 'voorkeur' te voorspellen die een gebruiker aan een item zou geven. Aanbevelingssystemen zijn de afgelopen jaren steeds populairder geworden en worden op verschillende gebieden gebruikt, waaronder films, muziek, nieuws, boeken, onderzoeksartikelen, zoekopdrachten, sociale tags en producten in het algemeen.

Aanbevelingssystemen produceren doorgaans een lijst met aanbevelingen op een van de volgende twee manieren: via collaboratieve en op inhoud gebaseerde filtering of de persoonlijkheidsgerichte benadering.

  1. Gezamenlijke filtering benadert het bouwen van een model op basis van het gedrag van een gebruiker in het verleden (eerder gekochte of geselecteerde items en / of numerieke beoordelingen die aan die items zijn gegeven), evenals vergelijkbare beslissingen van andere gebruikers. Dit model wordt vervolgens gebruikt om items (of beoordelingen voor items) te voorspellen waarin de gebruiker mogelijk interesse heeft.
  2. Op inhoud gebaseerde filtering benaderingen gebruiken een reeks discrete kenmerken van een item om aanvullende items met vergelijkbare eigenschappen aan te bevelen.

Verder worden deze benaderingen vaak gecombineerd als hybride aanbevelingssystemen.

Clustering

Clustering is de taak om een ​​set objecten zo te groeperen dat objecten in dezelfde groep (een cluster genoemd) meer op elkaar lijken (in zekere zin) dan op die in andere groepen (clusters). Het is dus de hoofdtaak van verkennende datamining en een veelgebruikte techniek voor statistische gegevensanalyse, die op veel gebieden wordt gebruikt, waaronder machine learning, patroonherkenning, beeldanalyse, het ophalen van informatie, bio-informatica, datacompressie en computergraphics.

Dimensionaliteitsreductie

Dimensionaliteitsreductie is het proces van het verminderen van het aantal willekeurige variabelen in kwestie, door het verkrijgen van een reeks hoofdvariabelen. Het kan worden onderverdeeld in feature selectie en feature extractie.

  1. Functie selectie: Met feature selectie wordt een subset van de originele variabelen gevonden (ook wel features of attributen genoemd).
  2. Functie-extractie: Dit transformeert de gegevens in de hoog-dimensionale ruimte naar een ruimte met minder afmetingen. De gegevenstransformatie kan lineair zijn, zoals in Principal Component Analysis (PCA), maar er bestaan ​​ook veel niet-lineaire technieken voor het reduceren van dimensionaliteit.

Functie-extractie

Functie-extractie vertrekt van een eerste set gemeten gegevens en bouwt afgeleide waarden (kenmerken) die bedoeld zijn om informatief en niet-redundant te zijn, de daaropvolgende leer- en generalisatiestappen te vergemakkelijken en in sommige gevallen tot betere menselijke interpretaties te leiden. Dit houdt verband met de reductie van dimensionaliteit.

Optimalisatie

Optimalisatie is de selectie van de besteelement (met betrekking tot een bepaald criterium) uit een aantal beschikbare alternatieven.

In het eenvoudigste geval bestaat een optimalisatieprobleem uit het maximaliseren of minimaliseren van een echte functie door systematisch invoerwaarden te kiezen uit een toegestane set en de waarde van de functie te berekenen. De generalisatie van optimalisatietheorie en -technieken naar andere formuleringen omvat een groot gebied van toegepaste wiskunde. Meer in het algemeen omvat optimalisatie het vinden van 'best beschikbare' waarden van een objectieve functie gegeven een gedefinieerd domein (of invoer),inclusief een verscheidenheid aan verschillende soorten objectieve functies en verschillende soorten domeinen.

Use Case - Movie Recommendation System

Probleemstelling: Om een ​​filmaanbevelingssysteem te bouwen dat films aanbeveelt op basis van de voorkeuren van een gebruiker met behulp van Apache Spark.

Onze vereisten:

Dus laten we de vereisten beoordelen om ons filmaanbevelingssysteem te bouwen:

  1. Verwerk enorme hoeveelheden gegevens
  2. Invoer uit meerdere bronnen
  3. Makkelijk te gebruiken
  4. Snelle verwerking

Zoals we kunnen beoordelenvolgens onze vereisten hebben we de beste Big Data-tool nodig om grote hoeveelheden gegevens in korte tijd te verwerken. Daarom is Apache Spark is de perfecte tool om ons filmaanbevelingssysteem te implementeren.

Laten we nu eens kijken naar het stroomdiagram voor ons systeem.

Zoals we kunnen zien, gebruikt het volgende Streaming vanuit Spark Streaming. We kunnen in realtime streamen of gegevens uit Hadoop HDFS lezen.

Dataset ophalen:

Voor ons filmaanbevelingssysteem kunnen we gebruikersbeoordelingen krijgen van veel populaire websites zoals IMDB, Rotten Tomatoes en Times Movie Ratings. Deze dataset is beschikbaar in vele formaten zoals CSV-bestanden, tekstbestanden enen databases. We kunnen de gegevens live streamen vanaf de websites of ze downloaden en opslaanons lokale bestandssysteem of HDFS.

Dataset:

De onderstaande afbeelding laat zien hoe we datasets van populaire websites kunnen verzamelen.

wat is de fabriek in angularjs

Zodra we de gegevens naar Spark hebben gestreamd, ziet het er ongeveer zo uit.

Machine leren:

Het hele aanbevelingssysteem is gebaseerd op het Machine Learning-algoritme Afwisselende kleinste vierkanten . Hier is ALS een soort regressieanalyse waarbij regressie wordt gebruikt om een ​​lijn te trekken tussen de datapunten op een zodanige manier dat de som van de kwadraten van de afstand tot elk datapunt wordt geminimaliseerd. Deze lijn wordt dus gebruikt om de waarden van de functie te voorspellen waar deze voldoet aan de waarde van de onafhankelijke variabele.

De blauwe lijn in het diagram is de best passende regressielijn. Voor deze lijn is de waarde van de afmeting D minimaal. Alle andere rode lijnen zullen altijd verder van de dataset als geheel verwijderd zijn.

Spark MLlib-implementatie:

  1. We zullen Collaborative Filtering (CF) gebruiken om de beoordelingen voor gebruikers voor bepaalde films te voorspellen op basis van hun beoordelingen voor andere films.
  2. We werken dit vervolgens samen met de beoordeling van andere gebruikers voor die specifieke film.
  3. Om de volgende resultaten uit onze Machine Learning te halen, hebben we Spark SQL’s DataFrame, Dataset en SQL Service nodig.

Hier is de pseudo-code voor ons programma:

import org.apache.spark.mllib.recommendation.ALS import org.apache.spark.mllib.recommendation.Rating import org.apache.spark.SparkConf // Importeer andere benodigde pakketten object Movie {def main (args: Array [String]) ) {val conf = nieuwe SparkConf (). setAppName ('Movie'). setMaster ('local [2]') val sc = new SparkContext (conf) val rawData = sc.textFile ('* Gegevens lezen uit CSV-filmbestand * ') //rawData.first () val rawRatings = rawData.map (* Split rawData op tabscheidingsteken *) val ratings = rawRatings.map {* Map case array van gebruiker, film en beoordeling *} // Training van het data val-model = ALS.train (beoordelingen, 50, 5, 0,01) model.userFeatures model.userFeatures.count model.productFeatures.count val predictedRating = * Voorspellen voor gebruiker 789 voor film 123 * val userId = * Gebruiker 789 * val K = 10 val topKRecs = model.recommendProducts (* Aanbevelen aan gebruiker voor de specifieke waarde van K *) println (topKRecs.mkString ('')) val movies = sc.textFile ('* Filmlijstgegevens lezen *') val titels = movies.map (line => line.split ('|'). take ( 2)). Map (array => (array (0) .toInt, array (1))). CollectAsMap () val titelsRDD = movies.map (line => line.split ('|'). Take (2) ) .map (array => (array (0) .toInt, array (1))). cache () titels (123) val moviesForUser = ratings. * Zoeken naar gebruiker 789 * val sqlContext = * SQL-context maken * val moviesRecommended = sqlContext. * Maak een dataframe van aanbevolen films * moviesRecommended.registerTempTable ('moviesRecommendedTable') sqlContext.sql ('Select count (*) from moviesRecommendedTable'). foreach (println) moviesForUser. * Sorteer de beoordelingen voor gebruiker 789 * .map (* Wijs de beoordeling toe aan de filmtitel *). * Druk de waardering af * val resultaten = moviesForUser.sortBy (-_. Beoordeling) .take (30) .map (rating => (titels (rating.product), rating.rating))}}

Zodra we voorspellingen hebben gegenereerd, kunnen we Spark SQL gebruiken om de resultaten op te slaan in een RDBMS-systeem. Verder kan dit worden weergegeven op een webapplicatie.

Resultaten:

Figuur: Films aanbevolen voor gebruiker 77

Hoera! We hebben dus met succes een filmaanbevelingssysteem gemaakt met Apache Spark. Hiermee hebben we slechts een van de vele populaire algoritmen behandeld die Spark MLlib te bieden heeft. We zullen meer leren over Machine Learning in de komende blogs over Data Science Algorithms.

Als u vooruitgaat, kunt u Apache Spark blijven leren met Spark Tutorial, Spark Streaming Tutorial, en Spark interviewvragen.Edureka streeft ernaar om de best mogelijke leerervaring online te bieden.

Bekijk onze ik f je wilt Spark leren en een carrière in het domein van Spark opbouwen en expertise opbouwen om grootschalige gegevensverwerking uit te voeren met behulp van RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​en Scala met praktijkvoorbeelden.