Makine öğrenmesi için Python vs R


101

Daha yeni akademik amaçlı bir makine öğrenme uygulaması geliştirmeye başladım . Şu anda R kullanıyorum ve kendimi eğitiyorum. Ancak birçok yerde Python'u kullanan insanlar gördüm .

Akademi ve endüstride insanlar ne kullanıyor ve tavsiye nedir?


3
Peki, ne tür makine öğrenmesi (resim / video? NLP? Finansal? Astronomi?), Hangi sınıflayıcılar, hangi boyutta veri setleri (Mb? Gb? Tb?), Hangi ölçek, hangi gecikme, hangi platformda (mobil / tek bilgisayarlı) / çok çekirdekli / küme / bulut) ...? Uygulamanız hangi kütüphaneleri kullanacak / ihtiyaç duyacak ve her dilde neyin uygun olduğunu kontrol ettiniz mi? Kişisel öğreniminiz için bir oyuncak uygulaması mı oluşturuyorsunuz yoksa hiç üretkenleşmesi önemli mi? Açık kaynaklı veya tescilli kullanma? Diğer insanlarla veya mevcut uygulamalarla çalışacak mısınız ve ne kullanıyor / destekliyorlar? Web ön yüzü / GUI? etc
smci

1
Bir gözlem, Python'un büyük veri setleriyle çalışan makine öğrenen insanlar tarafından daha çok kullanıldığı, R'nin daha çok geleneksel "istatistikçiler" tarafından kullanıldığı, örneğin yüzlerce veri noktasıyla psikoloji deneyleri ile çalışanlar olduğu. Rağmen bu fark azalabilir.
xji

tüm yolu python adam! Meslektaşlarımın bir günde yaptığı şeylerin 4 katı yapıyorum. Ayrıca, pitonu yalnızca makine öğrenmesi için değil, her türlü programlama işi için kullanabilirsiniz.
Francesco Pegoraro

Yanıtlar:


91

Birbirinden R veya Python seçerken göz önünde bulundurmanız gereken bazı önemli farklılıklar :

  • Makine Öğrenmenin 2 aşaması vardır. Model Oluşturma ve Tahmin aşaması. Tipik olarak, model oluşturma toplu işlem olarak gerçekleştirilir ve tahminler gerçek zamanlı olarak yapılır . Model oluşturma işlemi, hesaplama bir süreç içerisinde gerçekleşirken, hesaplama yoğun bir süreçtir. Bu nedenle, bir algoritmanın Python veya R'deki performansı, kullanıcının geri dönüş süresini gerçekten etkilemez. Python 1, R1.
  • Üretim: Python ve R arasındaki asıl fark, üretime hazır hale gelmesidir. Python, tam teşekküllü bir programlama dilidir ve birçok kuruluş bunu kendi üretim sistemlerinde kullanır. R, birçok akademinin tercih ettiği bir istatistiksel programlama yazılımıdır ve veri bilimindeki artış ve kütüphanelerin kullanılabilirliği ve açık kaynak olması nedeniyle, endüstri R'yi kullanmaya başlamıştır. Bu kuruluşların birçoğunun Java, C ++, C #, Python vb. İdeal olarak , gecikme ve bakım sorunlarını azaltmak için öngörü sisteminin aynı dilde olmasını isterler . Python 2, R1.
  • Kütüphaneler: Her iki dilde de muazzam ve güvenilir kütüphaneler var. Python'un Pandas, NumPy, SciPy, Scikit Learn, Matplotlib gibi inanılmaz paketleri var . Python 3, R2.
  • Gelişim: Her iki dil de yorumlanmış dillerdir. Birçoğu python'un öğrenmesinin kolay olduğunu söylüyor, neredeyse İngilizce okumak gibi (daha hafif bir notu koymak için) ancak R daha fazla ilk çalışma çabası gerektiriyor. Ayrıca, her ikisinde de iyi IDE'ler var (Python için Spyder vb. R için RStudio). Python 4, R2.
  • Hız: R yazılımı başlangıçta büyük hesaplamalarda problem yaşıyordu (örneğin, nxn matris çarpımları gibi). Ancak bu konu, R'nin Revolution Analytics tarafından tanıtılmasıyla ele alınmıştır. C'ye, caydırıcı derecede hızlı olan hesaplama yoğun işlemlerini yeniden yazdılar. Python'un yüksek düzeyde bir dil olması nispeten yavaş. Python 4, R3.
  • Görselleştirmeler: Veri biliminde, sık sık kullanıcılara kalıpları göstermek için veri çizme eğilimindeyiz. Bu nedenle, görselleştirmeler bir yazılım seçiminde önemli bir kriter haline gelir ve R, bu konuda Python'u tamamen öldürür. İnanılmaz bir ggplot2 paketi için Hadley Wickham'a teşekkürler. R eller aşağı kazanır. Python 4, R4.
  • Büyük Veri ile Başa Çıkma: R'nin kısıtlamalarından biri, verileri sistem belleğinde (RAM) depolamasıdır. Bu nedenle, Büyük Veriyi kullanırken RAM kapasitesi bir kısıtlama haline gelir. Python gayet iyi, ancak hem R hem de Python'un HDFS konektörleri olduğundan, Hadoop altyapısının güçlendirilmesinde önemli bir performans artışı sağlayacağını söyleyebilirim. Öyleyse, Python 5, R5.

