Zephyrnet-logo

Een gids om machine learning-pijplijn te begrijpen met casestudy

Datum:

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon.

Introductie

Machine learning is een van de meest geavanceerde technologieën in de informatica van het huidige tijdperk. Veel onderzoekers, academici en industriëlen investeren hun inspanningen om op dit gebied te innoveren. Als je het proces van het trainen van machines om zelf beslissingen te leren nemen fascinerend vindt, dan zal deze tutorial erg nuttig voor je zijn. Er wordt een demonstratie getoond van hoe we door wat gegevens te verstrekken onze modellen daadwerkelijk kunnen trainen om iets te leren en het steeds weer opnieuw te gebruiken voor het nemen van beslissingen.

Dit proces lijkt in eerste instantie misschien interessant, maar als we het stap voor stap gaan doen, kost het veel tijd. Het sleutelen aan de code, het veranderen van modellen en het opsporen van fouten is erg tijdrovend en vergt veel inspanning. Een effectieve aanpak die door de mensen wordt gevolgd, is dus het creëren van een machine learning-pijplijn.

Inhoudsopgave

1. Wat is de Machine Learning Pipeline?

2. Voordelen van het gebruik van Machine Learning Pipeline in een productieomgeving

3. Casestudy voor meer informatie over Machine Learning Pipeline

  • Gegevenssetbeschrijving

  • Opleidingsproces

  1. Data Preprocessing
  2. Verkennende gegevensanalyse
  3. Functieselectie
  4. Model opleiding
  • Validatieproces

  • Testproces

4. Conclusie

Wat is de Machine Learning Pipeline?

Machine Learning-pijplijn verwijst naar het maken van onafhankelijke en herbruikbare modules op een zodanige manier dat ze aan elkaar kunnen worden gekoppeld om een ​​volledige workflow te creëren. Afgezien van deze verfijnde definitie, betekent het simpelweg dat we ons werk in kleinere delen verdelen en het op zo'n manier automatiseren dat we de hele taak als kleine subtaken kunnen uitvoeren.

Laten we het concept begrijpen met behulp van een praktijkvoorbeeld dat u in uw dagelijks leven bent tegengekomen:

Zie het als vergelijkbaar met het wassen van kleding. De procedure om kleding in verschillende stapels te scheiden, elke stapel kleding te wassen, te drogen en op te hangen. Elke stap kan onafhankelijk worden gedaan en helpt ons om taken sneller uit te voeren omdat ze nu op een georganiseerde manier kunnen worden gedaan.

Voordelen van het gebruik van Machine Learning Pipeline in een productieomgeving

Nu is een van de grote voordelen ervan de flexibiliteit om deze componenten onafhankelijk en iteratief te gebruiken.

Bijvoorbeeld als u een dataset heeft en u wilt uw model valideren op twee verschillende criteria, dan hoeft u de trainingscomponent niet opnieuw uit te voeren, u kunt uw validatiecomponent afzonderlijk uitvoeren en twee pijplijnen maken. Op deze manier kunnen we met meer gemak nauwkeurigere algoritmen maken.

Machine learning-modellen kunnen gemakkelijker en efficiënter worden gemaakt, omdat we deze componenten hebben gedefinieerd, omdat de implementatie voor elk subonderdeel stapsgewijs kan worden uitgevoerd.

Pipelining automatiseert de hele workflow, van het correleren en invoeren van gegevens in het model tot het analyseren van de resultaten. Het gebruik van deze goed beheerde implementaties is dus veel robuuster, schaalbaarder en aanpasbaar.

Het helpt ook bij het uitbreiden van iemands model, omdat we niet alle voorgaande code hoeven te kopiëren en plakken, we kunnen eerdere componenten in de pijplijn gebruiken en daarop voortbouwen. Het kopiëren van eerdere code is erg omslachtig en wordt als een slechte gewoonte beschouwd.

Handmatige update van verschillende scripts is niet nodig als we sleutelen aan een bepaalde configuratie, deze wordt automatisch bijgewerkt. Dit elimineert de omvang van fouten die aanwezig kunnen zijn bij handmatige update.

Nadat we de voordelen van het gebruik van een machine learning-pijplijn hebben gekend, komt nu het meest interessante deel van deze tutorial waarin we hetzelfde concept proberen te gebruiken in een van de probleemstellingen.

