Saya seorang R
programmer bahasa. Saya juga berada dalam kelompok orang yang dianggap sebagai Ilmuwan Data tetapi berasal dari disiplin akademis selain CS.
Ini berfungsi dengan baik dalam peran saya sebagai Data Scientist, namun, dengan memulai karir saya R
dan hanya memiliki pengetahuan dasar tentang bahasa scripting / web lain, saya merasa agak tidak memadai dalam 2 bidang utama:
- Kurangnya pengetahuan yang kuat tentang teori pemrograman.
- Kurangnya tingkat keterampilan yang kompetitif dalam bahasa yang lebih cepat dan lebih banyak digunakan seperti
C
,C++
danJava
, yang dapat digunakan untuk meningkatkan kecepatan pipa dan perhitungan Big Data serta untuk membuat DS / produk data yang dapat lebih mudah dikembangkan menjadi lebih cepat skrip back-end atau aplikasi mandiri.
Solusinya tentu saja sederhana - pergi belajar tentang pemrograman, yang telah saya lakukan dengan mendaftar di beberapa kelas (saat ini pemrograman C).
Namun, sekarang saya mulai mengatasi masalah # 1 dan # 2 di atas, saya bertanya pada diri sendiri " Seberapa layakkah bahasa seperti C
dan C++
untuk Ilmu Data? ".
Misalnya, saya dapat memindahkan data dengan sangat cepat dan berinteraksi dengan pengguna dengan baik, tetapi bagaimana dengan regresi tingkat lanjut, Pembelajaran Mesin, penambangan teks, dan operasi statistik lainnya yang lebih canggih?
Begitu. dapat C
melakukan pekerjaan - alat apa yang tersedia untuk statistik lanjutan, ML, AI, dan bidang Ilmu Data lainnya? Atau haruskah saya kehilangan sebagian besar efisiensi yang diperoleh dengan pemrograman C
dengan memanggil R
skrip atau bahasa lain?
Sumber daya terbaik yang saya temukan sejauh ini di C adalah perpustakaan bernama Shark , yang memberikan C
/ C++
kemampuan untuk menggunakan Support Vector Machines, regresi linier (bukan non-linear dan regresi lanjutan lainnya seperti multinomial probit, dll) dan daftar pendek lainnya (hebat tapi) fungsi statistik.
Jawaban:
Lakukan sebaliknya: pelajari C / C ++ untuk menulis ekstensi R. Gunakan C / C ++ hanya untuk bagian-bagian penting kinerja dari algoritma baru Anda, gunakan R untuk membangun analisis Anda, mengimpor data, membuat plot, dll.
Jika Anda ingin melampaui R, saya akan merekomendasikan belajar python. Ada banyak perpustakaan yang tersedia seperti scikit-belajar untuk algoritma pembelajaran mesin atau PyBrain untuk membangun Neural Networks dll. (Dan gunakan pylab / matplotlib untuk merencanakan dan notebook iPython untuk mengembangkan analisis Anda). Sekali lagi, C / C ++ berguna untuk mengimplementasikan algoritma kritis waktu sebagai ekstensi python.
sumber
Seperti yang dikatakan Andre Holzner, memperluas R dengan ekstensi C / C ++ adalah cara yang sangat baik untuk memanfaatkan yang terbaik dari kedua belah pihak. Anda juga dapat mencoba kebalikannya, bekerja dengan C ++ dan secara fungsi memanggil fungsi R dengan paket RInside o R. Di sini Anda dapat menemukan caranya
http://cran.r-project.org/web/packages/RInside/index.html http://dirk.eddelbuettel.com/code/rinside.html
Setelah Anda bekerja di C ++ Anda memiliki banyak perpustakaan, banyak dari mereka dibangun untuk masalah khusus, lainnya lebih umum
http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html
http://mlpack.org/
sumber
Saya setuju bahwa tren saat ini adalah menggunakan Python / R dan mengikatnya ke beberapa ekstensi C / C ++ untuk tugas-tugas yang mahal secara komputasi.
Namun, jika Anda ingin tetap berada di C / C ++, Anda mungkin ingin melihat Dlib :
sumber
Menurut pendapat saya, idealnya, untuk menjadi profesional yang lebih berpengetahuan luas , akan menyenangkan untuk mengetahui setidaknya satu bahasa pemrograman untuk paradigma pemrograman paling populer ( prosedural , berorientasi objek , fungsional ). Tentu saja, saya menganggap R dan Python sebagai dua bahasa dan lingkungan pemrograman paling populer untuk ilmu data dan, karenanya, alat ilmu data primer .
Julia sangat mengesankan dalam aspek-aspek tertentu, tetapi ia mencoba untuk mengejar keduanya dan memantapkan dirinya sebagai alat ilmu data utama. Namun, saya tidak melihat ini terjadi dalam waktu dekat, hanya karena R / Python 's popularitas , sangat besar masyarakat serta besar ekosistem yang ada dan baru dikembangkan paket / perpustakaan , meliputi rentang yang sangat luas domain / bidang belajar.
Karena itu, banyak paket dan pustaka, yang berfokus pada ilmu data, bidang ML dan AI, diimplementasikan dan / atau menyediakan API dalam bahasa selain R atau Python (sebagai buktinya, lihat daftar kurasi ini dan daftar kurasi ini , keduanya sangat baik dan memberikan perspektif yang kuat tentang varietas di lapangan). Ini terutama berlaku untuk perangkat lunak yang berorientasi pada kinerja atau khusus . Untuk perangkat lunak itu, saya telah melihat proyek dengan pelaksanaan dan / atau API sebagian besar di Jawa, C dan C ++ (Java sangat populer di data besar segmen ilmu Data - karena kedekatan dengan Hadoop dan ekosistemnya - dan dalam NLPsegmen), tetapi opsi lain tersedia, meskipun pada tingkat yang jauh lebih terbatas, berbasis domain. Tidak satu pun dari bahasa ini yang membuang-buang waktu, namun Anda harus memprioritaskan menguasai salah satu atau semuanya dengan situasi kerja, proyek, dan minat Anda saat ini. Jadi, untuk menjawab pertanyaan Anda tentang kelayakan C / C ++ (dan Java), saya akan mengatakan bahwa mereka semua layak , namun tidak sebagai alat ilmu data primer , tetapi sebagai yang sekunder .
Menjawab pertanyaan Anda pada 1) C sebagai alat sains data potensial dan 2) efisiensinya , saya akan mengatakan bahwa: 1) sementara dimungkinkan untuk menggunakan C untuk sains data, saya akan merekomendasikan untuk tidak melakukannya, karena Anda akan memiliki sulit menemukan perpustakaan yang sesuai atau, bahkan lebih lagi, mencoba menerapkan algoritma yang sesuai sendiri; 2) Anda tidak perlu khawatir tentang efisiensi, karena banyak segmen kode kinerja kritis diimplementasikan dalam bahasa tingkat rendah seperti C, ditambah, ada opsi untuk antarmuka bahasa ilmu data populer dengan, katakanlah, C (misalnya,
Rcpp
paket untuk integrasi R dengan C / C ++: http://dirk.eddelbuettel.com/code/rcpp.html). Ini merupakan tambahan untuk pendekatan kinerja yang lebih sederhana, tetapi seringkali agak efektif, seperti penggunaan vektorisasi yang konsisten dalam R serta menggunakan berbagai kerangka kerja pemrograman paralel, paket dan pustaka. Untuk contoh ekosistem R, lihat Tampilan Tugas CRAN "Kinerja Tinggi dan Komputasi Paralel dengan R" .Berbicara tentang ilmu data , saya pikir cukup masuk akal untuk menyebutkan pentingnya pendekatan penelitian yang dapat direproduksi serta ketersediaan berbagai alat , mendukung konsep ini (untuk lebih jelasnya, silakan lihat jawaban saya yang relevan ). Saya harap jawaban saya bermanfaat.
sumber
R adalah salah satu alat utama untuk ilmuwan data, apa pun yang Anda lakukan jangan berhenti menggunakannya.
Sekarang berbicara tentang C, C ++ atau bahkan Java. Mereka adalah bahasa populer yang baik. Apakah Anda membutuhkannya atau akan tergantung pada jenis pekerjaan atau proyek yang Anda miliki. Dari pengalaman pribadi, ada begitu banyak alat di luar sana untuk ilmuwan data sehingga Anda akan selalu merasa seperti Anda terus-menerus perlu belajar.
Anda dapat menambahkan Python atau Matlab ke hal-hal untuk dipelajari jika Anda mau dan terus menambahkan. Cara terbaik untuk belajar adalah mengerjakan proyek kerja menggunakan alat lain yang tidak Anda sukai. Jika saya jadi Anda, saya akan belajar Python sebelum C. Itu lebih banyak digunakan di komunitas daripada C. Tapi belajar C tidak membuang-buang waktu Anda.
sumber
Sebagai seorang ilmuwan data, bahasa lain (C ++ / Java) berguna ketika Anda perlu memasukkan pembelajaran mesin ke dalam mesin produksi yang ada.
Waffles adalah pustaka kelas C ++ yang terpelihara dengan baik dan paket analisis baris perintah. Itu mendapat pembelajaran yang diawasi dan tidak terawasi, banyak alat manipulasi data, peralatan data yang jarang, dan hal-hal lain seperti pemrosesan audio. Karena ini juga perpustakaan kelas, Anda dapat memperluasnya sesuai kebutuhan. Bahkan jika Anda bukan orang yang mengembangkan mesin C ++ (kemungkinan Anda tidak akan), ini akan memungkinkan Anda untuk membuat prototipe, menguji, dan menyerahkan sesuatu kepada pengembang.
Yang paling penting, saya percaya pengetahuan saya tentang C ++ & Java benar-benar membantu saya memahami bagaimana Python dan R bekerja. Bahasa apa pun hanya digunakan dengan benar ketika Anda mengerti sedikit tentang apa yang terjadi di bawahnya. Dengan mempelajari perbedaan antar bahasa Anda dapat belajar untuk mengeksploitasi kekuatan bahasa utama Anda.
Memperbarui
Untuk aplikasi komersial dengan kumpulan data besar, Apache Spark - MLLib adalah penting. Di sini Anda dapat menggunakan Scala, Java, atau Python.
sumber
Saya ingin memahami mengapa Anda memerlukan bahasa lain (selain Python) jika tujuan Anda adalah "tetapi bagaimana dengan regresi tingkat lanjut, Pembelajaran Mesin, penambangan teks, dan operasi statistik lainnya yang lebih canggih".
Untuk hal semacam itu, C adalah buang-buang waktu. Ini adalah alat yang baik untuk dimiliki tetapi dalam ~ 20 tahun sejak Java keluar, saya jarang menggunakan kode C.
Jika Anda lebih suka sisi pemrograman yang lebih fungsional dari R, pelajari Scala sebelum Anda masuk ke terlalu banyak kebiasaan buruk prosedural yang mengkode dengan C .
Terakhir belajar menggunakan perpustakaan Hadley Wickham - mereka akan menghemat banyak waktu melakukan manipulasi data.
sumber
Ada beberapa alat C ++ untuk statistik dan ilmu data seperti ROOT https://root.cern.ch/drupal/ , BAT https://www.mppmu.mpg.de/bat/ , boost, atau OpenCV
sumber
Tidak yakin apakah ini sudah disebutkan, tetapi ada juga vowpal wabbit tetapi mungkin khusus untuk jenis masalah tertentu saja.
sumber
Lihatlah Intel DAAL yang sedang berlangsung. Ini sangat dioptimalkan untuk arsitektur CPU Intel dan mendukung perhitungan terdistribusi.
sumber
Solusi Pembelajaran Mesin Scalable untuk Big Data:
Saya akan menambahkan $ .02 saya karena ada area kunci yang tampaknya tidak pernah dialamatkan di semua posting sebelumnya - pembelajaran mesin pada data besar !
Untuk data besar, skalabilitas adalah kunci, dan R tidak cukup. Lebih lanjut, bahasa seperti Python dan R hanya berguna untuk berinteraksi dengan solusi skalabel yang biasanya ditulis dalam bahasa lain. Saya membuat perbedaan ini bukan karena saya ingin meremehkan mereka yang menggunakannya, tetapi hanya karena sangat penting bagi anggota komunitas ilmu data untuk memahami seperti apa solusi pembelajaran mesin yang benar-benar dapat diukur.
Saya melakukan sebagian besar pekerjaan saya dengan data besar pada cluster memori terdistribusi . Artinya, saya tidak hanya menggunakan satu mesin 16 core (prosesor 4 quad core pada satu motherboard berbagi memori dari motherboard itu), saya menggunakan sekelompok kecil 64 mesin 16 core. Persyaratannya sangat berbeda untuk cluster memori terdistribusi ini daripada untuk lingkungan memori bersama dan pembelajaran mesin data besar membutuhkan solusi yang dapat diukur dalam lingkungan memori terdistribusi dalam banyak kasus.
Kami juga menggunakan C dan C ++ di mana-mana dalam produk basis data berpemilik. Semua hal tingkat tinggi kami ditangani dalam C ++ dan MPI, tetapi hal-hal tingkat rendah yang menyentuh data semuanya panjang dan array karakter gaya C untuk menjaga produk sangat sangat cepat. Kenyamanan string std sama sekali tidak sebanding dengan biaya komputasi.
Tidak banyak perpustakaan C ++ yang tersedia yang menawarkan kemampuan pembelajaran mesin yang dapat didistribusikan dan dapat diukur - MLPACK .
Namun, ada solusi terukur lainnya dengan API:
Apache Spark memiliki pustaka pembelajaran mesin berskala yang disebut MLib yang dapat Anda gunakan untuk berinteraksi.
Tensorflow juga sekarang telah mendistribusikan tensorflow dan memiliki api C ++ .
Semoga ini membantu!
sumber