Python vs R untuk pembelajaran mesin

101

Saya baru mulai mengembangkan aplikasi pembelajaran mesin untuk tujuan akademik. Saat ini saya menggunakan R dan melatih diri saya di dalamnya. Namun, di banyak tempat, saya telah melihat orang menggunakan Python .

Apa yang digunakan orang di dunia akademis dan industri, dan apa rekomendasinya?

Peter Mortensen
sumber
3
Nah, apa jenis pembelajaran mesin (gambar / video? NLP? Keuangan? Astronomi?), Pengklasifikasi mana, dataset ukuran apa (Mb? Gb? Tb?), Skala apa, latensi apa, pada platform apa (ponsel / komputer tunggal) / multicore / cluster / cloud) ...? Pustaka spesifik apa yang akan digunakan / dibutuhkan aplikasi Anda, dan sudahkah Anda memeriksa apa yang tersedia dalam setiap bahasa? Apakah Anda hanya membangun aplikasi mainan untuk pembelajaran pribadi Anda atau apakah itu penting jika itu akan diproduksi? Menggunakan open-source atau proprietary? Apakah Anda akan bekerja dengan orang lain atau aplikasi yang ada, dan apa yang mereka gunakan / dukung? Frontend web / GUI? etc
smci
1
Satu pengamatan adalah bahwa Python lebih banyak digunakan oleh orang belajar mesin yang bekerja dengan dataset besar sementara R lebih banyak digunakan oleh "ahli statistik" tradisional, misalnya mereka yang bekerja dengan eksperimen psikologi dengan ratusan titik data. Padahal perbedaan itu mungkin berkurang.
xji
python sepanjang jalan manusia! Saya melakukan 4 kali hal yang dilakukan rekan saya dalam satu hari. Dan Anda dapat menggunakan python untuk semua jenis tugas pemrograman, tidak hanya pembelajaran mesin.
Francesco Pegoraro

Jawaban:

91

Beberapa perbedaan penting yang perlu dipertimbangkan ketika Anda memilih R atau Python satu sama lain:

  • Machine Learning memiliki 2 fase. Tahap Pembuatan Model dan Prediksi. Biasanya, pembangunan model dilakukan sebagai proses batch dan prediksi dilakukan secara real-time . Proses pembangunan model adalah proses intensif komputasi sedangkan prediksi terjadi secara sekejap. Oleh karena itu, kinerja suatu algoritma dalam Python atau R tidak benar-benar mempengaruhi waktu pembalikan pengguna. Python 1, R 1.
  • Produksi: Perbedaan nyata antara Python dan R adalah siap produksi. Python, karena itu adalah bahasa pemrograman yang lengkap dan banyak organisasi menggunakannya dalam sistem produksi mereka. R adalah perangkat lunak pemrograman statistik yang disukai oleh banyak akademisi dan karena meningkatnya ilmu data dan ketersediaan perpustakaan dan menjadi open source, industri ini mulai menggunakan R. Banyak organisasi ini memiliki sistem produksi mereka baik di Jawa, C ++, C #, Python dll. Jadi, idealnya mereka ingin memiliki sistem prediksi dalam bahasa yang sama untuk mengurangi masalah latensi dan pemeliharaan. Python 2, R 1.
  • Perpustakaan: Kedua bahasa memiliki perpustakaan yang sangat besar dan dapat diandalkan. R memiliki lebih dari 5000 perpustakaan yang melayani banyak domain sementara Python memiliki beberapa paket luar biasa seperti Pandas, NumPy, SciPy, Scikit Learn, Matplotlib . Python 3, R 2.
  • Pengembangan: Kedua bahasa merupakan bahasa yang diartikan. Banyak yang mengatakan bahwa python mudah dipelajari, hampir seperti membaca bahasa Inggris (untuk membuatnya lebih ringan) tetapi R membutuhkan upaya belajar lebih awal. Juga, keduanya memiliki IDE yang bagus (Spyder dll untuk Python dan RStudio untuk R). Python 4, R 2.
  • Kecepatan: Perangkat lunak R awalnya memiliki masalah dengan perhitungan besar (katakanlah, seperti perkalian matriks nxn). Namun, masalah ini diatasi dengan diperkenalkannya R oleh Revolution Analytics. Mereka telah menulis ulang operasi intensif komputasi dalam C yang sangat cepat. Python menjadi bahasa tingkat tinggi relatif lambat. Python 4, R 3.
  • Visualisasi: Dalam ilmu data, kita sering cenderung untuk memplot data untuk menampilkan pola kepada pengguna. Oleh karena itu, visualisasi menjadi kriteria penting dalam memilih perangkat lunak dan R sepenuhnya membunuh Python dalam hal ini. Terima kasih kepada Hadley Wickham untuk paket ggplot2 yang luar biasa. R menang telak. Python 4, R 4.
  • Berurusan dengan Big Data: Salah satu kendala R adalah menyimpan data dalam memori sistem (RAM). Jadi, kapasitas RAM menjadi kendala saat Anda menangani Big Data. Python bekerja dengan baik, tetapi saya akan mengatakan, karena R dan Python memiliki konektor HDFS, meningkatkan infrastruktur Hadoop akan memberikan peningkatan kinerja yang substansial. Jadi, Python 5, R 5.