Laten we dus de verschillende stappen doorlopen die betrokken zijn bij het maken ervan. Ik zal de populaire Iris-dataset gebruiken voor demonstratiedoeleinden. De input voor onze pijplijn zou dus de Iris-dataset zijn.

Casestudy voor meer informatie over Machine Learning Pipeline

De Iris-dataset bevat 3 klassen die elk overeenkomen met een type Irisplant. Dit zijn Iris Setosa, Iris Versicolour en Iris Virginica. Er zijn 50 instanties van elke klasse en elke klasse is lineair te scheiden van andere klassen. De kenmerken in de dataset zijn in feite kenmerken van de data en kunnen numeriek of categorisch zijn. Er zijn 4 onafhankelijke variabelen of wat we de functies in machine learning noemen en dit zijn kelkbladlengte, kelkbladbreedte, bloembladlengte en bloembladbreedte. Al deze functies zijn numeriek.

Onze invoergegevensset kan veel problemen hebben die de prestaties van het machine learning-model negatief beïnvloeden. Daarom moeten we het probleem van ontbrekende waarden, ruis of dubbele gegevens oplossen of soms moeten we gegevens in een bepaald bereik formatteren om de nauwkeurigheid van ons model te verbeteren. We moeten onze database dus voorbewerken voorafgaand aan het trainingsmodel.

Voor ontbrekende waarden kunnen we de hele rij verwijderen of de ontbrekende waarden invullen met de gemiddelde waarde van het kenmerk. Op dezelfde manier kunnen we gegevens herschalen, binariseren, normaliseren of gegevens coderen. Een ding om op te merken is dat we deze technieken gebruiken, afhankelijk van de dataset en het probleem dat we proberen aan te pakken.

Een andere belangrijke stap die optreedt bij de voorverwerking van gegevens, is het opsplitsen van de dataset in een trainings- en testdataset.

Voor Iris-datasetclassificatie worden de volgende voorbewerkingstechnieken gebruikt.

1. Codering: De doelvariabele, dwz de kolom Soorten, is categorisch en moet daarom worden gecodeerd naar numerieke gegevens. We zullen Label Encoder uit de sklearn-voorverwerkingsbibliotheek gebruiken. Het codeert Iris - setosa tot 0 , Iris - versicolor tot 1 en Iris-Virginica tot 2.

van sklearn.preprocessing import LabelEncoder encoder=LabelEncoder() y = encoder.fit_transform(y)

2. Trein-test verdeling: We zullen onze gegevens nu splitsen in een verhouding van 80 : 20 met 80 procent van de originele dataset als trainingsset.

van sklearn.model_selection import train_test_split xtrain , xtest, ytrain, ytest = train_test_split(x,y,test_size=0.2, shuffle=True) xtest.head()

Voordat u een model toepast, is het een cruciale stap om de dataset te begrijpen. Het verkennen van gegevens en het vinden van de kenmerken ervan is in wezen wat we verkennende gegevensanalyse noemen. We kunnen de gegevens visualiseren met behulp van verschillende bibliotheken.

Voor de gegeven Iris-gegevensset kunnen we het aantal van elke soort visueel zien.

Machine learning-pijplijn

Afbeeldingsbron: auteur

We kunnen ook de verdeling van elke functie visualiseren. 

Machine learning-pijplijn

Afbeeldingsbron: auteur 

Het identificeren van de relevante kenmerken en deze op de juiste manier selecteren om het model te ontwerpen, is een van de belangrijkste taken bij het bouwen van de pijplijn.

Een groot probleem bij het ontwerpen van een machine learning-model is de toename in complexiteit als gevolg van een groot nee. van onafhankelijke variabelen of kenmerken en verminderde nauwkeurigheid door de aanwezigheid van irrelevante kenmerken. Dus kortere trainingstijd, betere pasvorm van gegevens en betere nauwkeurigheid zijn de belangrijkste doelstellingen van functieselectie.

Het gebruik van informatieversterking, chi-kwadraattest of de correlatiematrix zijn enkele populaire technieken voor het selecteren van kenmerken. Ook regularisatietechnieken zoals L1-regularisatie kunnen worden gebruikt om de selectie van kenmerken meer optimaal te maken.