Yani, her iki dil de eşit derecede iyi. Bu nedenle, etki alanınıza ve çalıştığınız yere bağlı olarak, doğru dili akıllıca seçmeniz gerekir. Teknoloji dünyası genellikle tek bir dil kullanmayı tercih ediyor. Ticari kullanıcılar (pazarlama analitiği, perakende analitiği) genellikle R gibi istatistiksel programlama dilleri ile birlikte gelir, çünkü sıklıkla hızlı prototipleme yaparlar ve görselleştirmeler yaparlar (R'de Python'dan daha hızlı yapılır).


15
R, görselleştirmede pitonu yenmez. Bence bunun tam tersi; python'un sadece ggplot'u yok (ki kendimi kullanmıyorum, çünkü seaborn gibi daha fazla pythonic seçenek var ), tarayıcıda bokeh gibi paketlerle etkileşimli görselleştirme bile yapabiliyor .
Emre

10
Ayrıca R, Shiny ile etkileşime girme yeteneğine sahiptir.
stanekam

13
Kütüphaneciler - Buna kesinlikle katılmıyorum. R bugüne kadarki en zengin araç setidir ve bundan fazlasını, kısmen S'nin miras alınmasıyla, kısmen en büyük saygın uzmanlar topluluğunun biri tarafından bilgiyi sağlar.
rapaio

34
"Hız: R yazılımı başlangıçta büyük hesaplamalar konusunda sorun yaşıyordu (örneğin, nxn matris çarpımları gibi). Ancak, bu sorun, R'nin Revolution Analytics'in tanıtımıyla ele alındı. Python'un yüksek düzeyde bir dil olması nispeten yavaş. " Ben deneyimli bir R kullanıcısı değilim, fakat bildiğim kadarıyla R'deki düşük seviye uygulamalara sahip her şeyi bildiğim kadarıyla numpy / scipy / pandas / scikit-learn / neyse de benzer bir düşük seviye uygulama var. Python da numba ve cython'a sahiptir. Bu nokta bir kravat olmalıdır.
Dougal

8
"Büyük Veri ile Başa Çıkma" yorumu için, python'un yanan hızlı hızlara sahip olan apache spark'ın desteklediği 3 dilden biri olduğunu ekleyeceğim. R'nin C arka ucuna sahip olduğu hakkındaki yorumunuz doğrudur, ancak scikitlearn kütüphanesinin python'u da çok hızlıdır. Yazınızın iyi bir dengeye sahip olduğunu düşünüyorum, ancak hızın en azından bir bağ olduğunu ve ölçeklenebilirliğin (yani büyük verileri kullanmak) kesinlikle python lehine olduğunu iddia ediyorum.
jagartner

23

"Python daha iyi" ya da "R, x'ten daha iyi" gibi bir şey yoktur.

Bildiğim tek gerçek, endüstride insanların her yerinin pitona sadık kalması çünkü üniversitede öğrendikleri şey bu. Python topluluğu gerçekten aktiftir ve ML ve veri madenciliği vb. İçin birkaç harika çerçeveye sahiptir.

Ama dürüst olmak gerekirse, iyi bir c programcısı elde ederseniz, o insanlar python veya r ile aynı şeyi yapabilir, eğer iyi bir java programcısı varsa, java'daki her şeyi de (yakın) yapabilir.

Bu yüzden sadece rahat olduğunuz dili kullanın.


5
Peki ya kütüphaneler? Böyle bize C veya Java genel amaçlı bir dilde yeniden uygulamaya tamamen kullanışsız olacağını ileri R paketleri (Ranfom Ormanı veya şapka düşünmek) vardır
Santiago Cepas

mahout yani, java için rasgele ormanı destekliyor
Johnny000

