Construirea conductelor de învățare automată folosind fulg de zăpadă și Dask
În această postare, vreau să împărtășesc câteva dintre instrumentele pe care le-am explorat recent și să vă arăt cum le folosesc și cum au contribuit la îmbunătățirea eficienței fluxului meu de lucru. Cei doi despre care voi vorbi în special sunt Snowflake și Dask. Două instrumente foarte diferite, dar care se completează bine, mai ales ca parte a ciclului de viață ML.
By Daniel Foley, Data Scientist
Introducere
Recent, am încercat să găsesc modalități mai bune de a-mi îmbunătăți fluxul de lucru în calitate de cercetător de date. Tind să petrec o parte decentă din timpul meu modelând și construind ETL-uri în locul meu de muncă. Acest lucru a însemnat că din ce în ce mai mult trebuie să mă bazez pe instrumente pentru a gestiona în mod fiabil și eficient seturi mari de date. Mi-am dat seama repede că folosirea panda pentru manipularea acestor seturi de date nu este întotdeauna o abordare bună și acest lucru m-a determinat să caut alte alternative.
În această postare, vreau să împărtășesc câteva dintre instrumentele pe care le-am explorat recent și să vă arăt cum le folosesc și cum au contribuit la îmbunătățirea eficienței fluxului meu de lucru. Cei doi despre care voi vorbi în special sunt Snowflake și Dask. Două instrumente foarte diferite, dar care se completează bine, mai ales ca parte a ciclului de viață ML. Speranța mea este că, după ce ați citit această postare, veți înțelege bine ce sunt Snowflake și Dask, cum pot fi utilizate eficient și să puteți porni cu propriile cazuri de utilizare.
Mai precis, vreau să vă arăt cum puteți construi o conductă ETL folosind Snowflake și Python pentru a genera date de antrenament pentru o sarcină de învățare automată. Apoi vreau să vă prezint pe Dask și Norul lui Saturn și vă arată cum puteți profita de procesarea paralelă în cloud pentru a accelera cu adevărat procesul de instruire ML, astfel încât să vă puteți crește productivitatea ca om de știință a datelor.
Construirea ETL-urilor în Snowflake și Python
Înainte de a trece la codificare, mai bine explic pe scurt ce este Snowflake. Aceasta este o întrebare pe care am pus-o recent când echipa mea a decis să înceapă să-l folosească. La un nivel înalt, este un depozit de date în cloud. După ce m-am jucat un timp cu el, mi-am dat seama cât de puternic este. Cred că pentru mine, una dintre cele mai utile caracteristici sunt depozitele virtuale pe care le poți folosi. Un depozit virtual vă oferă acces la aceleași date, dar este complet independent de alte depozite virtuale, astfel încât resursele de calcul nu sunt partajate între echipe. Acest lucru s-a dovedit foarte util, deoarece elimină orice potențial de probleme de performanță cauzate de alți utilizatori care execută interogări pe parcursul zilei. Acest lucru a dus la mai puțină frustrare și timp pierdut în așteptarea rulării interogărilor.
Deoarece vom folosi Snowflake, voi descrie pe scurt cum îl puteți configura și începe să experimentați singur. Trebuie să facem următoarele:
- Creați un cont Snowflake
- Introduceți datele noastre în Snowflake
- Scrieți și testați interogările noastre folosind SQL și interfața de utilizare Snowflake
- Scrieți o clasă Python care poate executa interogările noastre pentru a genera setul nostru de date final pentru modelare
Configurarea unui cont este la fel de ușoară ca și înregistrarea pentru o perioadă de încercare gratuită a acestora . După ce ați făcut acest lucru, puteți descărca CLI-ul snowsql aici. Astfel, adăugarea datelor la Snowflake va fi simplă. După ce urmăm acești pași, putem încerca să ne conectăm la Snowflake folosind acreditările noastre și linia de comandă.
snowsql -a <account_name> -u <user_name>
Puteți găsi numele contului dvs. în adresa URL atunci când vă conectați la interfața de utilizare Snowflake. Ar trebui să arate cam așa: xxxxx.europe-west2.gcp. Ok, să trecem la pasul următor și să introducem datele noastre în Snowflake. Există câțiva pași pe care trebuie să-i urmăm aici și anume:
- Creați depozitul nostru virtual
- Creați o bază de date
- Definiți și creați tabelele noastre
- Creați un tabel de staging pentru fișierele noastre CSV
- Copierea datelor în tabelele noastre
Din fericire, acest lucru nu este prea dificil și putem face acest lucru în întregime folosind CLI-ul snowsql. Pentru acest proiect, voi folosi un set de date mai mic decât mi-aș dori, dar, din păcate, nu pot folosi niciuna dintre datele companiei mele și poate fi destul de dificil să găsesc online seturi mari de date adecvate. Totuși, am găsit câteva date despre tranzacții de la Dunnhumby, care sunt disponibile gratuit pe Kaggle. Doar pentru efort, creez un set de date sintetice mult mai mare folosind aceste date pentru a testa cât de bine face față Dask provocării în comparație cu sklearn.
În primul rând, trebuie să configuram un depozit virtual și o bază de date folosind următoarele comenzi în interfața de utilizare Snowflake.
crea or înlocui warehouse analytics_wh cu
warehouse_size="X-SMALL"
auto_suspend=180
auto_resumă=adevărat
initially_suspended=true;
crea or înlocui Baza de date dunnhumby;
Datele noastre constau din 6 CSV-uri pe care le vom converti în 6 tabele. Nu voi petrece prea mult timp analizând setul de date, deoarece această postare este mai mult despre utilizarea Snowflake și Dask decât despre interpretarea datelor.
Mai jos sunt comenzile pe care le putem folosi pentru a ne crea tabelele. Tot ce va trebui să știți în avans este cu ce coloane și tipuri de date veți lucra.
create or replace table campaign_desc ( description string, campaign number,
start_day number,
end_day number ); create or replace table campaign_table ( description string, Household_key number, campaign number ); create or replace table coupon ( COUPON_UPC number, product_id number, campaign number ); create or replace table coupon_redempt ( household_key number, day number, coupon_upc number, campaign number ); create or replace table transactions ( household_key number, BASKET_ID number, day number, product_id number, quantity number, sales_value number, store_id number, retail_disc decimal, trans_time number, week_no number, coupon_disc decimal, coupon_match_disc decimal ); create or replace table demographic_data ( age_dec string, marital_status_code string, income_desc string, homeowner_desc string, hh_comp_desc string, household_size_desc string, kid_category_desc string, Household_key number);
Acum că avem tabelele create, putem începe să ne gândim cum să introducem date în ele. Pentru aceasta, va trebui să punem în scenă fișierele noastre CSV. Acesta este practic doar un pas intermediar, astfel încât Snowflake poate încărca direct fișierele de pe scena noastră în tabelele noastre. Putem folosi PUT comanda pentru a pune fișiere locale în stadiul nostru și apoi COPIEAZĂ ÎN comandă pentru a instrui Snowflake unde să pună aceste date.
use database dunnhumby; create or replace stage dunnhumby_stage; PUT file://campaigns_table.csv @dunnhumby.public.dunnhumby_stage; PUT file://campaigns_desc.csv @dunnhumby.public.dunnhumby_stage; PUT file://coupon.csv @dunnhumby.public.dunnhumby_stage; PUT file://coupon_d=redempt.csv @dunnhumby.public.dunnhumby_stage; PUT file://transaction_data.csv @dunnhumby.public.dunnhumby_stage; PUT file://demographics.csv @dunnhumby.public.dunnhumby_stage;
Ca o verificare rapidă, puteți rula această comandă pentru a verifica ce este în zona de pregătire.
ls @dunnhumby.public.dunnhumby_stage;
Acum trebuie doar să copiem datele în tabelele noastre folosind interogările de mai jos. Le puteți executa fie în interfața de utilizare Snowflake, fie în linia de comandă după conectarea la Snowflake.
copy into campaign_table from @dunnhumby.public.dunnhumby_stage/campaigns_table.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into campaign_desc from @dunnhumby.public.dunnhumby_stage/campaign_desc.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into coupon from @dunnhumby.public.dunnhumby_stage/coupon.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into coupon_redempt from @dunnhumby.public.dunnhumby_stage/coupon_redempt.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into transactions from @dunnhumby.public.dunnhumby_stage/transaction_data.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into demographic_data from @dunnhumby.public.dunnhumby_stage/demographics.csv.gz file_format = ( type = csv skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’);
Ok grozav, cu ceva noroc avem datele noastre în tabelele noastre prima încercare. Oh, dacă ar fi atât de simplu, tot acest proces mi-a luat câteva încercări pentru a face bine (ai grijă să scrii greșit lucrurile). Să sperăm că poți urma asta și să fii gata de plecare. Ne apropiem de lucrurile interesante, dar pașii de mai sus sunt o parte vitală a procesului, așa că asigurați-vă că înțelegeți fiecare dintre acești pași.
Scrierea pipeline-ului nostru în SQL
În acest pas următor, vom scrie interogările pentru a ne genera ținta, caracteristicile noastre și apoi vom produce un set de date de antrenament. O abordare a creării unui set de date pentru modelare este să citiți aceste date în memorie și să folosiți panda pentru a crea noi caracteristici și a uni toate cadrele de date. Aceasta este de obicei abordarea pe care o vedeți pe Kaggle și în alte tutoriale online. Problema cu aceasta este că nu este foarte eficient, mai ales atunci când lucrați cu seturi de date de dimensiuni rezonabile. Din acest motiv, este o idee mult mai bună să externalizați munca grea către ceva de genul Snowflake, care gestionează foarte bine seturile de date masive și vă va economisi probabil o cantitate imensă de timp. Nu voi petrece mult timp scufundându-mă în specificul setului nostru de date aici, deoarece nu este cu adevărat vital pentru ceea ce încerc să arăt. În general, totuși, ați dori să petreceți o cantitate considerabilă de timp explorând și înțelegând datele dumneavoastră înainte de a începe modelarea. Scopul acestor interogări va fi preprocesarea datelor și crearea unor caracteristici simple pe care le putem folosi ulterior în modelele noastre.
Definiția țintei
Evident, o componentă vitală a învățării automate supravegheate este definirea unei ținte adecvate de prezis. Pentru cazul nostru de utilizare, vom estima pierderea calculând dacă un utilizator face sau nu o altă vizită în termen de două săptămâni după o săptămână limită. Alegerea a 2 săptămâni este destul de arbitrară și va depinde de problema specifică pe care încercăm să o rezolvăm, dar să presupunem că este bine pentru acest proiect. În general, ați dori să vă analizați cu atenție clienții pentru a înțelege distribuția intervalelor dintre vizite pentru a ajunge la o definiție adecvată a abandonului.
Ideea principală aici este că pentru fiecare tabel dorim să avem câte un rând pe cheie_casa care să conțină valori pentru fiecare dintre caracteristicile noastre.
Caracteristicile campaniei
Caracteristici de tranzacție
Mai jos creăm câteva valori simple bazate pe statistici agregate, cum ar fi media, abaterea maximă și standard.
Caracteristici demografice
Acest set de date are o mulțime de date lipsă, așa că am decis să folosesc imputarea aici. Există o mulțime de tehnici pentru datele lipsă, de la eliminarea datelor lipsă până la metode avansate de imputare. Tocmai mi-am făcut viața mai ușoară aici și am înlocuit valorile lipsă cu modul. Nu aș recomanda neapărat această abordare în general, deoarece înțelegerea de ce lipsesc aceste date este cu adevărat importantă pentru a decide cum să le rezolvăm, dar în scopul acestui exemplu, voi merge mai departe și voi adopta abordarea ușoară. Mai întâi calculăm modul pentru fiecare dintre caracteristicile noastre și apoi folosim coalesce pentru a înlocui fiecare rând cu modul dacă lipsesc date.
Date de instruire
În cele din urmă, construim o interogare pentru datele noastre de antrenament prin unirea tabelelor noastre principale și ajungem la un tabel care conține ținta noastră, campania noastră, tranzacțiile și caracteristicile demografice pe care le putem folosi pentru a construi un model.
Ca o scurtă deosebire, pentru cei interesați să afle mai multe despre caracteristicile și nuanțele Snowflake aș recomanda următoarea carte: Cartea de bucate cu fulgi de nea. Am început să citesc această carte și este plină de informații cu adevărat utile despre cum să folosiți Snowflake și intră în mult mai multe detalii decât fac aici.
Cod Python pentru ETL
Ultima piesă de care avem nevoie pentru acest ETL este să scriem un script pentru a-l executa. Acum, acest lucru este într-adevăr necesar doar dacă intenționați să rulați un ETL ca acesta în mod regulat, dar aceasta este o practică bună și face mult mai ușor să rulați ETL atunci când este necesar.
Să discutăm pe scurt principalele componente ale clasei noastre EtlTraining. Clasa noastră primește o singură intrare, care este săptămâna limită. Acest lucru se datorează modului în care datele sunt definite în setul nostru de date, dar, de obicei, acesta ar fi într-un format de dată care corespunde cu data limită pe care dorim să o alegem pentru generarea datelor de antrenament.
Inițializam o listă a interogărilor noastre, astfel încât să le putem parcurge cu ușurință și să le executăm. De asemenea, creăm un dicționar care conține parametrii noștri pe care îi transmitem conexiunii noastre Snowflake. Aici folosim variabile de mediu pe care le-am configurat în Saturn Cloud. Aici este un ghid despre cum să faci asta. Nu este prea dificil să ne conectăm la Snowflake, tot ce trebuie să facem este să folosim conectorul Snowflake și să trecem în dicționarul nostru de acreditări. Implementăm acest lucru în metoda de conectare Snowflake și returnăm această conexiune ca atribut.
Pentru a face aceste interogări un pic mai ușor de rulat, salvez fiecare interogare ca variabilă șir python în fișierul ml_query_pipeline.py. Metoda execute_etl face exact ceea ce scrie pe tablă. Parcurgem fiecare interogare, o formatăm, o executăm și încheiem prin închiderea conexiunii Snowflake.
Pentru a rula acest ETL, putem pur și simplu să tastați comenzile de mai jos în terminal. (unde ml_pipeline este numele scriptului de mai sus.)
python -m ml_pipeline -w 102 -j ‘train’
Pe scurt, probabil că veți dori să rulați un ETL ca acesta la intervale regulate. De exemplu, dacă doriți să faceți predicții zilnice, atunci va trebui să generați un set de date ca acesta în fiecare zi pentru a fi transmis modelului dvs., astfel încât să puteți identifica care dintre clienții dvs. sunt susceptibili de a se retrage. Nu voi intra în detaliu aici, dar în munca mea, folosim Airflow pentru a ne orchestra ETL-urile, așa că aș recomanda să-l verificați dacă sunteți interesat. De fapt, mi-am cumpărat recent o carteConducte de date cu Apache Airflow" ceea ce cred că este grozav și oferă cu adevărat câteva exemple solide și sfaturi despre cum să utilizați fluxul de aer.
Dask și modelare
Acum că ne-am construit canalul de date, putem începe să ne gândim la modelare. Celălalt obiectiv principal pe care îl am pentru această postare este să evidențiez avantajele utilizării Dask ca parte a procesului de dezvoltare ML și să vă arăt cât de ușor este de utilizat.
Pentru această parte a proiectului am folosit și eu Norul lui Saturn care este un instrument foarte frumos pe care l-am întâlnit recent și care ne permite să valorificăm puterea Dask pe un grup de computere din cloud. Principalele avantaje ale utilizării Saturn pentru mine sunt că este foarte ușor să-ți partajezi munca, foarte simplu să-ți extinzi calculul pe măsură ce și când ai nevoie și are o opțiune de nivel gratuit. Dezvoltarea modelelor în general este un caz de utilizare foarte bun pentru Dask, deoarece de obicei dorim să antrenăm o mulțime de modele diferite și să vedem ce funcționează cel mai bine. Cu cât putem face acest lucru mai repede, cu atât mai bine, deoarece avem mai mult timp să ne concentrăm asupra altor aspecte importante ale dezvoltării modelului. Similar cu Snowflake, trebuie doar să vă înscrieți aici și poți să pornești foarte repede o instanță de laborator Jupyter și să începi să experimentezi singur.
Acum, îmi dau seama că în acest moment am menționat Dask de câteva ori, dar niciodată nu am explicat cu adevărat ce este. Așa că permiteți-mi să-mi iau un moment pentru a vă oferi o imagine de ansamblu la un nivel foarte înalt despre Dask și de ce cred că este minunat. Foarte simplu, Dask este o bibliotecă python care profită de calculul paralel pentru a vă permite să procesați și să efectuați operațiuni pe seturi de date foarte mari. Și, cea mai bună parte este că, dacă sunteți deja familiarizat cu Python, atunci Dask ar trebui să fie foarte simplu, deoarece sintaxa este foarte asemănătoare.
Graficul de mai jos evidențiază principalele componente ale Dask.
Sursa: Documentația Dask
Colecțiile ne permit să creăm un grafic al sarcinilor care pot fi apoi executate pe mai multe computere. Unele dintre aceste structuri de date probabil sună destul de familiar, cum ar fi matricele și cadrele de date și sunt similare cu ceea ce ați găsi în python, dar cu unele diferențe importante. De exemplu, vă puteți gândi la un cadru de date Dask ca la o grămadă de cadre de date panda construite astfel încât să ne permită să efectuăm operațiuni în paralel.
Trecând de la colecții avem planificatorul. Odată ce creăm graficul sarcinilor, planificatorul se ocupă de restul pentru noi. Gestionează fluxul de lucru și trimite aceste sarcini fie către o singură mașină, fie le distribuie într-un cluster. Sperăm că asta vă oferă o scurtă prezentare generală a modului în care funcționează Dask. Pentru mai multe informații, vă sugerez să verificați documentaţie sau acest lucru carte. Ambele sunt resurse foarte bune pentru a aprofunda acest subiect.
Cod Python pentru modelare
Când modelez, tind să am un număr mic de algoritmi de acces pe care îi voi încerca întotdeauna mai întâi. În general, acest lucru îmi va oferi o idee bună despre ceea ce ar putea fi potrivit pentru problema specifică pe care o am. Aceste modele sunt Logistic Regression, Random Forest și GradientBoosting. Din experiența mea, atunci când lucrați cu date tabulare, acești algoritmi vă vor oferi de obicei rezultate destul de bune. Mai jos construim o conductă de modelare sklearn folosind aceste 3 modele. Modelele exacte pe care le folosim aici nu sunt cu adevărat importante, deoarece conducta ar trebui să funcționeze pentru orice model de clasificare sklearn, aceasta este doar preferința mea.
Fără alte prelungiri, să ne aruncăm în cod. Din fericire, am externalizat cea mai mare parte a preprocesării noastre către Snowflake, așa că nu trebuie să ne încurcăm prea mult cu datele noastre de antrenament aici, dar vom adăuga câțiva pași suplimentari folosind conductele sklearn.
Primul fragment de cod de mai jos arată conducta atunci când utilizați sklearn. Observați setul nostru de date este un simplu cadru de date panda vechi și pașii noștri de preprocesare sunt toți efectuati folosind metode sklearn. Nu se întâmplă nimic deosebit de ieșit din comun aici. Citim datele noastre din tabelul produs de Snowflake ETL și le transmitem într-o conductă sklearn. Aici se aplică pașii obișnuiți de modelare. Împărțim setul de date în tren și testăm și facem o preprocesare, și anume imputam valorile lipsă folosind mediana, scalam datele și codificăm datele noastre categorice. Sunt un mare fan al conductelor sklearn și, practic, le folosesc ori de câte ori dezvolt modele în zilele noastre, ele facilitează cu adevărat codul curat și concis.
Cum funcționează această conductă pe un set de date cu aproximativ 2 milioane de rânduri? Ei bine, rularea acestui model fără nicio reglare hiperparametrică durează aproximativ 34 de minute. Aaa, cam lent. Vă puteți imagina cât de prohibitiv ar dura acest lucru dacă am dori să facem orice tip de reglare hiperparametrică. Ok, deci nu este ideal, dar haideți să vedem cum face față Dask provocării.
Codul Python Dask ML
Scopul nostru aici este să vedem dacă putem depăși conducta sklearn de mai sus, alertă spoiler, cu siguranță putem. Lucrul tare despre Dask este că bariera de intrare atunci când ești deja familiarizat cu python este destul de scăzută. Putem pune această conductă în funcțiune în Dask cu doar câteva modificări.
Prima modificare pe care probabil o veți observa este că avem niște importuri diferite. Una dintre diferențele cheie dintre această conductă și cea anterioară este că vom folosi un cadru de date Dask în loc de un cadru de date panda pentru a ne antrena modelul. Vă puteți gândi la un cadru de date Dask ca la o grămadă de cadre de date panda în care putem efectua calcule pe fiecare în același timp. Acesta este nucleul paralelismului Dask și este ceea ce va reduce timpul de antrenament pentru această conductă.
Observați că folosim @dask.delayed ca un decorator al nostru încărcare_date_formare funcţie. Acest lucru îl indică pe Dask să paralelizeze această funcție pentru noi.
De asemenea, vom importa câteva metode de preprocesare și pipeline din Dask și, cel mai important, va trebui să importăm SaturnCluster, ceea ce ne va permite să creăm un cluster pentru antrenarea modelelor noastre. O altă diferență cheie cu acest cod este că folosim dask.persist după împărțirea testului nostru de tren. Înainte de acest punct, niciuna dintre funcțiile noastre nu a fost de fapt calculată din cauza evaluării leneșe a lui Dask. Odată ce folosim metoda persist, deși îi spunem lui Dask să trimită datele noastre lucrătorilor și să execute sarcinile pe care le-am creat până în acest moment și să lase aceste obiecte pe cluster.
În cele din urmă, ne antrenăm modelele folosind metoda întârziată. Din nou, acest lucru ne permite să ne creăm conducta într-un mod leneș. Conducta nu este executată până când ajungem la acest cod:
fit_pipelines = dask.compute(*pipelines_)
De data aceasta, ne-a luat doar aproximativ 10 minute să rulăm această conductă exact pe același set de date. Aceasta este o accelerare cu un factor de 3.4, nu prea ponosit. Acum, dacă am dori, am putea accelera acest lucru și mai mult prin mărirea resurselor noastre de calcul prin atingerea unui buton în Saturn.
Implementarea conductei noastre
Am menționat mai devreme că probabil că veți dori să rulați o conductă ca aceasta destul de regulat folosind ceva de genul fluxului de aer. Se întâmplă că, dacă nu îți dorești necazul inițial de a configura totul pentru fluxul de aer, Saturn Cloud oferă o alternativă simplă cu Jobs. Joburile ne permit să împachetăm codul și să-l rulăm la intervale regulate sau după cum este necesar. Tot ce trebuie să faceți este să mergeți la un proiect existent și să faceți clic pe creați un loc de muncă. Odată ce facem asta, ar trebui să arate așa:
Sursa: Saturn
De aici, tot ce trebuie să facem este să ne asigurăm că fișierele noastre python de mai sus sunt în directorul din imagine și că putem introduce comanda noastră python de mai sus
python -m ml_pipeline -w 102 -j 'train'
De asemenea, putem configura un program folosind sintaxa cron pentru a rula ETL-ul zilnic, dacă dorim. Pentru cei interesați, iată un tutorial asta intră în toate aspectele esențiale.
Concluzii și concluzii
Ei bine, am ajuns la finalul proiectului nostru în acest moment. Acum, evident, am omis câteva părți cheie ale ciclului de dezvoltare ML, cum ar fi reglarea hiperparametrului și implementarea modelului nostru, dar poate voi lăsa asta pentru altă zi. Cred că ar trebui să încerci Dask? Nu sunt un expert în niciun fel, dar din ceea ce am văzut până acum, cu siguranță pare cu adevărat util și sunt foarte încântat să experimentez mai mult cu el și să găsesc mai multe oportunități de a-l încorpora în munca mea de zi cu zi ca cercetător de date. Sper că ți s-a părut util acest lucru și poți vedea și tu câteva dintre avantajele Snowflake și Dask și vei începe să experimentezi singur cu ele.
Resurse
- Conducte de date cu Apache Airflow
- Cartea de bucate cu fulgi de nea
- Știința datelor la scară cu Python și Dask
- Curs: SQL pentru știința datelor
Unele dintre celelalte postări ale mele s-ar putea să le găsești interesante
Să construim o conductă de date în flux
Modelarea amestecului gaussian (GMM)
O abordare bayesiană a prognozei serii temporale
Notă: Unele dintre linkurile din această postare sunt link-uri afiliate.
Bio: Daniel Foley este un fost economist devenit Data Scientist care lucrează în industria jocurilor mobile.
Original. Repostat cu permisiunea.
Related:
Sursa: https://www.kdnuggets.com/2021/07/building-machine-learning-pipelines-snowflake-dask.html
- "
- &
- 102
- 2021
- acces
- Cont
- Suplimentar
- Avantaj
- sfat
- Parteneri
- algoritmi
- TOATE
- Amazon
- Apache
- ZONĂ
- în jurul
- Auto
- CEL MAI BUN
- Pic
- construi
- Clădire
- Buchet
- Campanie
- cazuri
- cauzată
- contesta
- Schimbare
- control
- clasificare
- mai aproape
- Cloud
- cod
- Codificare
- component
- Calcula
- Calculatoare
- tehnica de calcul
- Coursera
- Crearea
- scrisori de acreditare
- clienţii care
- de date
- știința datelor
- om de știință de date
- set de date
- depozit de date
- Baza de date
- zi
- afacere
- învățare profundă
- demografic
- detaliu
- dezvolta
- Dezvoltare
- FĂCUT
- Director
- eficiență
- inginerii
- Mediu inconjurator
- experiment
- DESCRIERE
- În cele din urmă
- capăt
- First
- Concentra
- urma
- format
- Gratuit
- Complet
- funcţie
- jocuri
- Industria jocurilor
- General
- bine
- unități de procesare grafică
- mare
- ghida
- aici
- Înalt
- Evidențiați
- Cum
- Cum Pentru a
- HTTPS
- mare
- idee
- identifica
- imagine
- Crește
- industrie
- info
- informații
- probleme de
- IT
- Loc de munca
- Locuri de munca
- alătura
- a sari
- Cheie
- mare
- AFLAȚI
- învăţare
- Nivel
- Bibliotecă
- Linie
- Listă
- încărca
- local
- Lung
- masina de învățare
- Metrici
- milion
- ML
- Mobil
- Jocuri mobile
- model
- muta
- și anume
- Funcții noi
- promoții
- on-line
- Operațiuni
- Opțiune
- Altele
- performanță
- mulțime
- postări
- putere
- Predictii
- Produs
- productivitate
- proiect
- public
- Piton
- Citind
- reduce
- regres
- Resurse
- REST
- REZULTATE
- Alerga
- funcţionare
- Scară
- scalare
- Ştiinţă
- oamenii de stiinta
- serie
- set
- instalare
- Distribuie
- comun
- simplu
- mic
- So
- REZOLVAREA
- viteză
- petrece
- Cheltuire
- Rotire
- împărţi
- SQL
- Etapă
- Începe
- început
- statistică
- Istorii
- de streaming
- Ţintă
- test
- Gândire
- timp
- top
- atingeţi
- Pregătire
- tranzacție
- Tranzacții
- proces
- tutoriale
- ui
- us
- utilizatorii
- Virtual
- Depozit
- săptămână
- Ce este
- în
- Apartamente
- muncitorii
- flux de lucru
- fabrică
- scris
- X
- ani