C (veya C ++) da Veri Bilimi


40

Ben bir Rdil programcısıyım. Ayrıca Veri Bilim İnsanları olarak kabul edilen ancak CS dışındaki akademik disiplinlerden gelen insanlar grubuyum.

Bu, bir Veri Bilimcisi olarak benim rolümde iyi sonuç veriyor, ancak kariyerime başlayarak Rve sadece diğer betik / web dilleri hakkında temel bilgileri öğrenerek, 2 kilit alanda kendimi yetersiz hissediyorum:

  1. Programlama teorisi sağlam bir bilgi eksikliği.
  2. Rekabetçi gibi hızlı ve daha yaygın olarak kullanılan dilde beceri düzeyinin eksikliği C, C++ve Javaboru hattı ve Büyük Veri hesaplamaların hızını artırmak için hem de daha kolay perhizden haline gelebilmektedir DS / veri ürünler oluşturmak için yararlanılabilir, arka uç komut dosyaları veya bağımsız uygulamalar.

Çözüm elbette basit - gidip programlama hakkında bilgi edinin, bazı derslere kayıt yaparak ne yapıyorum (şu anda C programlama).

Ancak şimdi yukarıdaki 1. ve 2. numaralı problemleri çözmeye başladığım için kendime " Dilbilim Cve Dilbilim için diller ne kadar uygulanabilir C++? "

Örneğin, verileri çok hızlı bir şekilde taşıyabilir ve kullanıcılarla gayet iyi etkileşimde bulunabilirim, peki ya gelişmiş regresyon, Makine Öğrenmesi, metin madenciliği ve diğer daha gelişmiş istatistiksel işlemler?

Yani. Cişi yapabilir - gelişmiş istatistikler, ML, AI ve diğer Veri Bilimi alanları için hangi araçlar var? Ya ben programlayarak kazanılan verimlilik en gevşek olmalıdır Cüzerinde arayarak Rkomut dosyaları veya diğer diller?

Şimdiye dek C'de bulduğum en iyi kaynak , Destek Vektör Makineleri, doğrusal regresyon (doğrusal olmayan ve multinom probit, vb. Gibi diğer gelişmiş regresyonlar vb.) Ve diğerlerinin kısa bir listesini veren / veren yeteneği olan Shark adlı bir kütüphanedir . (büyük ama) istatistiksel fonksiyonlar.CC++


5
Bu soru öncelikle görüşe dayalı görünüyor. Lütfen tekrar yazmayı düşünün. Belki C / C ++ için ne tür veri bilimi araçlarının mevcut olduğunu ya da bu dilleri ne tür uygulamaların kullandığını sorun.
sheldonkreger

1
@sheldonkreger İstediğim bu, daha net anlatacağım, teşekkürler
Hack-R

1
Makine öğrenimini mevcut C ++ motorlarına dahil etmek için Waffle'ları (C ++) kullandım.
Pete

@Pete, bunu bir cevaba dahil edebilirseniz, bunu çözüm olarak işaretlemem muhtemeldir
Hack-R

1
Meta araç takımı C ++ 'da mevcuttur: meta-toolkit.github.io/meta . Coursera'da onu kullanan bir kurs var, hala 1. haftada, bu nedenle bir göz atmak isteyebilirsiniz. Tabii "Metin Alma ve Arama Motorları" denir.
LauriK

Yanıtlar:


35

Yoksa C'yi programlayarak kazanılan verimliliğin çoğunu R betikleri veya diğer dilleri çağırarak mı kaybetmeliyim?

Tersini yapın: R uzantılarını yazmak için C / C ++ 'ı öğrenin. C / C ++ 'ı yalnızca yeni algoritmalarınızın performans açısından kritik bölümleri için kullanın, analizinizi oluşturmak, verileri içe aktarmak, arsa yapmak vb. İçin R kullanın.