Omdat de Iris-dataset slechts 4 functies heeft die relatief minder zijn, is het niet nodig om functies te selecteren.

Zodra we de opgeschoonde gegevens met de geselecteerde functies hebben, is het tijd om de olifant in de kamer aan te spreken. Om de beoogde taak uit te voeren, moeten we het geselecteerde model trainen op onze voorbereide dataset.

Nu is een machine learning-model gewoon een programmabestand dat draait op een verstrekte dataset en een taak uitvoert zoals classificatie, voorspelling enz. en output produceert. Wat het uniek maakt, is het vermogen om tijdens dit proces te leren. Ons machine learning-model kan in een van de volgende categorieën vallen:

- Leren onder toezicht: Wanneer invoergegevens samen met de juiste uitvoer aan het model worden geleverd, staat het leren bekend als begeleid leren.

- Onbegeleid leren: Wanneer ongelabelde gegevens worden verstrekt en het doel van het algoritme is om patronen in gegevens te vinden en deze te clusteren of om de associatie te vinden, staat dit soort leren bekend als niet-gesuperviseerd leren.

- Versterking leren: Het basisdoel is om te leren een geschikte actie te ondernemen in een bepaalde omgeving om de beloning te maximaliseren.

Nu kunnen we alle bestaande technieken gebruiken, zoals lineaire regressie, KNN, Naive Bayes-algoritme, logistische regressie, SVM's, beslissingsbomen, PCA, Random forest enz. We kunnen zelfs verschillende modellen op onze dataset uitproberen om te zien welke beter werkt.

Voor onze gegeven dataset kunnen we de beslissingsboomclassificatie gebruiken door deze uit de sklearn-bomenbibliotheek te importeren. Nu, in eenvoudige bewoordingen, splitst de beslissingsboomclassificator de dataset op elk knooppunt op basis van enkele parameters. Hier kunnen we max_depth geven als een hyperparameter die verwijst naar de maximale diepte van de boom.

van sklearn.tree import DecisionTreeClassifier baseest = DecisionTreeClassifier(max_depth=2) baseest.fit(xtrain,ytrain)

Voordat we ons model evalueren op een testdataset, is het een goed idee om het model op de validatieset te valideren. Dit komt omdat wanneer we ons model hebben getraind, we niet met zekerheid kunnen zeggen dat ons model goed werkt op ongeziene datasets, dat wil zeggen dat het met de vereiste nauwkeurigheid presteert. 

Het validatieproces is dus om het vertrouwen te krijgen dat ons model de gewenste resultaten kan geven op ongeziene gegevens, of om ons de zekerheid te geven dat de manier waarop we hebben aangenomen dat relaties tussen gegevens enige output opleveren, inderdaad correct is.

Waarom is een validatieproces vereist voor sommige datasets?

Als we grote datasets hebben, kunnen we data opsplitsen in 3 sets, namelijk trein-, validatie- en testdataset. Maar soms, wanneer we een beperkte dataset hebben, is kruisvalidatie een van de meest populaire en effectieve technieken voor datavalidatie. Om er een paar te noemen, kunnen we zeggen k-voudige kruisvalidatie of gestratificeerde k-vouw die inherent gebruik maakt van steekproeven. We kunnen deze validatietechnieken gebruiken en als de output niet bevredigend is, kunnen we onze hyperparameters opnieuw afstemmen en ons model opnieuw trainen of dienovereenkomstig een nieuw model kiezen.

Een andere interessante manier om hyperparameters af te stemmen is het gebruik van Grid Search CV, waarmee men de beste parameters in het opgegeven bereik van parameters kan vinden via een schatter op basis van cross-validated grid search.

Dus voor Iris-dataset kunnen we gestratificeerde 5-voudige kruisvalidatie gebruiken. 

Waarom gestratificeerde K-fold kruisvalidatie?