Jadi, kedua bahasa sama baiknya. Karena itu, tergantung pada domain Anda dan tempat Anda bekerja, Anda harus dengan cerdas memilih bahasa yang tepat. Dunia teknologi biasanya lebih suka menggunakan satu bahasa. Pengguna bisnis (analitik pemasaran, analitik ritel) biasanya menggunakan bahasa pemrograman statistik seperti R, karena mereka sering melakukan prototyping cepat dan membangun visualisasi (yang lebih cepat dilakukan dalam R daripada Python).

binga
sumber
15
R hampir tidak bisa mengalahkan python dalam visualisasi. Saya pikir itu sebaliknya; tidak hanya python yang memiliki ggplot (yang tidak saya gunakan sendiri, karena ada lebih banyak pilihan pythonic, seperti seaborn ), ia bahkan dapat melakukan visualisasi interaktif di browser dengan paket-paket seperti bokeh .
Emre
10
R juga memiliki kemampuan untuk berinteraksi interaktif dengan Shiny.
stanekam
13
Pustakawan - Saya tidak setuju sama sekali dengan itu. Sejauh ini R adalah perangkat terkaya, dan lebih dari itu menyediakan informasi dengan cara yang tepat, sebagian dengan mewarisi S, sebagian oleh salah satu komunitas terbesar dari para ahli terkenal.
rapaio
34
"Kecepatan: perangkat lunak R awalnya memiliki masalah dengan perhitungan besar (katakanlah, seperti perkalian matriks nxn). Tetapi, masalah ini diatasi dengan pengenalan R oleh Revolution Analytics. Mereka telah menulis ulang operasi intensif perhitungan di C yang sangat cepat. Python menjadi bahasa tingkat tinggi relatif lambat. " Saya bukan pengguna R yang berpengalaman, tetapi sejauh yang saya tahu hampir semuanya dengan implementasi tingkat rendah di R juga memiliki implementasi tingkat rendah yang serupa di numpy / scipy / panda / scikit-learning / apa pun. Python juga memiliki numba dan cython. Poin ini harus menjadi dasi.
Dougal
8
Bagi Anda komentar "Berurusan dengan Big Data", saya ingin menambahkan bahwa python adalah salah satu dari 3 bahasa yang didukung oleh apache spark, yang memiliki kecepatan sangat tinggi. Komentar Anda tentang R memiliki C back end memang benar, tetapi begitu juga python, perpustakaan scikitlearn juga sangat cepat. Saya pikir posting Anda memiliki keseimbangan yang bagus, tetapi saya berpendapat bahwa kecepatan adalah setidaknya ikatan, dan skalabilitas (yaitu, menangani data besar) tentu saja mendukung python.
jagartner
23

