Data Science in C (o C ++)


40

Sono un Rprogrammatore di lingue. Sono anche nel gruppo di persone che sono considerate Data Scientist ma che provengono da discipline accademiche diverse dalla CS.

Questo funziona bene nel mio ruolo di Data Scientist, tuttavia, iniziando la mia carriera Re avendo solo una conoscenza di base di altri linguaggi di scripting / web, mi sono sentito in qualche modo inadeguato in 2 aree chiave:

  1. Mancanza di una solida conoscenza della teoria della programmazione.
  2. Mancanza di un livello competitivo di competenza in linguaggi più veloci e ampiamente utilizzati come C, C++e Java, che potrebbero essere utilizzati per aumentare la velocità della pipeline e dei calcoli dei Big Data, nonché per creare prodotti DS / dati che possono essere più rapidamente sviluppati in modo rapido script back-end o applicazioni autonome.

La soluzione è semplice: vai alla conoscenza della programmazione, che è quello che ho fatto iscrivendomi ad alcune lezioni (attualmente in programmazione C).

Tuttavia, ora che sto iniziando a risolvere i problemi n. 1 e n. 2 sopra, mi sono lasciato chiedermi " Quanto sono praticabili le lingue Ce C++per Data Science? ".

Ad esempio, posso spostare i dati molto rapidamente e interagire bene con gli utenti, ma per quanto riguarda la regressione avanzata, l'apprendimento automatico, l'estrazione del testo e altre operazioni statistiche più avanzate?

Così. può Cfare il lavoro: quali strumenti sono disponibili per statistiche avanzate, ML, AI e altre aree di Data Science? O devo perdere gran parte dell'efficienza ottenuta programmando Cinvocando Rscript o altre lingue?

La migliore risorsa che ho trovato finora in C è una libreria chiamata Shark , che offre C/ C++la possibilità di usare Support Vector Machines, regressione lineare (non lineare e altre regressioni avanzate come probit multinomiale, ecc.) E una lista di altre (grandi ma) funzioni statistiche.


5
Questa domanda sembra essere basata principalmente sull'opinione pubblica. Ti preghiamo di considerare di riformulare. Forse chiedi quali tipi di strumenti di data science sono disponibili per C / C ++ o quali tipi di applicazioni usano questi linguaggi.
sheldonkreger,

1
@sheldonkreger Questo è ciò che chiedo, lo chiarirò più chiaramente, grazie
Hack-R

1
Ho usato Waffles (C ++) per incorporare l'apprendimento automatico nei motori C ++ esistenti.
Pete,

@Pete se riesci a incorporarlo in una risposta, è probabile che lo segnerò come soluzione
Hack-R

1
Meta toolkit è disponibile in C ++: meta-toolkit.github.io/meta . C'è un corso su Coursera che lo utilizza, è ancora nella prima settimana, quindi potresti voler dare un'occhiata. Il corso si chiama "Recupero testo e motori di ricerca".
LauriK,

Risposte:


35

O devo perdere gran parte dell'efficienza ottenuta programmando in C invocando script R o altre lingue?

Fai il contrario: impara C / C ++ a scrivere estensioni R. Usa C / C ++ solo per le sezioni critiche in termini di prestazioni dei tuoi nuovi algoritmi, usa R per creare analisi, importare dati, creare grafici, ecc.

Se vuoi andare oltre R, ti consiglio di imparare Python. Ci sono molte librerie disponibili come scikit-learn per algoritmi di machine learning o PyBrain per la costruzione di reti neurali ecc. (E usa pylab / matplotlib per la stampa e notebook iPython per sviluppare le tue analisi). Ancora una volta, C / C ++ è utile per implementare algoritmi time-critical come estensioni di Python.


1
Grazie Andre. Uso molto Pybrain; per me Python è una via di mezzo tra R e C, ma volevo ancora imparare C sia per la velocità che per un'applicazione più ampia del codice. Ho scelto questa come soluzione perché non avevo pensato di usare C / C ++ per scrivere le estensioni R, che è un'idea davvero meravigliosa che farò assolutamente. Grazie!!
Hack-R