1
Evet belki, ama R, büyük veri setlerini işlemek için ihtiyaç duyduğunuz performansı ve çoğu zaman endüstriyel kullanımda gerçekten büyük veri setlerine sahip olmanıza neden olmaz.
Johnny000,

1
Evet, iyi bir programcı C. Aynı yapabilirsiniz AMA kötü programcı kadar hızlı deneyimli programcı C. bunu yapabilir olarak Python bunu yapabilir
Pithikos

1
Bunun her zaman doğru olduğunu sanmıyorum @Pithikos Temel matematik formülleri göz önüne alındığında, onları genellikle kendimden daha hızlı bir şekilde VB / T-SQL ile kendimden daha hızlı bir şekilde uygulayabilirim. Ve bu sırada ortaya çıkan kodu daha ölçeklenebilir hale getirin. Bu kütüphanelerin var olmasına sevindim, fakat içinde yerleşik olumsuz yönleri var; Bazı durumlarda ve belirli projelerde onları atlamak daha iyidir.
SQLServerSteve

16

Bazı ek düşünceler.

'Per se' programlama dili sadece bir araçtır. Tüm diller, bazı yapı türlerini diğerlerinden daha kolay inşa etmek için tasarlanmıştır. Bir programlama dilinin bilgisi ve ustalığı, diğerlerine kıyasla o dilin özelliklerinden daha önemli ve etkilidir.

Görebildiğim kadarıyla bu sorunun iki boyutu var. İlk boyut, kavramların veya modellerin hızlı bir şekilde keşfedilmesi, kanıtlanması, sonunda ne olup bittiğini incelemek için yeterli araçlara sahip olmaktır (istatistiksel testler, grafikler, ölçüm araçları vb.). Bu tür faaliyetler genellikle araştırmacılar ve veri bilimcileri tarafından tercih edilir (bunun ne anlama geldiğini merak ediyorum ama bu terimi gevşek tanımı için kullanıyorum). Kanıtlar veya argümanlar için kullanılabilecek iyi bilinen ve doğrulanmış araçlara güvenme eğilimindedirler.

İkinci boyut, araçları, algoritmaları veya modelleri genişletme, değiştirme, iyileştirme ve hatta oluşturma yeteneğidir. Bunu başarmak için uygun bir programlama diline ihtiyacınız var. Kabaca hepsi aynıdır. Bir şirket için çalışıyorsanız, şirketin altyapısına çok fazla bağımlı olduğunuzdan, iç kültür ve seçimleriniz önemli ölçüde azalır. Ayrıca, üretim kullanımı için bir algoritma uygulamak istediğinizde, uygulamaya güvenmeniz gerekir. Üstat olmayan başka bir dilde uygulamak size pek yardımcı olmaz.

R ekosisteminin ilk faaliyet türü için lehte olma eğilimindeyim. Harika bir topluluğunuz var, çok büyük bir araç seti, bu araçların beklendiği gibi çalıştığını kanıtlıyorsunuz. Ayrıca, güvenilir aday olan Python, Octave (birkaç isim) düşünebilirsiniz.

İkinci görev için, daha önce gerçekten ne istediğinizi düşünmek zorundasınız. Sağlam üretime hazır araçlar istiyorsanız, C / C ++, Java, C # mükemmel adaylardır. Python'u Scala ve arkadaşlarıyla birlikte bu kategoride ikinci bir vatandaş olarak görüyorum. Bir alev savaşı başlatmak istemiyorum, bu sadece benim görüşüm. Ancak bir geliştirici olarak 17 yıldan fazla bir süre sonra, aklınıza gelebilecek her şeyi yapma özgürlüğünden ziyade katı bir sözleşmeyi ve bilgimi tercih etme eğilimindeyim (birçok dinamik dilde olduğu gibi).

Şahsen mümkün olduğu kadar çok şey öğrenmek istiyorum. Zor yolu seçmem gerektiğine karar verdim, bu da her şeyi sıfırdan uygulamak anlamına geliyor. R'yi model ve ilham kaynağı olarak kullanıyorum. Kütüphanelerde büyük hazineleri ve damıtılmış birçok deneyimi var. Ancak, programlama dili olarak R benim için bir kabustur. Bu yüzden Java'yı kullanmaya karar verdim ve ek bir kütüphane kullanmadım. Bu sadece benim deneyimimden başka bir şey değil.