Tidak ada yang seperti "python lebih baik" atau "R jauh lebih baik daripada x".

Satu-satunya fakta yang saya tahu adalah bahwa dalam industri ini banyak orang yang menggunakan python karena itulah yang mereka pelajari di universitas. Komunitas python sangat aktif dan memiliki beberapa kerangka kerja hebat untuk ML dan data mining dll.

Tetapi jujur, jika Anda mendapatkan c programmer yang baik, ia dapat melakukan hal yang sama seperti yang dilakukan orang dalam python atau r, jika Anda mendapatkan programmer java yang baik, ia juga dapat melakukan (hampir) semua yang ada di java.

Jadi tetap dengan bahasa yang Anda sukai.

Johnny000
sumber
5
Tapi bagaimana dengan perpustakaan? Ada paket R canggih (pikirkan Ranfom Forest atau Caret) yang sama sekali tidak praktis untuk diimplementasikan kembali dalam bahasa tujuan umum seperti C atau Java
Santiago Cepas
Mahout yaitu mendukung hutan acak untuk java
Johnny000
1
Ya mungkin, tapi R tidak memberikan kinerja yang Anda butuhkan untuk memproses set data besar dan sebagian besar waktu Anda memiliki kumpulan data yang sangat besar dalam penggunaan industri.
Johnny000
1
Ya, seorang programmer yang baik dapat melakukan hal yang sama dalam C. TAPI seorang programmer yang buruk dapat melakukannya dengan Python secepat seorang programmer yang berpengalaman dapat melakukannya dalam C.
Pithikos
1
Saya tidak berpikir itu selalu benar @Pithikos Mengingat rumus matematika yang mendasari, saya biasanya dapat mengimplementasikannya lebih cepat sendiri dengan VB / T-SQL lebih cepat dari yang saya bisa dengan mengarungi sintaksis misterius yang tidak perlu untuk perpustakaan R atau Python. Dan dalam prosesnya, buat kode yang dihasilkan jauh lebih skalabel. Saya senang perpustakaan ini ada tetapi ada kelemahan yang dibangun ke dalamnya; dalam beberapa situasi dan proyek tertentu lebih baik memotongnya.
SQLServerSteve
16

Beberapa pemikiran tambahan.

Bahasa pemrograman 'per se' hanya alat. Semua bahasa dirancang untuk membuat beberapa jenis konstruksi lebih mudah dibangun daripada yang lain. Dan pengetahuan dan penguasaan bahasa pemrograman lebih penting dan efektif daripada fitur bahasa itu dibandingkan dengan yang lain.

Sejauh yang saya bisa lihat ada dua dimensi dari pertanyaan ini. Dimensi pertama adalah kemampuan untuk mengeksplorasi, membangun bukti konsep atau model dengan cepat, akhirnya memiliki alat yang cukup untuk mempelajari apa yang sedang terjadi (seperti tes statistik, grafik, alat pengukuran, dll). Jenis kegiatan ini biasanya disukai oleh para peneliti dan ilmuwan data (saya selalu bertanya-tanya apa artinya itu, tetapi saya menggunakan istilah ini untuk definisi yang longgar). Mereka cenderung mengandalkan instrumen yang terkenal dan diverifikasi, yang dapat digunakan untuk bukti atau argumen.

Dimensi kedua adalah kemampuan untuk memperluas, mengubah, meningkatkan atau bahkan membuat alat, algoritma atau model. Untuk mencapai itu, Anda memerlukan bahasa pemrograman yang tepat. Kira-kira semuanya sama. Jika Anda bekerja untuk sebuah perusahaan, daripada Anda banyak bergantung pada infrastruktur perusahaan, budaya internal dan pilihan Anda berkurang secara signifikan. Juga, ketika Anda ingin menerapkan algoritma untuk penggunaan produksi, Anda harus memercayai implementasinya. Dan menerapkan dalam bahasa lain yang tidak Anda kuasai tidak akan banyak membantu Anda.

