Tweet Share Share Share

Sist uppdaterad den 17 augusti 2020

Maskininlärningens prediktiva modelleringsprestanda är bara så bra som dina data, och dina data är bara så bra som det sätt på vilket du förbereder dem för modellering.

Det vanligaste tillvägagångssättet för dataförberedelse är att studera en datamängd och granska förväntningarna på en maskininlärningsalgoritm, och sedan noggrant välja de lämpligaste dataförberedelsesteknikerna för att omvandla rådata för att på bästa sätt uppfylla algoritmens förväntningar. Detta är långsamt, dyrt och kräver en stor mängd expertis.

Ett alternativt tillvägagångssätt för dataförberedelse är att grid search en uppsättning vanliga och allmänt användbara dataförberedelsestekniker till rådata. Detta är en alternativ filosofi för datapreparering som behandlar datatransformationer som ytterligare en hyperparameter i modelleringspipelinen som ska genomsökas och justeras.

Detta tillvägagångssätt kräver mindre expertis än det traditionella manuella tillvägagångssättet för datapreparering, även om det är beräkningskrävande. Fördelen är att den kan hjälpa till att upptäcka icke-intuitiva lösningar för datapreparering som uppnår god eller bästa prestanda för ett givet prediktivt modelleringsproblem.

I den här handledningen kommer du att upptäcka hur du använder gridsökningsmetoden för datapreparering med tabellerade data.

När du har slutfört den här handledningen kommer du att veta:

  • Gridsökning ger en alternativ metod för datapreparering av tabellerade data, där transformatorer prövas som hyperparametrar i modelleringspipeline.
  • Hur man använder rutnätssökningsmetoden för datapreparering för att förbättra modellens prestanda jämfört med en baslinje för ett standardklassificeringsdataset.
  • Hur man använder rutnätssökningssekvenser av dataprepareringsmetoder för att ytterligare förbättra modellens prestanda.

Kicka igång ditt projekt med min nya bok Data Preparation for Machine Learning, inklusive steg-för-steg-handledning och Python-källkodfiler för alla exempel.

Vi sätter igång.

Hur man använder rutnätssökande dataförberedelsestekniker
Foto av Wall Boat, vissa rättigheter förbehållna.

Tutorial Overview

Denna tutorial är uppdelad i tre delar; de är:

  1. Grid Search Technique for Data Preparation
  2. Dataset and Performance Baseline
    1. Wine Classification Dataset
    2. Baseline Model Performance
  3. Grid Search Approach to Data Preparation

Grid Search Technique for Data Preparation

Dataförberedelse kan vara utmanande.

Det tillvägagångssätt som oftast föreskrivs och följs är att analysera datamängden, granska algoritmernas krav och omvandla rådata för att på bästa sätt uppfylla algoritmernas förväntningar.

Detta kan vara effektivt men är också långsamt och kan kräva djup expertis med dataanalys och algoritmer för maskininlärning.

Ett alternativt tillvägagångssätt är att behandla förberedelsen av ingångsvariablerna som en hyperparameter i modelleringspipelinen och att ställa in den tillsammans med valet av algoritm och algoritmkonfigurationer.

Det kan handla om en datatransformation som ”inte borde fungera” eller som ”inte borde vara lämplig för algoritmen”, men som ändå resulterar i goda eller bra prestanda. Alternativt kan det vara avsaknaden av en datatransformation för en ingående variabel som anses vara ”absolut nödvändig” men som ändå resulterar i bra eller bra prestanda.

Detta kan åstadkommas genom att utforma en rutnätssökning av databearbetningstekniker och/eller sekvenser av databearbetningstekniker i pipelines. Detta kan innebära att man utvärderar var och en på en enda utvald algoritm för maskininlärning eller på en serie algoritmer för maskininlärning.

Fördelen med detta tillvägagångssätt är att det alltid resulterar i förslag på modelleringspipelines som ger goda relativa resultat. Viktigast av allt är att den kan gräva fram de icke uppenbara och ointuitiva lösningarna för praktiker utan behov av djup expertis.

Vi kan utforska detta tillvägagångssätt för dataförberedelse med ett fungerande exempel.

För att vi ska kunna dyka ner i ett fungerande exempel, ska vi först välja ett standarddatamaterial och utveckla en baslinje i prestanda.

Vill du komma igång med dataförberedelse?

Ta min kostnadsfria 7-dagars snabbkurs via e-post nu (med exempelkod).

Klicka för att anmäla dig och även få en kostnadsfri PDF Ebook-version av kursen.

Ladda ner din GRATIS minikurs

Dataset och prestandabaseline

I det här avsnittet kommer vi först att välja ett standarddataset för maskininlärning och fastställa en baslinje i prestanda på detta dataset. Detta kommer att ge ett sammanhang för att utforska grid search-metoden för datapreparering i nästa avsnitt.