De reden voor het gebruik van Stratified K-fold Cross Validation is te wijten aan een beperkt aantal exemplaren in de dataset. Bij gestratificeerde k-voudige validatie wordt gestratificeerde steekproeven gedaan op de dataset. Gestratificeerde steekproeven houden in dat gegevenssetwaarden zodanig worden uitgekozen dat deze gegevens onze trainingsgegevens nauwkeurig weergeven, dat wil zeggen, dergelijke rijen uitkiezen zodat de verhouding van verschillende klassen in de steekproef vergelijkbaar blijft met die van de trainingsgegevensset. Hier betekent 5-voudig in wezen dat het monster in 5 delen wordt verdeeld en dat 4 ervan worden gebruikt voor training, terwijl 1 wordt weggelaten voor testen in kruisvalidatie.

van sklearn.model_selection import cross_val_score van sklearn.model_selection import StratifiedKFold skf=StratifiedKFold(n_splits=5, shuffle=True) cvscore = cross_val_score(baseest,xtrain,ytrain,cv = skf) print(cvscore) print", cv score.mean()) print("Standaarddeviatie is:", cvscore.std())

Hier kunnen we de kruisvalidatiescore van elke vouw en de gemiddelde en standaarddeviatie ervoor vinden.

Output:

[1. 1. 0.91666667 0.95833333 1. ] Gemiddelde is: 0.975 Standaarddeviatie is: 0.03333333333333334

Het is de laatste stap van de pijplijn waarin we de prestaties van ons model op onze testdataset daadwerkelijk controleren en de doelvariabele voorspellen. 

De te gebruiken evaluatiematrix hangt af van het probleem dat door ons model wordt opgelost.

We kunnen vier soorten uitkomsten hebben voor classificatieproblemen:

– Echt positief: Wanneer een positieve uitkomst correct is geclassificeerd.

- Vals positief: Wanneer een negatief resultaat als positief wordt geclassificeerd.

– Echt negatief: Wanneer een negatief resultaat correct is geclassificeerd.

- Fout negatief: Wanneer een positieve uitkomst als negatief wordt geclassificeerd.

Drie hoofdstatistieken die de prestaties van een machine learning-model voor classificatie evalueren, zijn:

- Nauwkeurigheid: Hoeveel van de totale voorspellingen bleken juist te zijn?

Nauwkeurigheid = correcte voorspellingen / totale voorspellingen

- precisie: Hoeveel van de voorspelde positieve uitkomsten bleken in feite positief te zijn, dwz hoe nauwkeurig het model is?

Precisie = True positives/totaal positieve voorspellingen

- Terugroepen: Hoeveel gevallen van positieve klasse correct geïdentificeerd of we kunnen zeggen teruggeroepen?

Recall= ware positieven/( ware positieven+valse negatieven)

De statistieken kunnen worden gevisualiseerd door ROC-curven. 

Kun je enkele van de evaluatiestatistieken bedenken die worden gebruikt voor de regressieprobleemstelling?

Voor regressiemodellen kunnen we fouten gebruiken zoals de gemiddelde kwadratenfout, de verklaarde variantie of de R-kwadraatfout.

Dus voor ons model kunnen we de nauwkeurigheid als volgt berekenen:

van sklearn.metrics import nauwkeurigheid_score ypred = baseest.predict(xtest) print(accuracy_score(ytest,ypred)*100,end='') print('%')

Output:

90.0%

Hier blijkt de nauwkeurigheid vrij laag te zijn. Dit komt omdat de beslisboom een ​​zwakke leerling is. We kunnen technieken voor ensemble-leer gebruiken, zoals boosting of bagging, om classifiers te maken met zeer goede prestaties met behulp van beslissingsbomen.

Nu kunt u uw eigen machine learning-pijplijnen bouwen, andere classificaties proberen of aan deze hyperparameters sleutelen om betere prestaties te bereiken.

Lees meer artikelen over Machine Learning Pipelines op onze blog.

Conclusie

Bedankt voor het lezen!

Ik hoop dat mijn bericht informatie over het onderwerp goed overbrengt, inclusief alle ingewikkelde concepten. Als je mijn werk leuk vindt, applaudisseer dan vriendelijk voor deze blog en volg me op LinkedIn voor de geweldige inhoud over meerdere technologieën en hun integratie!

Als je twijfels of suggesties hebt met betrekking tot het artikel of in het algemeen, neem dan gerust contact met me op. 

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt. 

Bron: https://www.analyticsvidhya.com/blog/2022/01/a-guide-to-understand-machine-learning-pipeline-with-case-study/

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?