Saya cenderung menyukai jenis aktivitas pertama ekosistem R. Anda memiliki komunitas yang hebat, seperangkat alat yang sangat besar, bukti bahwa alat ini berfungsi seperti yang diharapkan. Juga, Anda dapat mempertimbangkan Python, Oktaf (untuk beberapa nama), yang merupakan kandidat yang dapat diandalkan.

Untuk tugas kedua, Anda harus berpikir sebelumnya pada apa yang benar-benar Anda inginkan. Jika Anda ingin alat siap produksi yang kuat, maka C / C ++, Java, C # adalah kandidat yang hebat. Saya menganggap Python sebagai warga negara kedua dalam kategori ini, bersama dengan Scala dan teman-teman. Saya tidak ingin memulai perang api, itu pendapat saya saja. Tetapi setelah lebih dari 17 tahun sebagai pengembang, saya cenderung memilih kontrak yang ketat dan pengetahuan saya, daripada kebebasan untuk melakukan apa pun yang Anda pikirkan (seperti yang terjadi dengan banyak bahasa dinamis).

Secara pribadi, saya ingin belajar sebanyak mungkin. Saya memutuskan bahwa saya harus memilih cara yang sulit, yang berarti menerapkan semuanya dari awal sendiri. Saya menggunakan R sebagai model dan inspirasi. Ia memiliki banyak harta di perpustakaan dan banyak pengalaman yang disuling. Namun, R sebagai bahasa pemrograman adalah mimpi buruk bagi saya. Jadi saya memutuskan untuk menggunakan Java, dan tidak menggunakan perpustakaan tambahan. Itu hanya karena pengalaman saya, dan tidak ada yang lain.

Jika Anda punya waktu, hal terbaik yang dapat Anda lakukan adalah meluangkan waktu dengan semua hal ini. Dengan cara ini Anda akan mendapatkan jawaban terbaik untuk diri Anda, cocok untuk Anda. Dijkstra pernah berkata bahwa alat memengaruhi cara Anda berpikir, jadi disarankan untuk mengetahui alat Anda sebelum membiarkan mereka membuat model bagaimana Anda berpikir. Anda dapat membaca lebih lanjut tentang itu di makalahnya yang terkenal bernama The Humble Programmer

rapaio
sumber
15

Saya akan menambahkan apa yang dikatakan orang lain sampai sekarang. Tidak ada jawaban tunggal bahwa satu bahasa lebih baik dari yang lain.

Karena itu, R memiliki komunitas yang lebih baik untuk eksplorasi dan pembelajaran data. Ini memiliki kemampuan visualisasi yang luas. Python, di sisi lain, telah menjadi lebih baik dalam menangani data sejak diperkenalkannya panda. Waktu belajar dan pengembangan sangat kurang dalam Python, dibandingkan dengan R (R menjadi bahasa tingkat rendah).

Saya pikir itu pada akhirnya bermuara pada eko-sistem Anda dan preferensi pribadi. Untuk detail lebih lanjut, Anda dapat melihat perbandingan ini di sini .

Kunal
sumber
2
"R memiliki komunitas yang lebih baik untuk [...] belajar" - Saya kira ini sangat tergantung pada jenis pembelajaran. Berapa banyak yang terjadi dengan jaringan saraf (sewenang-wenang arsitektur, CNN, RNN) di R?
Martin Thoma
1
R bukan IMO "tingkat rendah" yang sebenarnya. Itu juga bahasa yang dinamis.
xji
12

Tidak ada bahasa bullet perak yang dapat digunakan untuk memecahkan masing-masing dan setiap masalah terkait data. Pilihan bahasa tergantung pada konteks masalah, ukuran data dan jika Anda bekerja di tempat kerja Anda harus tetap pada apa yang mereka gunakan.