Vaktiniz varsa, yapabileceğiniz en iyi şey, bunlarla biraz zaman geçirmek. Bu şekilde kendiniz için mümkün olan en iyi cevabı kazanacaksınız. Dijkstra, araçların düşünce biçiminizi etkilediğini, bu yüzden nasıl düşündüğünüzü modellemelerine izin vermeden önce araçlarınızı tanımanız önerilir. The Humble Programmer adlı ünlü makalesinde bunun hakkında daha fazla bilgi edinebilirsiniz.


15

Şimdiye kadar başkalarının söylediklerini de eklerdim. Bir dilin diğerinden daha iyi olduğuna dair tek bir cevap yoktur.

Bunu söyledikten sonra, R veri keşfi ve öğrenme için daha iyi bir topluluğa sahiptir. Kapsamlı görselleştirme yeteneklerine sahiptir. Python ise pandaların tanıtılmasından bu yana veri işlemede daha iyi bir hale geldi. Python'da öğrenme ve gelişme süresi, R'ye göre çok düşüktür (R, düşük seviye bir dildir).

Sonunda içinde bulunduğun çevre sistemine ve kişisel tercihlere bağlı. Daha fazla ayrıntı için bu karşılaştırmaya buradan bakabilirsiniz .


2
“R'nin [...] öğrenme için daha iyi bir toplumu var” - Sanırım bu, öğrenme türüne oldukça bağlı. R'de sinir ağları (ileri beslemeli keyfi mimariler, CNN'ler, RNN'ler) ile ne kadar devam ediyor?
Martin Thoma

1
R gerçekten bu "düşük seviye" IMO değil. Aynı zamanda dinamik bir dil.
xji

12

Verilerle ilgili her sorunu çözmek için kullanılabilecek bir gümüş kurşun dili yoktur. Dil seçimi problemin içeriğine, verilerin boyutuna bağlıdır ve bir işyerinde çalışıyorsanız, kullandıklarına bağlı kalmak zorundasınız.

Şahsen, görselleştirme kütüphaneleri ve etkileşimli stili nedeniyle R'yi Python'dan daha sık kullanıyorum. Ancak daha fazla performans veya yapısal koda ihtiyacım olursa, kesinlikle Python kullanıyorum çünkü SciKit-Learn, numpy, scipy vb. Gibi en iyi kütüphanelerden bazılarına sahip. Projelerimde hem R hem de Python kullanıyorum.

Eğer veri bilimi çalışmasına başlıyorsanız, her ikisini de öğrenmenizi öneririm, çünkü Python da R'lere Panda'larla benzer bir arayüz sağlıyor. .

Daha büyük veri kümeleriyle uğraşmak zorundaysanız, Java (Hadoop, Pig, Hbase vb.) İle oluşturulmuş eko sistemlerden kaçamazsınız.


8

"Daha iyi" bir dil yok. İkisini de denedim ve Python konusunda rahatım, bu yüzden sadece Python ile çalışıyorum. Hala bir şeyler öğreniyorum, ancak şimdiye kadar Python ile barikatla karşılaşmadım. Python ile ilgili iyi bir şey topluluktur çok iyi ve kolayca internette çok yardım alabilirsiniz. Bunun dışında, insanların tavsiye etmediği bir dile gitmek istediğini söyleyebilirim.


8

Tecrübelerime göre cevap eldeki projeye bağlı. Saf araştırma için, iki nedenden dolayı R'yi tercih ederim: 1) çok çeşitli kütüphaneler ve 2) veri bilimi literatürünün çoğunda R örnekleri bulunur.

Proje meslekten olmayanlar tarafından kullanılmak üzere etkileşimli bir arayüz gerektiriyorsa, R'nin çok sınırlı olduğunu gördüm. Parlaklık harika bir başlangıç, ancak henüz yeterince esnek değil. Bu durumlarda, R çalışmamın Python veya js ile taşınmasına bakmaya başlayacağım.


8

Diğer tüm cevapların ele almaması sorunu lisanslamadır .

Yukarıda belirtilen harika R kütüphanelerinin çoğu GPL'dir (örneğin, ggplot2 , data.table ). Bu , yazılımınızı özel bir biçimde dağıtmanızı önler .

Bu kitaplıkların birçok kullanımı, yazılımın dağıtılmasını gerektirmese de (örneğin, modelleri çevrimdışı olarak eğitmek için), GPL, şirketleri kullanmaktan kendi başlarına uzaklaştırabilir. En azından benim deneyimimde.

Python aleminde ise çoğu kütüphanede BSD veya MIT gibi işletme dostu dağıtım lisansları bulunmaktadır.

Akademi'de lisans sorunları normalde sorun değildir.



6