1
Secondo l'idea di imparare Python. Lavoro con set di dati di grandi dimensioni e data scientist che utilizzano R per analizzare tali set di dati. Anche se ho imparato la C in tenera età, Python è l'unica lingua che mi sta davvero dando valore come programmatore e aiutando questi data scientist. Pertanto, cerca di complimentarmi con il team, non con te stesso.
Glen Swan,

1
allo stesso modo python viene velocizzato scrivendo in cython (di nuovo sostanzialmente C). Devo dire che devo ancora usarlo da solo. C'è molto poco che non si può fare usando le librerie esistenti (es. Scikit-learn, panda in python [che sono scritte in cython quindi non è necessario!]).
seanv507,

Alcune altre utili librerie di python includono: panda, numpy, scipy ecc. Aggiungendo questo a supporto dell'apprendimento del pitone :)
Shagun Sodhani,

Questo è perfetto. Vorrei notare che se non si dispone di un background CS, la possibilità di scrivere codice in modo più efficiente rispetto alle funzioni sottostanti per Python o pacchetti per R è abbastanza remota. Ho programmato in C ++ per 13 anni e penso ancora che ci siano aspetti della gestione della memoria e dell'ottimizzazione delle prestazioni che non ho fatto bene. Inoltre, python & R hanno scienziati informatici molto intelligenti che ottimizzano i problemi di distribuzione, quindi i linguaggi C saranno davvero relegati in sistemi a bassa latenza estrema.
jagartner,

10

Come ha detto Andre Holzner, estendere R con l'estensione C / C ++ è un ottimo modo per sfruttare il meglio di entrambe le parti. Inoltre puoi provare l'inverso, lavorando con C ++ e chiamando occasionalmente la funzione di R con il pacchetto RInside o R. Qui puoi scoprire come

http://cran.r-project.org/web/packages/RInside/index.html http://dirk.eddelbuettel.com/code/rinside.html

Una volta che lavori in C ++ hai molte librerie, molte delle quali costruite per problemi specifici, altre più generali

http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html

http://mlpack.org/


9

Concordo sul fatto che l'attuale tendenza sia quella di utilizzare Python / R e di associarlo ad alcune estensioni C / C ++ per compiti computazionalmente costosi.

Tuttavia, se vuoi rimanere in C / C ++, potresti dare un'occhiata a Dlib :

Dlib è una libreria C ++ multipiattaforma per uso generale progettata utilizzando la programmazione del contratto e le moderne tecniche C ++. È un software open source e concesso in licenza in base alla Licenza software Boost.

inserisci qui la descrizione dell'immagine


Un'altra risposta molto utile. Sai se ci è consentito riprodurre liberamente quell'immagine (nel caso in cui volessi inserirla in una presentazione o blog, ecc.)? Inoltre, quando dice cose come "> 20k campioni" mi chiedo se significhi davvero "campioni" o "osservazioni nel tuo campione"?
Hack-R,

2
Sono l'autore dlib. Sentiti libero di pubblicare quell'immagine dove vuoi :). Inoltre,> 20k campioni significa che hai 20k vettori o altro. Quante variabili ci sono in ciascun campione è un problema separato.
Davis King,

@ Hack-R "Campione" è uno di quei termini sovraccarichi nelle statistiche / apprendimento automatico dove a volte significa un insieme di istanze tratte da una popolazione (come in "dimensione del campione", "media del campione", ecc.), E talvolta indica le singole istanze (come in "addestrato un classificatore su campioni 10K").
Tim Goodman,

6

Secondo me, idealmente, per essere un professionista più completo , sarebbe bello conoscere almeno un linguaggio di programmazione per i paradigmi di programmazione più popolari ( procedurale , orientato agli oggetti , funzionale ). Certamente, considero R e Python come i due linguaggi di programmazione e gli ambienti più popolari per la scienza dei dati e, quindi, i principali strumenti di scienza dei dati.

Julia è impressionante sotto certi aspetti, ma cerca di mettersi al passo con quei due e di affermarsi come uno dei principali strumenti di data science. Tuttavia, non vedo questo accade in qualunque momento presto, semplicemente a causa di R / Python 's popolarità , molto grandi comunità così come enormi ecosistemi di esistente e di nuova concezione pacchetti / librerie , che copre una vasta gamma di domini / campi di studia.

