Ich bin ein R
Sprachprogrammierer. Ich gehöre auch zu der Gruppe von Leuten, die als Data Scientists gelten, aber aus anderen akademischen Disziplinen als CS stammen.
Dies funktioniert in meiner Rolle als Data Scientist sehr gut. Als ich meine Karriere in R
anderen Skriptsprachen / Web-Sprachen begann und nur Grundkenntnisse in diesen hatte, fühlte ich mich in zwei Schlüsselbereichen etwas unzureichend:
- Mangel an soliden Kenntnissen der Programmiertheorie.
- Der Mangel an einem wettbewerbsfähigen Niveau von Fähigkeiten in schnellen und verbreiteten Sprachen wie
C
,C++
undJava
, die verwendet werden, um die Geschwindigkeit der Pipeline und Big Data Berechnungen zu erhöhen sowie DS / Daten Produkte zu schaffen , die leichter zu schnell entwickelt werden können Back-End-Skripte oder eigenständige Anwendungen.
Die Lösung ist natürlich einfach - lernen Sie etwas über das Programmieren, was ich getan habe, indem ich mich in einigen Klassen eingeschrieben habe (derzeit C-Programmierung).
Nun, da ich mich jedoch mit den Problemen 1 und 2 befasse, frage ich mich: " Wie lebensfähig sind Sprachen wie C
und C++
für Data Science? ".
Zum Beispiel kann ich Daten sehr schnell verschieben und problemlos mit Benutzern interagieren, aber was ist mit fortgeschrittener Regression, maschinellem Lernen, Text Mining und anderen fortgeschrittenen statistischen Operationen?
Damit. kann C
die Arbeit erledigen - welche Tools stehen für fortgeschrittene Statistik, ML, AI und andere Bereiche der Datenwissenschaft zur Verfügung? Oder muss ich den größten Teil der Effizienz verlieren, die beim Programmieren C
durch Aufrufen von R
Skripten oder anderen Sprachen erzielt wird?
Die beste Ressource , die ich bisher in C gefunden habe , ist eine Bibliothek namens Shark , die gibt C
/ C++
die Fähigkeit , Support Vector Machines zu verwenden, die lineare Regression (nicht nicht-lineare und andere erweiterte Regression wie multinomial Probit, usw.) und eine Auswahlliste von anderen (großartige, aber) statistische Funktionen.
Antworten:
Machen Sie das Gegenteil: Lernen Sie C / C ++, um R-Erweiterungen zu schreiben. Verwenden Sie C / C ++ nur für die leistungskritischen Bereiche Ihrer neuen Algorithmen. Verwenden Sie R, um Ihre Analyse zu erstellen, Daten zu importieren, Diagramme zu erstellen usw.
Wenn Sie über R hinausgehen möchten, würde ich empfehlen, Python zu lernen. Es stehen viele Bibliotheken zur Verfügung, z. B. Scikit-Learn für Algorithmen zum maschinellen Lernen oder PyBrain zum Erstellen neuronaler Netze usw. (und verwenden Sie pylab / matplotlib zum Plotten und iPython-Notebooks zum Entwickeln Ihrer Analysen). Auch hier ist C / C ++ nützlich, um zeitkritische Algorithmen als Python-Erweiterungen zu implementieren.
quelle
Wie Andre Holzner sagte, ist die Erweiterung von R um C / C ++ eine sehr gute Möglichkeit, das Beste von beiden Seiten zu nutzen. Sie können auch die inverse, mit C ++ arbeitende und gelegentlich aufrufende Funktion von R mit dem RInside-Paket o R ausprobieren. Hier finden Sie, wie
http://cran.r-project.org/web/packages/RInside/index.html http://dirk.eddelbuettel.com/code/rinside.html
Sobald Sie in C ++ arbeiten, haben Sie viele Bibliotheken, von denen viele für bestimmte Probleme entwickelt wurden, andere allgemeiner
http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html
http://mlpack.org/
quelle
Ich bin damit einverstanden, dass der aktuelle Trend darin besteht, Python / R zu verwenden und es für rechenintensive Aufgaben an einige C / C ++ - Erweiterungen zu binden.
Wenn Sie jedoch in C / C ++ bleiben möchten, sollten Sie sich Dlib ansehen :
quelle
Meiner Meinung nach wäre es ideal, um ein besserer Fachmann zu sein, mindestens eine Programmiersprache für die gängigsten Programmierparadigmen ( prozedural , objektorientiert , funktional ) zu kennen. Sicherlich betrachte ich R und Python als die beiden beliebtesten Programmiersprachen und -umgebungen für Data Science und daher als primäre Data Science-Tools.
Julia ist in gewisser Hinsicht beeindruckend, aber sie versucht, diese beiden aufzuholen und sich als wichtiges datenwissenschaftliches Werkzeug zu etablieren. Aber ich sehe nicht , dies in absehbarer Zeit geschieht, einfach aufgrund R / Python ‚s Beliebtheit , sehr große Gemeinden sowie enorme Ökosysteme von bestehenden und neu entwickelten Komponenten / Bibliotheken und deckt einen sehr weiten Bereich von Domains / Felder Studie.
Allerdings sind viele Pakete und Bibliotheken mit Schwerpunkt auf Data Science, ML und AI implementiert und / oder bieten APIs in anderen Sprachen als R oder Python an (zum Beweis siehe diese kuratierte Liste und diese kuratierte Liste , beide sind hervorragend und geben einen soliden Überblick über die Vielfalt auf dem Gebiet). Dies gilt insbesondere für leistungsorientierte oder spezialisierte Software. Für diese Software habe ich Projekte mit Implementierungen und / oder APIs gesehen, hauptsächlich in Java, C und C ++ (Java ist aufgrund seiner Nähe zu Hadoop und seinem Ökosystem im Big-Data- Segment der Datenwissenschaft besonders beliebt - und im NLPSegment), aber es stehen andere Optionen zur Verfügung, wenn auch in viel geringerem Umfang domänenbasiert. Keine dieser Sprachen ist Zeitverschwendung, Sie müssen jedoch die Beherrschung einiger oder aller Sprachen anhand Ihrer aktuellen Arbeitssituation, Ihrer Projekte und Interessen priorisieren . Um Ihre Frage zur Lebensfähigkeit von C / C ++ (und Java) zu beantworten, würde ich sagen, dass sie alle lebensfähig sind , jedoch nicht als primäres datenwissenschaftliches Tool, sondern als sekundäres .
Beantworten Sie Ihre Fragen zu 1) C als potenzielles Data-Science-Tool und 2) seiner Effizienz , so würde ich Folgendes sagen: 1) Es ist zwar möglich, C für Data Science zu verwenden, ich würde jedoch davon abraten, da Sie ein sehr effizientes Tool hätten Es ist schwierig, entsprechende Bibliotheken zu finden, oder, noch mehr, selbst zu versuchen, entsprechende Algorithmen zu implementieren. 2) Sie sollten sich keine Gedanken über die Effizienz machen, da viele leistungskritische Codesegmente in einfachen Sprachen wie C implementiert sind. Außerdem gibt es Optionen, um gängige datenwissenschaftliche Sprachen mit C zu verbinden (z. B.
Rcpp
package for) Integration R mit C / C ++: http://dirk.eddelbuettel.com/code/rcpp.html). Dies kommt zu einfacheren, aber oftmals sehr effektiven Leistungsansätzen wie der konsequenten Verwendung der Vektorisierung in R sowie der Verwendung verschiedener paralleler Programmierframeworks, -pakete und -bibliotheken hinzu. Beispiele für R ecosysteme finden Sie in der CRAN-Task-Ansicht "Hochleistungsfähiges und paralleles Rechnen mit R" .In Bezug auf die Datenwissenschaft erscheint es mir sehr sinnvoll, die Wichtigkeit eines reproduzierbaren Forschungsansatzes sowie die Verfügbarkeit verschiedener Tools zu erwähnen , die dieses Konzept unterstützen (für weitere Einzelheiten siehe meine relevante Antwort ). Ich hoffe, dass meine Antwort hilfreich ist.
quelle
R ist eines der wichtigsten Tools für Data Scientist. Was auch immer Sie tun, hören Sie nicht auf, es zu verwenden.
Sprechen Sie jetzt über C, C ++ oder sogar Java. Sie sind gute Volkssprachen. Ob Sie sie brauchen oder brauchen werden, hängt von der Art des Jobs oder den Projekten ab, die Sie haben. Aus eigener Erfahrung gibt es so viele Tools für Data Scientists, dass Sie immer das Gefühl haben, ständig lernen zu müssen.
Sie können Python oder Matlab zu den Lerninhalten hinzufügen, wenn Sie dies möchten. Der beste Weg zu lernen ist, ein Arbeitsprojekt mit anderen Werkzeugen anzunehmen, mit denen Sie nicht vertraut sind. Wenn ich Sie wäre, würde ich Python vor C lernen. Es wird in der Community häufiger verwendet als C. Aber C zu lernen ist keine Zeitverschwendung.
quelle
Als Data Scientist sind die anderen Sprachen (C ++ / Java) nützlich, wenn Sie maschinelles Lernen in eine vorhandene Produktionsmaschine integrieren möchten.
Waffles ist sowohl eine gut gepflegte C ++ - Klassenbibliothek als auch ein Befehlszeilen-Analysepaket. Es bietet überwachtes und unbeaufsichtigtes Lernen, unzählige Tools zur Datenbearbeitung, Tools für spärliche Daten und andere Dinge wie die Audioverarbeitung. Da es sich auch um eine Klassenbibliothek handelt, können Sie sie nach Bedarf erweitern. Selbst wenn Sie nicht derjenige sind, der die C ++ - Engine entwickelt (wahrscheinlich nicht), können Sie auf diese Weise Prototypen erstellen, testen und den Entwicklern etwas übergeben.
Vor allem glaube ich, dass meine Kenntnisse in C ++ und Java mir wirklich helfen, die Funktionsweise von Python und R zu verstehen. Jede Sprache wird nur dann richtig verwendet, wenn Sie ein wenig verstehen, was darunter vor sich geht. Indem Sie die Unterschiede zwischen den Sprachen lernen, können Sie lernen, die Stärken Ihrer Hauptsprache zu nutzen.
Aktualisieren
Für kommerzielle Anwendungen mit großen Datenmengen ist Apache Spark - MLLib wichtig. Hier können Sie Scala, Java oder Python verwenden.
quelle
Ich würde gerne verstehen, warum Sie eine andere Sprache benötigen würden (abgesehen von Python), wenn Ihr Ziel "aber was ist mit fortgeschrittener Regression, maschinellem Lernen, Text Mining und anderen fortgeschrittenen statistischen Operationen".
Für so etwas ist C Zeitverschwendung. Es ist ein gutes Werkzeug, aber in den ~ 20 Jahren seit der Veröffentlichung von Java habe ich selten C codiert.
Wenn Sie die funktionalere Seite von R bevorzugen, lernen Sie Scala, bevor Sie sich mit zu vielen prozeduralen schlechten Gewohnheiten beim Codieren mit C auseinandersetzen .
lernen Schließlich Hadley Wickham-Bibliotheken verwenden - sie werden Sie tun , Datenmanipulation viel Zeit sparen.
quelle
Es gibt einige C ++ - Tools für Statistik und Datenwissenschaft wie ROOT https://root.cern.ch/drupal/ , BAT https://www.mppmu.mpg.de/bat/ , boost oder OpenCV
quelle
Ich bin nicht sicher, ob es schon erwähnt wurde, aber es gibt auch Vowpal Wabbit, aber es könnte nur für bestimmte Arten von Problemen spezifisch sein.
quelle
Werfen Sie einen Blick auf Intel DAAL, das gerade läuft. Es ist stark für die Intel-CPU-Architektur optimiert und unterstützt verteilte Berechnungen.
quelle
Skalierbare Lösungen für maschinelles Lernen für Big Data:
Ich werde meine $ .02 hinzufügen, da es einen Schlüsselbereich gibt, der anscheinend nicht in allen vorherigen Beiträgen behandelt wurde - maschinelles Lernen mit Big Data !
Für Big Data ist Skalierbarkeit der Schlüssel und R ist unzureichend. Darüber hinaus sind Sprachen wie Python und R nur für die Anbindung an skalierbare Lösungen nützlich, die normalerweise in anderen Sprachen geschrieben sind. Ich mache diese Unterscheidung nicht, weil ich diejenigen, die sie verwenden, herabsetzen möchte, sondern nur, weil es für Mitglieder der Data-Science-Community so wichtig ist, zu verstehen, wie wirklich skalierbare Lösungen für maschinelles Lernen aussehen.
Ich arbeite hauptsächlich mit Big Data auf verteilten Speicherclustern . Das heißt, ich verwende nicht nur einen 16-Core-Rechner (4 Quad-Core-Prozessoren auf einem einzigen Motherboard, das den Speicher dieses Motherboards gemeinsam nutzt), sondern einen kleinen Cluster von 64 16-Core-Rechnern. Die Anforderungen für diese Cluster mit verteiltem Speicher sind sehr unterschiedlich als für Umgebungen mit gemeinsamem Speicher, und das Lernen von Big-Data-Maschinen erfordert in vielen Fällen skalierbare Lösungen in Umgebungen mit verteiltem Speicher.
Wir verwenden C und C ++ auch überall in einem proprietären Datenbankprodukt. Alle unsere High-Level-Inhalte werden in C ++ und MPI verarbeitet, aber die Low-Level-Inhalte, die die Daten berühren, sind allesamt Longs und C-Style-Character-Arrays, um das Produkt sehr schnell zu halten. Die Bequemlichkeit von Standard-Strings ist den Rechenaufwand einfach nicht wert.
Es gibt nicht viele C ++ - Bibliotheken, die verteilte, skalierbare Funktionen für maschinelles Lernen bieten - MLPACK .
Es gibt jedoch andere skalierbare Lösungen mit APIs:
Apache Spark verfügt über eine skalierbare maschinelle Lernbibliothek namens MLib , mit der Sie eine Schnittstelle herstellen können.
Auch Tensorflow hat jetzt Tensorflow verteilt und hat eine C ++ API .
Hoffe das hilft!
quelle