R, ile karşılaştığım en büyük zorluklardan biri, farklı sürümlerle uyumlu farklı paketler. versiyon ..


3
Bunun R ile ilgili belirli bir sorun olduğundan veya Python ve R'nin nasıl farklı olduğu sorusuna yanıt verdiğinden emin değilim.
Sean Owen

5

R denemedim (peki, biraz, ama iyi bir karşılaştırma yapmak için yeterli değil). Ancak, işte bazı Pythons güçlü yönleri:

  • Çok sezgisel sözdizimi : tuple açma, element in a_list, for element in sequence, matrix_a * matrix_b(matriks çoğalması için), ...
  • Birçok kütüphane :
    • scipy : Bilimsel hesaplamalar; birçoğu sadece hızlı Fortran kodu için sarmalayıcılar.
    • theano > Lasagne > nolearn : Yapay sinir ağları için kütüphaneler - herhangi bir ayarlama olmadan GPU'da (nvidia, CUDA gereklidir) eğitilebilirler
    • sklearn : Genel öğrenme algoritmaları
  • İyi topluluk :
  • IPython dizüstü bilgisayarlar
  • Çeşitli :
    • 0 dizinli diziler ... Bu hatayı her zaman R ile yaptım.
    • Kurulan paket yapıları
    • Kodunuzu test etmek için iyi destek

3

Python'u R yerine Python'u tercih ediyorum çünkü Python tam bir programlama dilidir, böylece Python'da yazılmış bir HTTP sunucusunu kullanarak veri toplama, ileri düzey ML görevleri gerçekleştirme ve sonuçları çevrimiçi yayınlama gibi makine öğrenme görevlerini sona erdirebilirim. Bunların hepsi Python'da yapılabilir. Aslında R'yi öğrenmenin daha zor olduğunu ve Python'u öğrenmenin getirilerini çok daha fazla bulduğum için, hemen hemen her türlü programlama işi için kullanılabildiğini gördüm.


2
Tüm bu 3 şeyi R
Gaius

2

R: R, Açık kaynak meslektaşıdır. geleneksel olarak akademisyenler ve araştırmalarda kullanılmıştır. Açık kaynaklı olması nedeniyle en yeni teknikler hızla serbest bırakılıyor. İnternet üzerinden birçok dokümantasyon mevcuttur ve bu çok uygun maliyetli bir seçenektir. Python: Açık kaynaklı bir betik dili olarak oluşturulmuş olan Python kullanımı zamanla artmıştır. Bugün, kütüphaneleri (numpy, scipy ve matplotlib) spor yapıyor ve yapmak isteyebileceğiniz hemen hemen tüm istatistiksel işlem / model oluşturma işlevlerini yerine getiriyor. Pandaların tanıtılmasından bu yana, yapılandırılmış veri operasyonlarında çok güçlendi.

Python Kodu

Kütüphaneyi İçe Aktar

Pandalar, numpy gibi diğer gerekli kütüphaneleri içe aktarın ...

sklearn'den içe aktarma linear_model

Tren ve Test veri setlerini yükleyin

Özellik ve yanıt değişkenlerini tanımlayın ve değerler sayısal ve sayısal diziler olmalıdır

x_train = input_variables_values_training_datasets y_train = target_variables_values_training_datasets x_test = input_variables_values_test_datasets

Doğrusal regresyon nesnesi oluşturma

linear = linear_model.LinearRegression ()

Eğitim setlerini kullanarak modeli eğitin ve puanı kontrol edin

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

Denklem katsayısı ve Kesişim

print ('Katsayısı: \ n', linear.coef_) print ('Intercept: \ n', linear.intercept_)

Çıktıyı Tahmin Et

tahmini = linear.predict (x_test) R Kodu

Tren ve Test veri setlerini yükleyin

Özellik ve yanıt değişkenlerini tanımlayın ve değerler sayısal ve sayısal diziler olmalıdır

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

Eğitim setlerini kullanarak modeli eğitin ve puanı kontrol edin

doğrusal <- lm (y_train ~., veri = x) özeti (doğrusal)

Çıktıyı Tahmin Et

tahmini = tahmin (doğrusal, x_test)


0

Python'un SPSS ve SAS'a çeviren GUI'ye sahip olduğunu sanmıyorum . Bunlarla uğraşmak gerçekten eğlenceli.


0

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

Bu görüntüyü linkedin yazılarında aldım. Ne zaman python veya R kullandığımdan şüphelensem, onu inceliyorum ve çok faydalı olduğunu kanıtlıyor.


Peki ne seçersin?
Serhii Polishchuk
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.