Fare scienza dei dati con Julia e CRRao
introduzione
La lingua è un metodo di comunicazione tra esseri umani. Anche gli animali comunicano in un loro linguaggio ingenuo. Gli scimpanzé possono imparare un linguaggio dei segni ingenuo. Il linguaggio di programmazione è un metodo di comunicazione tra uomo e computer. Se scriviamo qualcosa in inglese, i nostri colleghi lo capiranno. Se scriviamo qualcosa in Python, qual è la probabilità che altri data scientist lo capiscano immediatamente?
Lost in Translation: equazione matematica al codice R o Python
Nella Figura 1, a sinistra, descriviamo la regressione lineare bayesiana con coniugato precedente. Nel pannello di destra, implementiamo lo stesso modello usando R. Chiaramente, c'è uno scollamento tra le equazioni matematiche e il codice di programmazione . Spesso questo deve essere chiarito tra gli aspiranti data scientist. Riduce la trasparenza all'interno di un'organizzazione, divisione o gruppo. Se i colleghi data scientist non capiscono cosa stiamo facendo, la trasparenza è un grosso problema. La mancanza di spiegabilità nel nostro codice di programmazione porta a una mancanza di spiegabilità in AI e ML .
Sarebbe fantastico se potessimo scrivere il linguaggio di programmazione nel modo in cui scriviamo le equazioni matematiche. — Prof Alan Edelman, MIT, co-fondatore di Julia
Julia è una lingua di alto livello
Uno dei vantaggi significativi del linguaggio di programmazione Julia è l'espressività. Possiamo scrivere il programma nel modo in cui scriviamo le equazioni matematiche. Julia è una lingua di alto livello.
La Figura 2 presenta un'istantanea di come possiamo scrivere la programmazione bayesiana in Julia utilizzando il pacchetto Turing. Julia è un linguaggio di alto livello con un'elevata spiegabilità.
E le prestazioni?
Sappiamo che C, Fortran e Java sono linguaggi ad alte prestazioni ma di basso livello. D'altra parte, i linguaggi ML come R, Python, Matlab, SAS e Stata sono linguaggi di alto livello ma sacrificano le prestazioni. Queste lingue di alto livello soffrono di quello che viene chiamato un problema di due lingue . Il compilatore di questi linguaggi è scritto in linguaggi di basso livello come C o Fortran. Tuttavia, il compilatore di Julia è scritto in Julia stessa. Questo rende Julia veloce quanto C.
Ma come può Julia ottenere prestazioni mentre è un linguaggio di alto livello?
Nella Tabella 1, presentiamo l'anno in cui è stata rilasciata la versione 1.0 in diverse lingue. Essendo il più recente, Julia sfrutta molte grandi idee e lo sviluppo della teoria dei compilatori e dei linguaggi di programmazione. Ad esempio, un'implementazione LLVM di Julia lo rende competitivo rispetto ad altri linguaggi ML.
Usi notevoli di Julia
Aziende come Amazon, Apple, AstraZeneca, Capital One, Google, IBM, Intel, JPMorgan, Microsoft, Moderna, Pfizer e United Airlines hanno adottato Julia nella loro pratica di data science.
Tra le diverse agenzie governative, la NASA, la Fed Reserve degli Stati Uniti e l'Instituto Nacional de Pesquisas Espaciais INPE ( Agenzia spaziale brasiliana) hanno adottato Julia nella loro pratica di data science.
CRRao: singola API per diversi modelli di data science
Al Chennai Mathematical Institute (#CMI), stiamo costruendo un'API coerente per la scienza dei dati in Julia. Molti modelli statistici possono essere stimati in Julia e la diversità dell'ecosistema del modello è in costante miglioramento. Traendo ispirazione dal pacchetto Zelig nel mondo R, il pacchetto CRRao.jl fornisce un'API semplice e coerente all'utente finale. L'utente finale deve quindi affrontare il costo fisso per imparare a farlo una volta. Successivamente, diventa disponibile un'ampia gamma di modelli e funzionalità associate con una sintassi coerente. Speriamo che altri che sviluppano modelli statistici costruiscano all'interno di questo quadro.
Regressione lineare semplice in CRRao
Ecco un esempio di stima della regressione lineare. Supponiamo di considerare il set di dati mtcars e di voler modellare le miglia per gallone (MPG) in funzione della potenza (HP), del peso (WT) e della marcia.
MPG = β0 + β1 HP + β2 WT + β3 Gear + ϵ
julia> using CRRao, RDatasets, StatsModels
julia> df = dataset("datasets", "mtcars")
julia> model = fit(@formula(MPG ~ HP + WT+Gear), df, LinearRegression())
────────────────────────────────────────────────────────────────────────────
Coef. Std. Error t Pr(>|t|) Lower 95% Upper 95%
────────────────────────────────────────────────────────────────────────────
(Intercept) 32.0137 4.63226 6.91 <1e-06 22.5249 41.5024
HP -0.0367861 0.00989146 -3.72 0.0009 -0.0570478 -0.0165243
WT -3.19781 0.846546 -3.78 0.0008 -4.93188 -1.46374
Gear 1.01998 0.851408 1.20 0.2410 -0.72405 2.76401
────────────────────────────────────────────────────────────────────────────
Regressione lineare bayesiana con HorseShoe Prior in CRRao
Ora, se vuoi adattare la stessa regressione lineare con l'esotico HorseShoe precedente, tutto ciò che devi fare è menzionare il nome del precedente.
julia> model = fit(@formula(MPG ~ HP + WT+Gear)
, df, LinearRegression(),Prior_HorseShoe())
┌ Info: Found initial step size
└ ϵ = 0.0001953125
Chains MCMC chain (1000×22×1 Array{Float64, 3}):
Iterations = 501:1:1500
Number of chains = 1
Samples per chain = 1000
Wall duration = 9.15 seconds
Compute duration = 9.15 seconds
parameters = τ, λ[1], λ[2], λ[3], λ[4], σ, β[1], β[2], β[3], β[4]
internals = lp, n_steps, is_accept, acceptance_rate, log_density
, hamiltonian_energy, hamiltonian_energy_error
, max_hamiltonian_energy_error, tree_depth
, numerical_error, step_size, nom_step_size
Summary Statistics
parameters mean std naive_se mcse ess rhat ess_per_sec
Symbol Float64 Float64 Float64 Float64 Float64 Float64 Float64
τ 1.4342 1.3748 0.0435 0.0626 521.0620 0.9992 56.9342
λ[1] 19.5727 36.8676 1.1659 1.7242 626.6273 0.9995 68.4689
λ[2] 0.3241 0.6165 0.0195 0.0245 773.1262 0.9991 84.4762
λ[3] 2.1879 3.1288 0.0989 0.1101 573.5113 0.9994 62.6651
λ[4] 0.9647 1.2518 0.0396 0.0559 477.7948 1.0016 52.2066
σ 2.6273 0.3611 0.0114 0.0154 668.7569 0.9990 73.0722
β[1] 31.5028 4.9490 0.1565 0.2623 309.1042 0.9994 33.7745
β[2] -0.0379 0.0108 0.0003 0.0004 478.5572 0.9995 52.2899
β[3] -2.9850 0.9258 0.0293 0.0414 349.4895 0.9990 38.1872
β[4] 1.0140 0.8862 0.0280 0.0475 316.6477 0.9991 34.5987
Quantiles
parameters 2.5% 25.0% 50.0% 75.0% 97.5%
Symbol Float64 Float64 Float64 Float64 Float64
τ 0.2261 0.6297 1.0865 1.7427 4.5157
λ[1] 1.6256 5.3752 10.1049 21.2517 84.8839
λ[2] 0.0069 0.0422 0.1274 0.3509 1.7675
λ[3] 0.2636 0.7291 1.2371 2.3385 10.3098
λ[4] 0.0375 0.2801 0.6119 1.1689 4.1279
σ 2.0324 2.3752 2.5861 2.8356 3.4170
β[1] 21.1539 28.2088 31.9138 35.2521 40.1136
β[2] -0.0583 -0.0454 -0.0380 -0.0307 -0.0172
β[3] -4.5964 -3.6495 -3.0264 -2.3575 -1.1432
β[4] -0.3794 0.3237 0.9159 1.6376 2.9041
Capacità presenti
Nella versione 0.1.0, abbiamo implementato quattro modelli di regressione:
- Regressione lineare
- Regressione logistica (con quattro funzioni di collegamento)
- Regressione di Poisson
- Regressione binomiale negativa
- Gauss
- Cresta
- Laplace
- Cauchy
- T-Distribuito
- Ferro di cavallo
Capacità future
Stiamo considerando di integrare la seguente classe di modelli nel CRRao.jl
- Modelli a effetti misti
- Regressione del processo gaussiano
- Classificazione del processo gaussiano
- Serie storica del processo gaussiano
- Analisi discriminante lineare
- Modelli bayesiani gerarchici
- Per favore usa CRRao e dicci cosa non va bene.
- Abbiamo sfruttato le funzionalità di Julia per rendere conveniente la creazione di funzionalità aggiuntive all'interno di CRRao e per consentire a più sviluppatori di creare nuovi modelli.
- Vogliamo trasformare CRRao in un approccio semplice e coerente al flusso di lavoro di modellazione statistica. Per favore aiutaci a pianificare e costruire questo.
- In qualità di sviluppatore, puoi iniziare a contribuire aggiungendo le funzionalità richieste nella sezione milestone del repository.
- Sidhant Choudhury , CMI
- Sourish Das , CMI
- Mousum Dutta , Fondatore MSA Labs, Visiting Faculty CMI
- Shouvik Gosh , CMI
- Ayush Patnaik , XKDR
- Susan Thomas , XKDR
- Ajay Shah, XKDR
Il progetto CRRao è finanziato dal JuliaLab del MIT.

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