Detto questo, molti pacchetti e librerie, focalizzati sulla scienza dei dati, aree ML e AI, sono implementati e / o forniscono API in lingue diverse da R o Python (per la prova, vedere questo elenco curato e questo elenco curato , entrambi i quali sono eccellenti e danno una solida prospettiva sulla varietà nel campo). Ciò è particolarmente vero per software orientato alle prestazioni o specializzato . Per quel software, ho visto progetti con implementazione e / o API principalmente in Java, C e C ++ (Java è particolarmente popolare nel segmento dei big data della scienza dei dati - grazie alla sua vicinanza a Hadoop e al suo ecosistema - e alla PNLsegmento), ma sono disponibili altre opzioni, sebbene in misura molto più limitata, basata sul dominio. Nessuna di queste lingue è una perdita di tempo, tuttavia è necessario dare la priorità alla padronanza di alcune o tutte con la propria situazione lavorativa, progetti e interessi. Quindi, per rispondere alla tua domanda sulla fattibilità di C / C ++ (e Java), direi che sono tutti fattibili , tuttavia non come strumenti di scienza dei dati primari , ma come secondari .

Rispondendo alle tue domande su 1) C come potenziale strumento di data science e 2) sulla sua efficienza , direi che: 1) mentre è possibile usare C per data science, sconsiglio di farlo, perché avresti un difficoltà a trovare le librerie corrispondenti o, ancor più, a cercare di implementare gli algoritmi corrispondenti da soli; 2) non dovresti preoccuparti dell'efficienza, poiché molti segmenti di codice critici per le prestazioni sono implementati in linguaggi di basso livello come C, inoltre, ci sono opzioni per interfacciare linguaggi di data science con, per esempio, C (ad esempio, Rcpppacchetto per integrazione R con C / C ++: http://dirk.eddelbuettel.com/code/rcpp.html). Ciò si aggiunge agli approcci più semplici, ma spesso piuttosto efficaci, alle prestazioni, come l'uso coerente della vettorializzazione in R, nonché l'utilizzo di vari framework, pacchetti e librerie di programmazione parallele. Per esempi di ecosistemi R, vedere Task View CRAN "Elaborazione parallela ad alte prestazioni con R" .

Parlando di scienza dei dati , penso che abbia molto senso menzionare l'importanza dell'approccio alla ricerca riproducibile , nonché la disponibilità di vari strumenti , supportando questo concetto (per maggiori dettagli, vedere la mia risposta pertinente ). Spero che la mia risposta sia utile.


5

R è uno degli strumenti chiave per i data scientist, qualunque cosa tu faccia non smettere di usarlo.

Ora parliamo di C, C ++ o persino Java. Sono buone lingue popolari. Se ne hai bisogno o ne avrai bisogno, dipende dal tipo di lavoro o dai progetti che hai. Per esperienza personale, ci sono così tanti strumenti là fuori per lo scienziato dei dati che sentirai sempre che devi costantemente imparare.

Puoi aggiungere Python o Matlab alle cose da imparare se vuoi e continuare ad aggiungere. Il modo migliore per imparare è affrontare un progetto di lavoro usando altri strumenti con i quali non ti senti a tuo agio. Se fossi in te, imparerei Python prima di C. È più usato nella comunità di C. Ma imparare C non è una perdita di tempo.


So cosa intendi per il numero schiacciante di strumenti! Dico al mio stagista di non essere distratto e di concentrarmi solo su 1 o 2 cose, ma è difficile seguire il mio consiglio.
Hack-R,

5

Come data scientist gli altri linguaggi (C ++ / Java) sono utili quando è necessario incorporare l'apprendimento automatico in un motore di produzione esistente.

Waffles è sia una libreria di classi C ++ ben mantenuta sia un pacchetto di analisi della riga di comando. Ha un apprendimento supervisionato e senza supervisione, tonnellate di strumenti di manipolazione dei dati, strumenti di dati sparsi e altre cose come l'elaborazione audio. Poiché è anche una libreria di classi, puoi estenderla di cui hai bisogno. Anche se non sei tu a sviluppare il motore C ++ (è probabile che non lo sarai), questo ti permetterà di prototipare, testare e consegnare qualcosa agli sviluppatori.