Eğer R'nin ötesine geçmek istiyorsanız, python öğrenmenizi tavsiye ederim. Makine öğrenmesi algoritmaları için scikit-learn veya PyBrain gibi birçok kütüphane bulunmaktadır. Yapay Sinir Ağları inşa için vb. (ve analizlerinizi geliştirmek için komplo oluşturmak için pylab / matplotlib kullanın ve analizlerinizi geliştirmek için iPython dizüstü bilgisayarları kullanın). Yine, C / C ++, zaman kritik algoritmaları python uzantıları olarak uygulamakta kullanışlıdır.


1
Sağol Andre. Pybrain'i çok kullanırım; benim için Python, R ve C arasında bir orta alan, ancak yine de kodun hem hızı hem de daha geniş uygulamaları için C'yi öğrenmek istedim. Bunu çözüm olarak seçtim, çünkü R uzantılarını yazmak için C / C ++ kullanmayı düşünmemiştim, ki bu kesinlikle yapacağım gerçekten harika bir fikir. Teşekkürler!!
Hack-R

1
Ben Python öğrenme kavramını ikinci olarak kullandım. Bu veri setlerini analiz etmek için R'yi kullanan büyük veri setleri ve veri bilimcileri ile çalışıyorum. C'yi çok genç yaşta öğrenmeme rağmen, Python bir programcı olarak bana gerçekten değer veren ve bu veri bilim insanına yardım eden dildir. Bu nedenle, takımı iltifat etmeye bakın, kendinize değil.
Glen Swan

1
Benzer şekilde python cython (tekrar temelde C) yazarak hızlanır. Söylemeliyim ki, henüz kendim kullanmamışım. Mevcut kütüphaneler kullanılarak yapılamayan çok az şey vardır (örneğin, scikit-learn, python'daki pandalar [cython ile yazılmıştır, bu yüzden zorunda değilsiniz!]).
seanv507

Diğer bazı yararlı python kütüphaneleri şunlardır: pandalar, numpy, scipy vs. Python öğrenmeyi desteklemek için buna ekleme :)
Shagun Sodhani

Bu nokta açık. Eğer bir CS geçmişiniz yoksa, kodu python veya R için paketlerden daha verimli bir şekilde kod yazma şansınız oldukça uzaktır. 13 yıl boyunca C ++ 'da programladım ve hala bellek yönetimi ve performans optimizasyonunun iyi yapmadığım yönleri olduğunu düşünüyorum. Ek olarak, python & R, dağıtım sorunlarını optimize eden çok akıllı bilgisayar bilimcilerine sahip, bu nedenle C dilleri gerçekten düşük gecikmeli sistemlere aktarılıyor.
jagartner

10

Andre Holzner’in dediği gibi, R’nin C / C ++ uzantısı ile genişletilmesi, her iki tarafın en iyisinden yararlanmak için çok iyi bir yoldur. Ayrıca tersini deneyebilir, C ++ ile çalışabilir ve R'nin RInside paketi o R ile zaman zaman çağıran fonksiyonunu deneyebilirsiniz.

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

C ++ 'ta çalıştığınızda, birçoğu belirli problemler için oluşturulmuş pek çok kütüphaneye sahip olacaksınız.

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

http://mlpack.org/


9

Şu anki eğilimin Python / R kullanmak ve hesaplama açısından pahalı işler için bazı C / C ++ uzantılarına bağlamak olduğunu kabul ediyorum.

Ancak, C / C ++ 'da kalmak istiyorsanız, Dlib’e bir göz atmak isteyebilirsiniz :

Dlib, sözleşmeli programlama ve modern C ++ teknikleri kullanılarak tasarlanmış genel amaçlı bir çapraz platform C ++ kütüphanesidir. Açık kaynaklı yazılımdır ve Boost Yazılım Lisansı altında lisanslıdır.

görüntü tanımını buraya girin