Dataset för vinklassificering

Vi kommer att använda datasetetet för vinklassificering.

Det här datasetetet har 13 ingångsvariabler som beskriver den kemiska sammansättningen hos prover av vin och kräver att vinet klassificeras som en av tre typer.

Du kan läsa mer om datasetet här:

  • Wine Dataset (wine.csv)
  • Wine Dataset Description (wine.names)

Det finns inget behov av att ladda ner datasetetet, eftersom vi kommer att ladda ner det automatiskt som en del av våra arbetade exempel.

Öppna datasetet och granska rådata. De första dataraderna listas nedan.

Vi kan se att det är ett prediktivt modelleringsproblem med flera klasser för klassificering med numeriska ingångsvariabler som var och en har olika skalor.

Exemplet nedan laddar datasetetet och delar upp det i ingångs- och utdatakolumnerna, och sammanfattar sedan datamatriserna.

Om vi kör exemplet kan vi se att datasetetet laddades korrekt och att det finns 179 datarader med 13 ingångsvariabler och en enda målvariabel.

1
(178, 13) (178,)

Nästan ska vi utvärdera en modell på detta dataset och fastställa en baslinje för prestanda.

Baslinje för modellens prestanda

Vi kan fastställa en baslinje för prestanda för vinklassificeringsuppgiften genom att utvärdera en modell på de råa indata.

I det här fallet kommer vi att utvärdera en logistisk regressionsmodell.

Först kan vi definiera en funktion för att ladda datamängden och utföra en viss minimal dataförberedelse för att se till att inmatningarna är numeriska och att målet är etikettkodat.

Vi kommer att utvärdera modellen med hjälp av guldstandarden upprepad stratifierad k-fold korsvalidering med 10 folds och tre upprepningar.

Vi kan sedan anropa funktionen för att läsa in datasetet, definiera vår modell och sedan utvärdera den och rapportera noggrannhet för medelvärde och standardavvikelse.

Det fullständiga exemplet för att utvärdera en logistisk regressionsmodell på den råa vinklassificeringsdatamängden finns nedan.

Den som kör exemplet utvärderar modellens prestanda och rapporterar medel- och standardavvikelsens klassificeringsnoggrannhet.

Observera: Dina resultat kan variera på grund av algoritmens eller utvärderingsförfarandets stokastiska natur, eller skillnader i numerisk precision. Överväg att köra exemplet några gånger och jämför det genomsnittliga resultatet.

I det här fallet kan vi se att den logistiska regressionsmodellen som passar in på de råa indatadata uppnådde en genomsnittlig klassificeringsnoggrannhet på cirka 95,3 procent, vilket ger en baslinje i prestanda.

1
Närhet: 0.953 (0.048)

Nästan ska vi undersöka om vi kan förbättra prestandan med hjälp av den grid-sökbaserade metoden för dataförberedelse.

Grid Search Approach to Data Preparation

I det här avsnittet kan vi undersöka om vi kan förbättra prestandan med hjälp av grid-sökmetoden för dataförberedelse.

Det första steget är att definiera en serie modelleringspipelines att utvärdera, där varje pipeline definierar en (eller flera) dataförberedelsestekniker och slutar med en modell som tar de transformerade data som indata.

Vi kommer att definiera en funktion för att skapa dessa pipelines som en lista med tupler, där varje tupel definierar kortnamnet för pipelinen och pipelinen i sig själv. Vi kommer att utvärdera en rad olika metoder för skalning av data (t.ex. MinMaxScaler och StandardScaler), distributionstransformationer (QuantileTransformer och KBinsDiscretizer) samt dimensionalitetsreduktionstransformationer (PCA och SVD).

Vi kan sedan anropa den här funktionen för att få fram en lista över transformationer och sedan räkna upp var och en av dem, utvärdera dem och rapportera prestandan längs vägen.

I slutet av körningen kan vi skapa en box- och whiskerplot för varje uppsättning resultat och jämföra resultatfördelningarna visuellt.

1
2
3
4

# plotta resultatet
pyplot.boxplot(results, labels=names, showmeans=True)
pyplot.show()

Det kompletta exemplet på tekniker för dataförberedelse för gridsökning av datauppsättning för datamängden för klassificering av vin anges nedan.

Den som kör exemplet utvärderar varje pipelines prestanda och rapporterar medelvärdet och standardavvikelsen för klassificeringsnoggrannheten.

Anmärkningar: Dina resultat kan variera på grund av algoritmens eller utvärderingsförfarandets stokastiska natur eller skillnader i numerisk precision. Överväg att köra exemplet några gånger och jämför det genomsnittliga resultatet.

I det här fallet kan vi se att både standardisering av indatavariablerna och användning av en kvantiltransform ger det bästa resultatet med en klassificeringsnoggrannhet på ca 98.7 procent, vilket är en förbättring jämfört med baslinjen utan dataförberedelse som uppnådde en klassificeringsnoggrannhet på 95,3 procent.