Secara pribadi saya menggunakan R lebih sering daripada Python karena perpustakaan visualisasi dan gaya interaktif. Tetapi jika saya membutuhkan lebih banyak kinerja atau kode terstruktur saya pasti menggunakan Python karena memiliki beberapa perpustakaan terbaik seperti SciKit-Learn, numpy, scipy dll. Saya menggunakan R dan Python dalam proyek-proyek saya secara bergantian.

Jadi jika Anda memulai pekerjaan sains data, saya sarankan Anda untuk mempelajari keduanya dan itu tidak sulit karena Python juga menyediakan antarmuka yang mirip dengan R dengan Pandas .

Jika Anda harus berurusan dengan kumpulan data yang jauh lebih besar, Anda tidak dapat melarikan diri dari sistem ramah lingkungan yang dibangun dengan Java (Hadoop, Pig, Hbase dll).

Kaushalya
sumber
8

Tidak ada bahasa "lebih baik". Saya telah mencoba keduanya dan saya merasa nyaman dengan Python jadi saya bekerja dengan Python saja. Meskipun saya masih belajar hal-hal, tetapi saya belum menemukan hambatan dengan Python sampai sekarang. Hal yang baik tentang Python adalah komunitas terlalu bagus dan Anda bisa mendapatkan banyak bantuan di Internet dengan mudah. Selain itu, saya akan mengatakan pergi dengan bahasa yang Anda suka bukan yang direkomendasikan orang.

Pensu
sumber
8

Dalam pengalaman saya, jawabannya tergantung pada proyek yang dihadapi. Untuk penelitian murni, saya lebih suka R karena dua alasan: 1) berbagai perpustakaan dan 2) banyak literatur ilmu data termasuk sampel R.

Jika proyek ini membutuhkan antarmuka interaktif untuk digunakan oleh orang awam, saya merasa R terlalu terbatas. Shiny adalah awal yang baik, tetapi belum cukup fleksibel. Dalam kasus ini, saya akan mulai melihat porting pekerjaan R saya ke Python atau js.

Inggris
sumber
8

Masalah yang tidak dapat diatasi oleh semua jawaban lainnya adalah perizinan .

Sebagian besar R perpustakaan indah tersebut adalah GPL (misalnya ggplot2 , data.table ). Ini mencegah Anda dari mendistribusikan perangkat lunak Anda dalam bentuk hak milik.

Meskipun banyak penggunaan perpustakaan tersebut tidak menyiratkan distribusi perangkat lunak (misalnya untuk melatih model offline), GPL dengan sendirinya memikat perusahaan untuk menggunakannya. Setidaknya dalam pengalaman saya.

Di dunia python, di sisi lain, sebagian besar perpustakaan memiliki lisensi distribusi yang ramah bisnis, seperti BSD atau MIT.

Di dunia akademis, masalah perizinan biasanya bukan masalah.

ncasas
sumber
6

Salah satu tantangan nyata, saya berhadapan dengan R adalah paket yang berbeda kompatibel dengan versi yang berbeda .. cukup banyak paket R tidak tersedia untuk versi terbaru dari R .. Dan R beberapa kali memberikan kesalahan karena perpustakaan atau paket ditulis untuk yang lebih tua versi..

Ram
sumber
3
Saya tidak yakin ini adalah masalah khusus dengan R, atau itu menjawab pertanyaan tentang bagaimana Python dan R berbeda.
Sean Owen
5