Başka bir çok yararlı cevap. Bu görüntüyü özgürce çoğaltmamıza izin verilip verilmediğini biliyor musunuz (bir sunuma veya bloga koymak istersem vb.)? Ayrıca, "> 20k numuneler" gibi şeyler söylediğinde, "numuneler" mi yoksa "numunenizdeki gözlemler" anlamına mı geldiğini merak ediyorum.
Hack-R,

2
Ben dlib yazarıyım. Bu resmi istediğiniz yere göndermek için çekinmeyin :). Ayrıca,> 20k numuneler, 20k vektörünüz veya her neyse sizin demektir. Her örnekte kaç tane değişken olduğu ayrı bir konudur.
Davis King,

@ Hack-R "Örnek" istatistikte / makine öğreniminde aşırı yüklenmiş terimlerden biridir; bu, bazen bir popülasyondan çizilen bir dizi örnek anlamına gelir ("örnek boyutu", "örnek ortalaması", vb.) Ve bazen tekil örnekleri ifade eder ("10K numuneleri üzerinde bir sınıflandırıcı yetiştirildi").
Tim Goodman

6

Bence, ideal olarak, çok yönlü bir profesyonel olmak için, en popüler programlama paradigmaları için ( prosedürel , nesne yönelimli , işlevsel ) en az bir programlama dili bilmek güzel olurdu . Elbette, R ve Python'u veri bilimi ve dolayısıyla birincil veri bilimi araçları için en popüler iki programlama dili ve ortamı olarak görüyorum .

Julia bazı yönleriyle etkileyicidir, ancak bu ikisini yakalamaya ve kendisini büyük bir veri bilimi aracı olarak kurmaya çalışır. Ancak, bu sadece nedeniyle, yakın zamanda oluyor görmüyorum R / Python 'ın popülerliğe çok büyük topluluklar yanı sıra muazzam ekosistemleri mevcut ve yeni geliştirilmiş paketler / kütüphaneler arasında etki / alanlarının bir çok geniş kapsayan, ders çalışma.

O, birçok paketleri ve kütüphaneler söyledikten sonra, veri bilim odaklı, ML ve AI alanları, vardır uygulanan ve / veya sağlayan API'ler R veya Python dışındaki dillerde (ispat için bkz bu küratörlüğünü listesini ve bu küratörlüğünü listesini , her ikisi de mükemmel ve alandaki çeşitlilik hakkında sağlam bir bakış açısı sağlar). Bu özellikle performans odaklı veya özel yazılımlar için geçerlidir. Bu yazılım için, çoğunlukla Java, C ve C ++ 'da uygulama ve / veya API'ler içeren projeler gördüm (Java özellikle veri biliminin büyük veri segmentinde popülerdir - Hadoop ve ekosistemine olan yakınlığı nedeniyle - ve NLP’de)segment), ancak çok daha sınırlı, etki alanı tabanlı bir ölçüde de olsa başka seçenekler de kullanılabilir. Bu dillerin hiçbiri zaman kaybı değildir, ancak mevcut çalışma durumunuz, projeleriniz ve ilgi alanlarınızla bunların herhangi birine veya tümüne hakim olmaya öncelik vermelisiniz . Bu nedenle, C / C ++ (ve Java) 'nın geçerliliği hakkındaki sorunuza cevap vermek için, hepsinin uygulanabilir olduğunu söyleyeceğim , ancak birincil veri bilimi araçları olarak değil, ikincil olarak .

