Jestem R
programistą języka. Należę również do grupy osób, które są uważane za naukowców danych, ale wywodzą się z dyscyplin naukowych innych niż CS.
Działa to dobrze w mojej roli naukowca danych, jednak rozpoczynając karierę R
i mając podstawową znajomość innych języków skryptowych / internetowych, czułem się nieco nieodpowiedni w dwóch kluczowych obszarach:
- Brak solidnej znajomości teorii programowania.
- Brak konkurencyjnego poziomu umiejętności w szybszych i szerzej używanych językach, takich jak
C
,C++
iJava
które mogłyby zostać wykorzystane do zwiększenia prędkości potoku i obliczeń Big Data, a także do tworzenia produktów DS / danych, które można łatwiej przekształcić w szybkie skrypty zaplecza lub samodzielne aplikacje.
Rozwiązanie jest oczywiście proste - dowiedz się więcej o programowaniu, co właśnie robiłem, zapisując się na niektóre zajęcia (obecnie programowanie w języku C).
Jednak teraz, że zaczynam problemów adresowych # 1 i # 2 powyżej, pozostaje mi sobie pytanie „ Jak bardzo opłacalne są językami, jak C
i C++
dla danych Science? ”.
Na przykład mogę bardzo szybko przenosić dane i dobrze komunikować się z użytkownikami, ale co z zaawansowaną regresją, uczeniem maszynowym, eksploracją tekstu i innymi bardziej zaawansowanymi operacjami statystycznymi?
Więc. może C
wykonać zadanie - jakie narzędzia są dostępne dla zaawansowanych statystyk, ML, AI i innych dziedzin Data Science? Czy też muszę stracić większość wydajności uzyskanej dzięki programowaniu C
poprzez wywoływanie R
skryptów lub innych języków?
Najlepszym zasobem, jaki do tej pory znalazłem w C, jest biblioteka o nazwie Shark , która daje C
/ C++
możliwość korzystania z maszyn wektorów wsparcia, regresji liniowej (nieliniowej i innych zaawansowanych regresji, takich jak probin wielomianowy itp.) Oraz krótkiej listy innych (świetne, ale) funkcje statystyczne.
Odpowiedzi:
Odwrotnie: naucz się C / C ++, aby pisać rozszerzenia R. Używaj C / C ++ tylko do krytycznych pod względem wydajności sekcji nowych algorytmów, użyj R do budowania analizy, importowania danych, tworzenia wykresów itp.
Jeśli chcesz wyjść poza R, poleciłbym naukę Pythona. Dostępnych jest wiele bibliotek, takich jak scikit-learn dla algorytmów uczenia maszynowego lub PyBrain do budowania sieci neuronowych itp. (I używaj pylab / matplotlib do drukowania i notatników iPython do opracowywania swoich analiz). Ponownie, C / C ++ jest użyteczny do implementacji algorytmów krytycznych czasowo jako rozszerzeń Pythona.
źródło
Jak powiedział Andre Holzner, rozszerzenie R z rozszerzeniem C / C ++ jest bardzo dobrym sposobem na wykorzystanie najlepszych z obu stron. Możesz także wypróbować odwrotność, pracując z C ++ i od czasu do czasu wywołując funkcję R z pakietem RInside o R. Tutaj możesz znaleźć jak
http://cran.r-project.org/web/packages/RInside/index.html http://dirk.eddelbuettel.com/code/rinside.html
Kiedy pracujesz w C ++, masz wiele bibliotek, z których wiele jest zbudowanych na konkretne problemy, inne bardziej ogólne
http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html
http://mlpack.org/
źródło
Zgadzam się, że obecnym trendem jest używanie Python / R i wiązanie go z niektórymi rozszerzeniami C / C ++ do zadań obliczeniowych.
Jeśli jednak chcesz pozostać w C / C ++, możesz rzucić okiem na Dlib :
źródło
Moim zdaniem, aby być bardziej wszechstronnym profesjonalistą, byłoby miło znać przynajmniej jeden język programowania dla najpopularniejszych paradygmatów programowania ( proceduralny , obiektowy , funkcjonalny ). Z pewnością uważam R i Pythona za dwa najpopularniejsze języki programowania i środowiska dla nauki danych, a zatem podstawowe narzędzia do nauki danych.
Julia jest imponująca pod pewnymi względami, ale stara się dogonić tych dwóch i stać się ważnym narzędziem do analizy danych. Jednak nie widzę to dzieje się w najbliższym czasie, po prostu ze względu na R / Python „s popularności , bardzo duże społeczności , jak również ogromne ekosystemów istniejących i nowo opracowane / Zestawy bibliotek , obejmujące bardzo szeroki zakres dziedzin / kierunków nauka.
To powiedziawszy, wiele pakietów i bibliotek, koncentrujących się na analizie danych, obszarach ML i AI, jest zaimplementowanych i / lub zapewnia interfejsy API w językach innych niż R lub Python (dla potwierdzenia zobacz tę wyselekcjonowaną listę i wyselekcjonowaną listę , z których oba są doskonałe i dają solidne spojrzenie na różnorodność w terenie). Jest to szczególnie prawdziwe w przypadku oprogramowania zorientowanego na wydajność lub specjalistycznego . W przypadku tego oprogramowania widziałem projekty z implementacją i / lub interfejsami API głównie w Javie, C i C ++ (Java jest szczególnie popularna w segmencie danych dużych zbiorów danych - ze względu na jej bliskość do Hadoop i jej ekosystemu - oraz w NLPsegment)), ale dostępne są inne opcje, aczkolwiek w znacznie bardziej ograniczonym zakresie, zależnym od domeny. Żaden z tych języków nie jest stratą czasu, jednak priorytetem musi być opanowanie jednego lub wszystkich z nich przy obecnej sytuacji, projektach i zainteresowaniach. Tak więc, aby odpowiedzieć na twoje pytanie dotyczące żywotności C / C ++ (i Java), powiedziałbym, że wszystkie one są wykonalne , jednak nie jako podstawowe narzędzia do analizy danych, ale jako pomocnicze .
Odpowiadając na pytania dotyczące 1) C jako potencjalnego narzędzia do analizy danych i 2) jego wydajności , powiedziałbym, że: 1) chociaż możliwe jest wykorzystanie C do analizy danych, odradzam to, ponieważ masz bardzo trudno jest znaleźć odpowiednie biblioteki, a tym bardziej próbować samodzielnie wdrożyć odpowiednie algorytmy; 2) nie należy się martwić wydajnością, ponieważ wiele segmentów kodu o kluczowym znaczeniu dla wydajności jest implementowanych w językach niskiego poziomu, takich jak C, a ponadto istnieją opcje interfejsu popularnych języków nauki danych z, powiedzmy, C (na przykład
Rcpp
pakiet dla integracja R z C / C ++: http://dirk.eddelbuettel.com/code/rcpp.html). Jest to dodatek do prostszych, ale często raczej skutecznych podejść do wydajności, takich jak konsekwentne stosowanie wektoryzacji w języku R, a także stosowanie różnych równoległych ram programowania, pakietów i bibliotek. Aby zapoznać się z przykładami ekosystemów R, zobacz Widok zadań CRAN „Wysokowydajne i równoległe przetwarzanie z R” .Mówiąc o analizie danych , myślę, że sensowne jest wspomnienie o znaczeniu odtwarzalnego podejścia badawczego, a także dostępności różnych narzędzi wspierających tę koncepcję (więcej szczegółów znajduje się w mojej odpowiedniej odpowiedzi ). Mam nadzieję, że moja odpowiedź jest pomocna.
źródło
R jest jednym z kluczowych narzędzi dla naukowców zajmujących się danymi, cokolwiek nie przestaniesz z niego korzystać.
Teraz mówimy o C, C ++, a nawet Javie. Są dobrymi popularnymi językami. Wether ich potrzebujesz lub będą potrzebować zależą od rodzaju pracy lub projektów, które masz. Z własnego doświadczenia wynika, że istnieje tak wiele narzędzi dla badaczy danych, że zawsze będziesz się czuł, jakbyś ciągle musiał się uczyć.
Możesz dodać Python lub Matlab do rzeczy, aby dowiedzieć się, jeśli chcesz i dodawać dalej. Najlepszym sposobem na naukę jest podjęcie pracy przy użyciu innych narzędzi, z którymi nie czujesz się komfortowo. Gdybym był tobą, nauczyłbym się Pythona przed C. Jest on częściej używany w społeczności niż C. Ale nauka C nie jest stratą czasu.
źródło
Jako naukowiec danych przydatne są inne języki (C ++ / Java), gdy trzeba włączyć uczenie maszynowe w istniejącym silniku produkcyjnym.
Gofry jest zarówno dobrze utrzymaną biblioteką klas C ++, jak i pakietem analizy wiersza poleceń. Ma nadzorowane i nienadzorowane uczenie się, mnóstwo narzędzi do manipulacji danymi, rzadkie narzędzia do danych i inne rzeczy, takie jak przetwarzanie audio. Ponieważ jest to także biblioteka klas, możesz ją rozszerzać według potrzeb. Nawet jeśli nie jesteś tym, który opracowuje silnik C ++ (istnieje duże prawdopodobieństwo, że nie będziesz), pozwoli ci to prototypować, testować i przekazywać coś programistom.
Co najważniejsze, uważam, że moja znajomość C ++ i Java naprawdę pomaga mi zrozumieć, jak działają Python i R. Każdy język jest używany właściwie tylko wtedy, gdy rozumiesz trochę o tym, co dzieje się pod spodem. Ucząc się różnic między językami, możesz nauczyć się wykorzystywać zalety swojego głównego języka.
Aktualizacja
W zastosowaniach komercyjnych z dużymi zestawami danych ważna jest Apache Spark - MLLib. Tutaj możesz używać Scala, Java lub Python.
źródło
Chciałbym zrozumieć, dlaczego potrzebujesz innego języka (oprócz Pythona), jeśli twoim celem jest „ale co z zaawansowaną regresją, uczeniem maszynowym, eksploracją tekstu i innymi bardziej zaawansowanymi operacjami statystycznymi”.
Na takie rzeczy C to strata czasu. To dobre narzędzie, ale w ciągu ~ 20 lat od pojawienia się Java rzadko kodowałem C.
Jeśli wolisz bardziej funkcjonalną stronę programowania R, naucz się Scali, zanim zaczniesz zbyt wiele proceduralnych złych nawyków kodowania w C .
w końcu nauczyć się korzystać z bibliotek Hadley Wickhama - będą Ci zaoszczędzić dużo czasu robi manipulację danymi.
źródło
Istnieje kilka narzędzi C ++ do statystyki i nauki danych, takich jak ROOT https://root.cern.ch/drupal/ , BAT https://www.mppmu.mpg.de/bat/ , boost lub OpenCV
źródło
Nie jestem pewien, czy zostało to wspomniane, ale jest też samogłoska Wabbit, ale może być specyficzna tylko dla niektórych rodzajów problemów.
źródło
Spójrz na Intel DAAL, który jest w toku. Jest wysoce zoptymalizowany pod kątem architektury procesorów Intel i obsługuje obliczenia rozproszone.
źródło
Skalowalne rozwiązania uczenia maszynowego dla dużych zbiorów danych:
Dodam moje 0,02 $, ponieważ istnieje kluczowy obszar, który wydaje się nie uwzględniony we wszystkich poprzednich postach - uczenie maszynowe na dużych danych !
W przypadku dużych zbiorów danych skalowalność jest kluczowa, a R jest niewystarczające. Co więcej, języki takie jak Python i R są przydatne tylko w przypadku interfejsów ze skalowalnymi rozwiązaniami, które zwykle są pisane w innych językach. Rozróżniam to nie dlatego, że chcę zdyskredytować tych, którzy ich używają, ale tylko dlatego, że członkowie społeczności zajmującej się analizą danych powinni wiedzieć, jak wyglądają naprawdę skalowalne rozwiązania uczenia maszynowego.
Większość pracy wykonuję przy użyciu dużych zbiorów danych w klastrach pamięci rozproszonej . Oznacza to, że nie używam tylko 16-rdzeniowej maszyny (4 czterordzeniowe procesory na jednej płycie głównej współużytkującej pamięć tej płyty głównej), używam małego klastra 64 16-rdzeniowych maszyn. Wymagania są bardzo różne dla tych klastrów pamięci rozproszonej niż dla środowisk pamięci współużytkowanej, a uczenie maszynowe dużych zbiorów danych wymaga w wielu przypadkach skalowalnych rozwiązań w środowiskach pamięci rozproszonej.
Używamy również C i C ++ wszędzie w zastrzeżonym produkcie bazodanowym. Wszystkie nasze elementy wysokiego poziomu są obsługiwane w C ++ i MPI, ale elementy niskiego poziomu, które dotykają danych, to długie i tablice znaków w stylu C, aby utrzymać produkt bardzo szybko. Wygoda ciągów standardowych nie jest po prostu warta kosztów obliczeniowych.
Nie ma wielu dostępnych bibliotek C ++, które oferują rozproszone, skalowalne możliwości uczenia maszynowego - MLPACK .
Istnieją jednak inne skalowalne rozwiązania z interfejsami API:
Apache Spark ma skalowalną bibliotekę uczenia maszynowego o nazwie MLib , z którą można się komunikować .
Również Tensorflow ma teraz rozproszony tensorflow i ma interfejs API C ++ .
Mam nadzieję że to pomoże!
źródło