Du kan lägga till dina egna modelleringspipelines till funktionen get_pipelines() och jämföra deras resultat.

Kan du få bättre resultat?
Låt mig veta i kommentarerna nedan.

1
2
3

4

5
6
>norm: 0.976 (0.031)
>std: 0.987 (0.023)
>quan: 0.987 (0.023)
>kbins: 0.968 (0.045)
>pca: 0.963 (0.039)
>svd: 0.953 (0.048)

En figur skapas som visar box- och whiskerdiagram som sammanfattar fördelningen av klassificeringsnoggrannhetspoängen för varje databeredningsteknik. Vi kan se att fördelningen av poäng för standardisering och kvantiltransformationer är kompakt och mycket likartad och har en outlier. Vi kan se att spridningen av poäng för de andra transformatorerna är större och snedställd nedåt.

Resultaten kan tyda på att standardisering av datamängden troligen är ett viktigt steg i dataförberedelsen och relaterade transformatorer, som t.ex. kvantiltransformatorn, och kanske till och med potenstransformatorn kan erbjuda fördelar om den kombineras med standardisering genom att göra en eller flera indatavariabler mer gaussiska.

Box and Whisker Plot of Classification Accuracy for Different Data Transforms on the Wine Classification Dataset

Vi kan också utforska sekvenser av transformationer för att se om de kan erbjuda ett lyft i prestanda.

Till exempel kan vi kanske tillämpa RFE-funktionsselektion efter standardiseringstransformationen för att se om samma eller bättre resultat kan användas med färre ingångsvariabler (e.g. mindre komplexitet).

Vi kanske också vill se om en potenstransform som föregås av en dataskaleringstransform kan uppnå goda prestanda på datasetet, vilket vi tror att det skulle kunna göra med tanke på kvantiltransformens framgång.

Den uppdaterade funktionen get_pipelines() med sekvenser av transformationer finns nedan.

Det kompletta exemplet är listat nedan.

Den som kör exemplet utvärderar prestandan för varje pipeline och rapporterar medelvärdet och standardavvikelsen för klassificeringsnoggrannheten.

Anmärkningar: Dina resultat kan variera på grund av algoritmens eller utvärderingsförfarandets stokastiska natur, eller skillnader i numerisk precision. Överväg att köra exemplet några gånger och jämför det genomsnittliga resultatet.

I det här fallet kan vi se att standardiseringen med funktionsval ger ett ytterligare lyft i noggrannhet från 98,7 procent till 98,9 procent, även om dataskalning och potenstransform inte ger någon ytterligare fördel jämfört med kvantiltransformen.

1

2

>std: 0.989 (0.022)
>effekt: 0.987 (0.023)

En figur skapas som visar box- och whiskerplottar som sammanfattar fördelningen av klassificeringsnoggrannhetspoängen för varje dataförberedelsesteknik.

Vi kan se att fördelningen av resultaten för båda pipelines av transformationer är kompakt med mycket liten spridning annat än outlier.

Box and Whisker Plot of Classification Accuracy for Different Sequences of Data Transforms on the Wine Classification Dataset

Fördjupad läsning

Det här avsnittet innehåller fler resurser om ämnet om du vill gå djupare.

Böcker

  • Feature Engineering and Selection, 2019.
  • Feature Engineering for Machine Learning, 2018.

APIs

  • sklearn.pipeline.Pipeline API.

Sammanfattning

I den här handledningen har du lärt dig hur du kan använda en metod med rutnätssökning för datapreparering av tabeldata.

Specifikt har du lärt dig:

  • Rutnätssökning är ett alternativt tillvägagångssätt för datapreparering av tabeldata, där omvandlingar prövas som hyperparametrar i modelleringspipeline.
  • Hur man använder rutnätssökningsmetoden för datapreparering för att förbättra modellens prestanda jämfört med en baslinje för ett standardklassificeringsdataset.
  • Hur man använder rutnätssökningssekvenser av dataprepareringsmetoder för att ytterligare förbättra modellens prestanda.

Har du några frågor?
Sätt dina frågor i kommentarerna nedan så ska jag göra mitt bästa för att svara.

Hantera modern datapreparering!

Förbered dina data för maskininlärning på några minuter

…med bara några rader pythonkod

Upptäck hur i min nya Ebook:
Databeredning för maskininlärning

Den innehåller självstudier med full fungerande kod för:
Feature Selection, RFE, datarengöring, datatransformationer, skalning, dimensionalitetsreduktion och mycket mer…

Förmedla moderna tekniker för datapreparering till
dina maskininlärningsprojekt

Se vad som finns inuti

Tweet Share Share Share

Lämna ett svar

Din e-postadress kommer inte publiceras.