Potansiyel bir veri bilimi aracı olarak 1) C ve 2) 'nin verimliliğine ilişkin sorularınızı yanıtlayarak , şunu söyleyebilirim: 1) veri bilimi için C kullanmak mümkün olsa da , bunu yapmamayı öneriyorum , çünkü Karşılık gelen kütüphaneleri bulmakta zorlanıyor ya da dahası, kendinize uygun algoritmaları uygulamaya çalışıyor; 2) C gibi düşük seviyeli dillerde birçok kritik performans kodu segmenti uygulandığı için verimlilik konusunda endişelenmemelisiniz, artı, popüler veri bilimi dillerini C (örneğin, paket için C / C ++ ile entegrasyon R:Rcpp http://dirk.eddelbuettel.com/code/rcpp.html). Bu, R'de vektörelleştirmenin sürekli kullanımı, bunun yanı sıra çeşitli paralel programlama çerçeveleri, paketleri ve kütüphaneleri kullanmak gibi performansa daha basit, fakat genellikle oldukça etkili olan yaklaşımlara ek olarak sunulmaktadır. R ekosistem örnekleri için, bkz. CRAN Görev Görünümü "R ile Yüksek Performans ve Paralel Hesaplama" .

Veri bilimi hakkında konuşursak , çoğaltılabilir araştırma yaklaşımının önemini ve bu kavramı destekleyen çeşitli araçların kullanılabilirliğini ve daha fazla ayrıntı için lütfen ilgili cevabımı inceleyiniz . Umarım cevabım yardımcı olur.


5

R, veri bilimcisi için anahtar araçlardan biridir, ne yaparsanız yapın, kullanmayı asla bırakmazsınız.

Şimdi C, C ++ ve hatta Java hakkında konuşuyorum. Onlar iyi popüler dillerdir. İhtiyacınız olup olmadığına ya da onlara ihtiyaç duyup duymadığınız, sahip olduğunuz iş veya projelere bağlıdır. Kişisel deneyimlerinizden dolayı, veri bilimcileri için sürekli öğrenmeniz gereken her zaman hissedeceğiniz çok fazla araç var.

İsterseniz eklemeye devam ederseniz öğrenmek için Python veya Matlab ekleyebilirsiniz. Öğrenmenin en iyi yolu, rahat olmadığınız diğer araçları kullanarak bir iş projesine katılmaktır. Yerinde olsam, Python'u C'den önce öğrenirdim. Toplulukta C'den daha çok kullanılır. Ancak C'yi öğrenmek zamanınızı boşa harcamaz.


Çok fazla sayıda araç hakkında ne demek istediğinizi biliyorum! Stajyerimin dikkatinin dağılmamasını ve sadece 1 veya 2 şeye odaklanmasını söylüyorum, ancak kendi tavsiyemi almak zor.
Hack-R

5

Bir veri bilimcisi olarak, diğer dilleri (C ++ / Java), makine öğrenmesini mevcut bir üretim motoruna dahil etmeniz gerektiğinde kullanışlıdır.

Gofretler hem bakımlı C ++ sınıf kütüphanesi hem de komut satırı analiz paketidir. Denetimli ve denetimsiz öğrenme, tonlarca veri işleme aracı, seyrek veri aracı ve ses işleme gibi başka şeyler var. Aynı zamanda bir sınıf kütüphanesi olduğundan, istediğiniz kadar uzatabilirsiniz. C ++ motorunu geliştiren siz olmasanız bile (şansınız olmayacak), bu, geliştiricilere bir şey prototipleme, test etme ve teslim etmenize izin verecektir.

En önemlisi, C ++ ve Java bilgilerimin Python ve R'nin nasıl çalıştığını anlamama gerçekten yardımcı olduğunu düşünüyorum. Herhangi bir dil ancak altında neler olup bittiğini biraz anladığınızda doğru kullanılır. Diller arasındaki farkları öğrenerek, ana dilin güçlü yanlarından yararlanmayı öğrenebilirsin.

Güncelleme

Büyük veri setlerine sahip ticari uygulamalar için Apache Spark - MLLib önemlidir. Burada Scala, Java veya Python kullanabilirsiniz.


2