Ancora più importante, credo che la mia conoscenza di C ++ e Java mi aiuti davvero a capire come funzionano Python e R. Qualsiasi lingua viene utilizzata correttamente solo quando capisci qualcosa di ciò che sta accadendo sotto. Imparando le differenze tra le lingue puoi imparare a sfruttare i punti di forza della tua lingua principale.

Aggiornare

Per applicazioni commerciali con set di dati di grandi dimensioni, Apache Spark - MLLib è importante. Qui puoi usare Scala, Java o Python.


2

Mi piacerebbe capire perché avresti bisogno di un'altra lingua (a parte Python) se il tuo obiettivo è "ma che dire di regressione avanzata, Machine Learning, mining di testo e altre operazioni statistiche più avanzate".
Per quel tipo di cose, C è una perdita di tempo. È un buon strumento da avere ma negli ultimi 20 anni da quando è uscito Java, raramente ho codificato C.
Se preferisci il lato di programmazione funzionale di R, impara Scala prima di entrare in troppe cattive abitudini procedurali codificando con C .
Infine imparano ad utilizzare le librerie di Hadley Wickham - che ti risparmiare un sacco di tempo a fare la manipolazione dei dati.


Perché linguaggi come R e Python sono molto lenti / inefficienti rispetto a linguaggi come C. Pertanto, quando si ha a che fare con molti dati e calcoli, se si può fare qualcosa in C è più veloce che se si può farlo in R. Io amo e uso I pacchetti di Hadley però!
Hack-R


1

Non sono sicuro che sia già stato menzionato, ma esiste anche wowbit di Vowpal ma potrebbe essere specifico solo per alcuni tipi di problemi.


1
Sembra interessante. Ho solo dato un'occhiata al link, ma i tipi di modelli citati sarebbero stati molto utili. È una normale libreria C che puoi usare in un programma? Dovrò indagare ulteriormente.
Hack-R,

0

Dai un'occhiata a Intel DAAL che è in corso. È altamente ottimizzato per l'architettura della CPU Intel e supporta i calcoli distribuiti.


0

Soluzioni scalabili di machine learning per Big Data:

Aggiungerò i miei $ 0,02 perché c'è un'area chiave che sembra non essere stata affrontata in tutti i post precedenti: l'apprendimento automatico sui big data !

Per i big data, la scalabilità è la chiave e R è insufficiente. Inoltre, linguaggi come Python e R sono utili solo per l'interfacciamento con soluzioni scalabili che di solito sono scritte in altre lingue. Faccio questa distinzione non perché voglio denigrare coloro che li usano, ma solo perché è così importante per i membri della comunità della scienza dei dati capire che aspetto hanno le soluzioni di apprendimento automatico realmente scalabili.

Faccio la maggior parte del mio lavoro con big data su cluster di memoria distribuita . Cioè, non uso solo una macchina a 16 core (4 processori quad core su una singola scheda madre che condivide la memoria di quella scheda madre), utilizzo un piccolo cluster di 64 macchine a 16 core. I requisiti sono molto diversi per questi cluster di memoria distribuita rispetto agli ambienti di memoria condivisa e in molti casi l'apprendimento automatico dei big data richiede soluzioni scalabili all'interno di ambienti di memoria distribuita.

Utilizziamo anche C e C ++ ovunque all'interno di un prodotto di database proprietario. Tutte le nostre cose di alto livello sono gestite in C ++ e MPI, ma le cose di basso livello che toccano i dati sono tutte lunghe e matrici di caratteri in stile C per mantenere il prodotto molto velocemente. La comodità delle stringhe standard non vale semplicemente il costo computazionale.

Non ci sono molte librerie C ++ disponibili che offrono capacità distribuite e scalabili di machine learning - MLPACK .

Tuttavia, ci sono altre soluzioni scalabili con le API:

Apache Spark ha una libreria di apprendimento automatico scalabile chiamata MLib con cui puoi interfacciarti.

Anche Tensorflow ora ha distribuito tensorflow e ha un API C ++ .

Spero che sia di aiuto!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.