Saya belum mencoba R (well, sedikit, tetapi tidak cukup untuk membuat perbandingan yang baik). Namun, berikut adalah beberapa kekuatan Python:

  • Sintaks sangat intuitif : tuple membongkar, element in a_list, for element in sequence, matrix_a * matrix_b(untuk perkalian matriks), ...
  • Banyak perpustakaan :
    • scipy : perhitungan ilmiah; banyak bagiannya hanya pembungkus untuk kode Fortran yang cukup cepat
    • theano > Lasagne > nolearn : Perpustakaan untuk jaringan saraf - mereka dapat dilatih menggunakan GPU (diperlukan nvidia, CUDA) tanpa penyesuaian apa pun
    • sklearn : Algoritma pembelajaran umum
  • Komunitas yang baik :
  • Notebook IPython
  • Lain-lain :
    • Array 0-diindeks ... Saya membuat kesalahan itu sepanjang waktu dengan R.
    • Struktur paket yang sudah mapan
    • Dukungan yang baik untuk menguji kode Anda
Martin Thoma
sumber
3

Saya lebih suka Python daripada R karena Python adalah bahasa pemrograman yang lengkap sehingga saya bisa melakukan tugas-tugas pembelajaran mesin ujung ke ujung seperti mengumpulkan data menggunakan server HTTP yang ditulis dengan Python, melakukan tugas-tugas ML tingkat lanjut dan kemudian menerbitkan hasilnya secara online. Ini semua bisa dilakukan dengan Python. Saya benar-benar menemukan R lebih sulit untuk dipelajari dan imbalan untuk belajar Python jauh lebih besar karena dapat digunakan untuk hampir semua tugas pemrograman.

Dave Julian
sumber
2
Anda dapat melakukan semua 3 hal itu dengan sangat mudah di R
Gaius
2

R: R adalah mitra sumber terbuka. yang secara tradisional telah digunakan dalam bidang akademik dan penelitian. Karena sifatnya yang open source, teknik terbaru bisa dirilis dengan cepat. Ada banyak dokumentasi yang tersedia melalui internet dan ini merupakan pilihan yang sangat hemat biaya. Python: Dengan originasi sebagai bahasa scripting open source, penggunaan Python telah berkembang seiring waktu. Hari ini, itu perpustakaan olahraga (numpy, scipy dan matplotlib) dan fungsi untuk hampir semua operasi statistik / bangunan model yang mungkin ingin Anda lakukan. Sejak diperkenalkannya panda, panda menjadi sangat kuat dalam operasi data terstruktur.

Kode Python

Impor Perpustakaan

Impor perpustakaan lain yang diperlukan seperti panda, numpy ...

dari sklearn import linear_model

Muat dataset Train dan Test

Identifikasi fitur dan variabel respon dan nilai harus berupa array numerik dan numpy

x_train = input_variables_values_training_datasets y_train = target_variables_values_training_datasets x_test = input_variables_values_test_datasets

Buat objek regresi linier

linear = linear_model.LinearRegression ()

Latih model menggunakan set pelatihan dan periksa skor

linear.fit (x_train, y_train) linear.score (x_train, y_train)

Koefisien persamaan dan Intercept

print ('Koefisien: \ n', linear.coef_) print ('Intercept: \ n', linear.intercept_)

Prediksi Output

diprediksi = linear.predict (x_test) R Code

Muat dataset Train dan Test

Identifikasi fitur dan variabel respon dan nilai harus berupa array numerik dan numpy

x_train <- input_variables_values_training_datasets y_train <- target_variables_values_training_datasets x_test <- input_variables_values_test_datasets x <- cbind (x_train, y_train)

Latih model menggunakan set pelatihan dan periksa skor

ringkasan <- lm (y_train ~., data = x) (linear)

Prediksi Output

prediksi = prediksi (linear, x_test)

dileep balineni
sumber
0

Saya tidak berpikir Python memiliki GUI titik-klik yang mengubahnya menjadi SPSS dan SAS. Bermain-main dengan itu benar-benar menyenangkan.

ran8
sumber
0

masukkan deskripsi gambar di sini

Saya mendapat gambar ini di pos yang tertaut. Setiap kali saya ragu menggunakan python atau R, saya melihatnya dan terbukti sangat berguna.

Arun
sumber
Jadi apa yang kamu pilih?
Serhii Polishchuk