Amacınız "ama ne gelişmiş regresyon, Makine Öğrenmesi, metin madenciliği ve diğer daha ileri istatistiksel işlemler" ise, neden başka bir dile (Python dışında) ihtiyaç duyacağınızı anlamak isterim.
Böyle bir şey için, C zaman kaybıdır. Java'nın ortaya çıkmasından bu yana ~ 20 yıl sonra, C kodunu nadiren C kodluyorum.
R'nin daha işlevsel programlama tarafını tercih ediyorsanız, C ile kodlanan çok fazla işlemsel kötü alışkanlığa girmeden önce Scala'yı öğrenin. .
Son olarak Hadley Wickham'ın kütüphanelerini kullanmayı öğrenmek - onlar size veri manipülasyon yapıyor çok zaman kazanırsınız.


Çünkü R ve Python gibi diller, C gibi dillere kıyasla çok yavaş / verimsizdir. Dolayısıyla, çok fazla veri ve hesaplama ile uğraşırken, C'de bir şey yapabilirseniz, R'de yapmanıza göre daha hızlıdır. Hadley'nin paketleri tho!
Hack-R


1

Henüz söylenip söylenmediğinden emin değilim, ama ayrıca vowpal wabbit de var, ancak yalnızca belirli sorun türlerine özgü olabilir.


1
İlgi çekici görünüyor. Sadece bağlantıya baktım, ancak belirtilen model türleri oldukça faydalı olacaktır. Yine de bir programda kullanabileceğiniz normal bir C kütüphanesi mi? Daha fazla araştırmam gerekecek.
Hack-R

0

Devam eden Intel DAAL'a bir göz atın . Intel CPU mimarisi için oldukça optimize edilmiştir ve dağıtık hesaplamaları destekler.


0

Büyük Veriler İçin Ölçeklenebilir Makine Öğrenme Çözümleri:

0,00 $ 'ı ekleyeceğim, çünkü önceki yayınların hepsinde adreslenmemiş gibi görünen önemli bir alan var - büyük verilerden makine öğrenmesi !

Büyük veriler için ölçeklenebilirlik çok önemlidir ve R yetersizdir. Ayrıca, Python ve R gibi diller, yalnızca genellikle diğer dillerde yazılmış olan ölçeklenebilir çözümlerle arayüz oluşturmak için kullanışlıdır. Bu ayrımı, bunları kullananları ayırmak istediğim için değil, yalnızca veri bilim topluluğu üyeleri için ölçeklenebilir makine öğrenme çözümlerinin gerçekte nasıl göründüğünü anlamaları için çok önemli olduğu için yapıyorum.

İşimin çoğunu , dağıtılmış bellek kümeleriyle ilgili büyük verilerle yapıyorum . Yani, sadece bir 16 çekirdekli makine kullanmıyorum (o anakartın hafızasını paylaşan tek bir anakart üzerinde 4 çekirdekli işlemci), 64 çekirdekli makinelerin küçük bir kümesini kullanıyorum. Gereksinimler, bu dağıtılmış bellek kümeleri için paylaşılan bellek ortamlarından çok farklıdır ve büyük veri makinesi öğrenmesi, çoğu durumda dağıtılmış bellek ortamlarında ölçeklenebilir çözümler gerektirir.

Ayrıca C ve C ++ 'ı her yerde tescilli bir veritabanı ürününde kullanıyoruz. Tüm yüksek seviyeli ürünlerimiz C ++ ve MPI'da ele alınmaktadır, ancak verilere dokunan düşük seviyeli ürünler, çok uzun sürmektedir ve ürünü çok hızlı tutmak için C tarzı karakter dizileridir. Std dizgelerinin rahatlığı basit bir şekilde hesaplama maliyetine değmez.

Dağıtılmış, ölçeklenebilir makine öğrenme yetenekleri sunan pek çok C ++ kütüphanesi yoktur - MLPACK .

Ancak, API’lerle ölçeklenebilir başka çözümler de var:

Apache Spark, arabirim kurabileceğiniz MLib adında ölçeklenebilir bir makine öğrenme kütüphanesine sahiptir.

Ayrıca Tensorflow şimdi tensorflow dağıttı ve bir C ++ api'ye sahip .

Bu yardımcı olur umarım!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.