Python vs R cho máy học


101

Tôi mới bắt đầu phát triển một ứng dụng học máy cho mục đích học tập. Tôi hiện đang sử dụng R và đào tạo bản thân trong đó. Tuy nhiên, ở rất nhiều nơi, tôi đã thấy mọi người sử dụng Python .

Những người đang sử dụng trong học viện và ngành công nghiệp, và khuyến nghị là gì?


3
Chà, kiểu học máy nào (hình ảnh / video? NLP? Tài chính? Thiên văn học?), Phân loại nào, bộ dữ liệu kích thước nào (Mb? Gb? Tb?), Quy mô nào, độ trễ nào, trên nền tảng nào (di động / máy tính đơn / đa lõi / cụm / đám mây) ...? Những thư viện cụ thể nào ứng dụng của bạn sẽ sử dụng / cần, và bạn đã kiểm tra những gì có sẵn trong mỗi ngôn ngữ chưa? Bạn chỉ đang xây dựng một ứng dụng đồ chơi cho việc học cá nhân của bạn hay nó có quan trọng nếu nó được sản xuất? Sử dụng nguồn mở hay độc quyền? Bạn sẽ làm việc với người khác hoặc các ứng dụng hiện có và họ sử dụng / hỗ trợ gì? Giao diện web / GUI? vv
smci

1
Một quan sát là Python được sử dụng nhiều hơn bởi những người học máy làm việc với các bộ dữ liệu lớn trong khi R được sử dụng nhiều hơn bởi các "nhà thống kê" truyền thống, ví dụ như những người làm việc với các thí nghiệm tâm lý học với hàng trăm điểm dữ liệu. Mặc dù sự khác biệt đó có thể giảm dần.
xji

python tất cả các cách người đàn ông! Tôi làm 4 lần những việc mà đồng nghiệp của tôi làm trong một ngày. Và bạn có thể sử dụng python cho tất cả các loại nhiệm vụ lập trình, không chỉ học máy.
Francesco Pegoraro

Câu trả lời:


91

Một số khác biệt quan trọng thực sự cần xem xét khi bạn chọn R hoặc Python thay cho nhau:

  • Học máy có 2 giai đoạn. Xây dựng mô hình và giai đoạn Dự đoán. Thông thường, việc xây dựng mô hình được thực hiện như một quy trình hàng loạt và dự đoán được thực hiện theo thời gian thực . Quá trình xây dựng mô hình là một quy trình chuyên sâu tính toán trong khi dự đoán xảy ra trong nháy mắt. Do đó, hiệu suất của thuật toán trong Python hoặc R không thực sự ảnh hưởng đến thời gian quay vòng của người dùng. Trăn 1, R 1.
  • Sản xuất: Sự khác biệt thực sự giữa Python và R là sẵn sàng sản xuất. Python, như vậy là một ngôn ngữ lập trình đầy đủ và nhiều tổ chức sử dụng nó trong các hệ thống sản xuất của họ. R là một phần mềm lập trình thống kê được nhiều học giả ưa chuộng và do sự gia tăng của khoa học dữ liệu và tính sẵn có của các thư viện và là nguồn mở, ngành công nghiệp đã bắt đầu sử dụng R. Nhiều trong số các tổ chức này có hệ thống sản xuất của họ bằng Java, C ++, C #, Python v.v ... Vì vậy, lý tưởng nhất là họ muốn có hệ thống dự đoán trong cùng một ngôn ngữ để giảm các vấn đề về độ trễ và bảo trì. Trăn 2, R 1.
  • Thư viện: Cả hai ngôn ngữ đều có thư viện khổng lồ và đáng tin cậy. R có hơn 5000 thư viện phục vụ cho nhiều miền trong khi Python có một số gói đáng kinh ngạc như Pandas, NumPy, SciPy, Scikit Learn, Matplotlib . Trăn 3, R 2.
  • Phát triển: Cả hai ngôn ngữ là ngôn ngữ giải thích. Nhiều người nói rằng trăn rất dễ học, nó gần giống như đọc tiếng Anh (để đặt nó trên một ghi chú nhẹ hơn) nhưng R đòi hỏi nhiều nỗ lực học tập ban đầu hơn. Ngoài ra, cả hai đều có IDE tốt (Spyder vv cho Python và RStudio cho R). Trăn 4, R 2.
  • Tốc độ: Phần mềm R ban đầu có vấn đề với các tính toán lớn (ví dụ như phép nhân ma trận nxn). Nhưng, vấn đề này được giải quyết với việc giới thiệu R bởi Revolution Analytics. Họ đã viết lại các hoạt động chuyên sâu tính toán trong C rất nhanh. Python là một ngôn ngữ cấp cao tương đối chậm. Trăn 4, R 3.
  • Trực quan hóa: Trong khoa học dữ liệu, chúng tôi thường có xu hướng vẽ dữ liệu để hiển thị các mẫu cho người dùng. Do đó, trực quan hóa trở thành một tiêu chí quan trọng trong việc lựa chọn một phần mềm và R hoàn toàn giết chết Python trong vấn đề này. Cảm ơn Hadley Wickham cho một gói ggplot2 đáng kinh ngạc. R thắng tay xuống. Trăn 4, R 4.
  • Xử lý dữ liệu lớn: Một trong những hạn chế của R là lưu trữ dữ liệu trong bộ nhớ hệ thống (RAM). Vì vậy, dung lượng RAM trở thành một hạn chế khi bạn xử lý Dữ liệu lớn. Python làm tốt, nhưng tôi có thể nói, vì cả R và Python đều có các đầu nối HDFS, việc tận dụng cơ sở hạ tầng Hadoop sẽ giúp cải thiện hiệu suất đáng kể. Vì vậy, Python 5, R 5.

Vì vậy, cả hai ngôn ngữ đều tốt như nhau. Do đó, tùy thuộc vào tên miền của bạn và nơi bạn làm việc, bạn phải khéo léo chọn ngôn ngữ phù hợp. Thế giới công nghệ thường thích sử dụng một ngôn ngữ duy nhất. Người dùng doanh nghiệp (phân tích tiếp thị, phân tích bán lẻ) thường đi với các ngôn ngữ lập trình thống kê như R, vì họ thường thực hiện tạo mẫu nhanh và xây dựng trực quan (được thực hiện nhanh hơn trong R so với Python).


15
R hầu như không đánh bại con trăn trong hình dung. Tôi nghĩ nó đúng hơn là ngược lại; Con trăn không chỉ có ggplot (mà tôi không sử dụng bản thân mình, vì có nhiều tùy chọn pythonic hơn, như seaborn ), nó thậm chí còn có thể thực hiện trực quan tương tác trong trình duyệt với các gói như Bo mạch .
Emre

10
Ngoài ra R có khả năng tương tác viz với Shiny.
stanekam

13
Thủ thư - Tôi hoàn toàn không đồng ý với điều đó. R cho đến nay là bộ công cụ phong phú nhất và hơn thế nữa, nó cung cấp thông tin một cách thích hợp, một phần bằng cách kế thừa S, một phần bởi một trong những cộng đồng lớn nhất của các chuyên gia có uy tín.
rapaio

34
"Tốc độ: Phần mềm R ban đầu có vấn đề với các tính toán lớn (ví dụ như nhân ma trận nxn). Nhưng, vấn đề này được giải quyết với việc giới thiệu R bởi Revolution Analytics. Họ đã viết lại các hoạt động chuyên sâu tính toán trong C rất nhanh. Python là một ngôn ngữ cấp cao tương đối chậm. " Tôi không phải là người dùng R có kinh nghiệm, nhưng theo như tôi biết hầu hết mọi thứ với việc triển khai ở cấp độ thấp trong R cũng có một triển khai cấp thấp tương tự trong numpy / scipy / pandas / scikit-learn / bất cứ điều gì. Python cũng có numba và cython. Điểm này nên là một tie.
Dougal

8
Đối với bạn nhận xét "Xử lý dữ liệu lớn", tôi sẽ nói thêm rằng python là một trong 3 ngôn ngữ được hỗ trợ bởi tia lửa apache, có tốc độ nhanh. Nhận xét của bạn về R có kết thúc C là đúng, nhưng thư viện scikitlearn cũng rất nhanh. Tôi nghĩ rằng bài đăng của bạn có sự cân bằng tốt, nhưng tôi cho rằng tốc độ ít nhất là một sự ràng buộc và khả năng mở rộng (nghĩa là xử lý dữ liệu lớn) chắc chắn có lợi cho python.
jagartner

23

Không có gì như "python is better" hay "R tốt hơn nhiều so với x".

Sự thật duy nhất tôi biết là trong ngành công nghiệp, mọi người đều dính vào trăn vì đó là những gì họ học được ở trường đại học. Cộng đồng python thực sự hoạt động và có một vài khung tuyệt vời để khai thác dữ liệu và ML, v.v.

Nhưng thành thật mà nói, nếu bạn có một lập trình viên c giỏi, anh ta có thể làm giống như mọi người làm trong python hoặc r, nếu bạn có một lập trình viên java giỏi, anh ta cũng có thể làm (gần) mọi thứ trong java.

Vì vậy, chỉ cần gắn bó với ngôn ngữ bạn cảm thấy thoải mái.


5
Nhưng những gì về các thư viện? Có các gói R nâng cao (nghĩ rằng Ranfom Forest hoặc Caret) hoàn toàn không thực tế để thực hiện lại bằng ngôn ngữ có mục đích chung như chúng tôi là C hoặc Java
Santiago Cepas

mahout tức là hỗ trợ rừng ngẫu nhiên cho java
Johnny000

1
Có thể, nhưng R không mang lại hiệu suất ở tất cả những gì bạn cần để xử lý các bộ dữ liệu lớn và hầu hết thời gian bạn có bộ dữ liệu thực sự lớn trong sử dụng công nghiệp.
Johnny000

1
Vâng, một lập trình viên giỏi có thể làm điều tương tự trong C. NHƯNG một lập trình viên tồi có thể làm điều đó bằng Python nhanh như một lập trình viên có kinh nghiệm có thể làm điều đó trong C.
Pithikos

1
Tôi không nghĩ điều đó luôn đúng @Pithikos Với các công thức toán học cơ bản, tôi thường có thể tự thực hiện chúng nhanh hơn với VB / T-SQL nhanh hơn tôi có thể bằng cách lướt qua cú pháp phức tạp không cần thiết cho các thư viện R hoặc Python. Và trong quá trình này, làm cho mã kết quả có khả năng mở rộng hơn nhiều. Tôi rất vui vì các thư viện này tồn tại nhưng có những nhược điểm được tích hợp trong đó; trong một số tình huống và các dự án cụ thể tốt hơn là bỏ qua chúng.
SQLServerSteve

16

Một số suy nghĩ bổ sung.

Ngôn ngữ lập trình 'per se' chỉ là một công cụ. Tất cả các ngôn ngữ được thiết kế để làm cho một số loại cấu trúc dễ xây dựng hơn các loại khác. Và kiến ​​thức và sự thành thạo của một ngôn ngữ lập trình là quan trọng và hiệu quả hơn các tính năng của ngôn ngữ đó so với các ngôn ngữ khác.

Theo như tôi có thể thấy có hai chiều của câu hỏi này. Chiều hướng đầu tiên là khả năng khám phá, xây dựng bằng chứng về các khái niệm hoặc mô hình với tốc độ nhanh, cuối cùng có sẵn các công cụ để nghiên cứu những gì đang diễn ra (như kiểm tra thống kê, đồ họa, công cụ đo lường, v.v.). Loại hoạt động này thường được các nhà nghiên cứu và nhà khoa học dữ liệu ưa thích (tôi luôn tự hỏi điều đó có nghĩa là gì, nhưng tôi sử dụng thuật ngữ này cho định nghĩa lỏng lẻo của nó). Họ có xu hướng dựa vào các công cụ nổi tiếng và được xác minh, có thể được sử dụng để chứng minh hoặc lập luận.

Chiều thứ hai là khả năng mở rộng, thay đổi, cải thiện hoặc thậm chí tạo ra các công cụ, thuật toán hoặc mô hình. Để đạt được điều đó bạn cần một ngôn ngữ lập trình thích hợp. Tất cả đều giống nhau. Nếu bạn làm việc cho một công ty, hơn bạn phụ thuộc rất nhiều vào cơ sở hạ tầng của công ty, văn hóa nội bộ và các lựa chọn của bạn giảm đi đáng kể. Ngoài ra, khi bạn muốn thực hiện một thuật toán để sử dụng sản xuất, bạn phải tin tưởng vào việc thực hiện. Và thực hiện bằng ngôn ngữ khác mà bạn không thành thạo sẽ không giúp bạn nhiều.

Tôi có xu hướng ủng hộ loại hoạt động đầu tiên của hệ sinh thái R. Bạn có một cộng đồng tuyệt vời, một bộ công cụ khổng lồ, bằng chứng cho thấy những công cụ này hoạt động như mong đợi. Ngoài ra, bạn có thể xem xét Python, Octave (để đặt tên một vài), là những ứng cử viên đáng tin cậy.

Đối với nhiệm vụ thứ hai, bạn phải suy nghĩ trước về những gì bạn thực sự muốn. Nếu bạn muốn các công cụ sẵn sàng sản xuất mạnh mẽ, thì C / C ++, Java, C # là những ứng cử viên tuyệt vời. Tôi coi Python như một công dân thứ hai trong thể loại này, cùng với Scala và bạn bè. Tôi không muốn bắt đầu một cuộc chiến rực lửa, đó chỉ là ý kiến ​​của tôi. Nhưng sau hơn 17 năm làm nhà phát triển, tôi có xu hướng thích một hợp đồng chặt chẽ và kiến ​​thức của mình hơn là tự do làm bất cứ điều gì bạn có thể nghĩ đến (giống như nó xảy ra với rất nhiều ngôn ngữ động).

Cá nhân, tôi muốn học càng nhiều càng tốt. Tôi quyết định rằng tôi phải chọn một cách khó khăn, có nghĩa là tự mình thực hiện mọi thứ. Tôi sử dụng R như một mô hình và cảm hứng. Nó có kho báu tuyệt vời trong thư viện và rất nhiều kinh nghiệm chắt lọc. Tuy nhiên, R là ngôn ngữ lập trình là một cơn ác mộng đối với tôi. Vì vậy, tôi quyết định sử dụng Java và không sử dụng thêm thư viện. Đó chỉ là vì kinh nghiệm của tôi, và không có gì khác.

Nếu bạn có thời gian, điều tốt nhất bạn có thể làm là dành thời gian cho tất cả những điều này. Bằng cách này, bạn sẽ kiếm được cho mình câu trả lời tốt nhất có thể, phù hợp với bạn. Dijkstra đã từng nói rằng các công cụ ảnh hưởng đến cách bạn nghĩ, vì vậy nên biết các công cụ của bạn trước khi cho phép họ mô hình hóa cách bạn nghĩ. Bạn có thể đọc thêm về điều đó trong bài báo nổi tiếng của mình có tên The Humble Lập trình viên


15

Tôi sẽ thêm vào những gì người khác đã nói cho đến bây giờ. Không có câu trả lời duy nhất rằng một ngôn ngữ tốt hơn ngôn ngữ khác.

Phải nói rằng, R có một cộng đồng tốt hơn để khám phá và học tập dữ liệu. Nó có khả năng hình dung rộng rãi. Python, mặt khác, đã trở nên tốt hơn trong việc xử lý dữ liệu kể từ khi giới thiệu gấu trúc. Thời gian học tập và phát triển rất ít trong Python, so với R (R là ngôn ngữ cấp thấp).

Tôi nghĩ rằng cuối cùng nó sôi sục với hệ thống sinh thái mà bạn đang ở và sở thích cá nhân. Để biết thêm chi tiết, bạn có thể xem so sánh này ở đây .


2
"R có một cộng đồng tốt hơn cho [...] học tập" - Tôi đoán điều này phụ thuộc nhiều vào loại hình học tập. Bao nhiêu điều đang xảy ra với các mạng thần kinh (kiến trúc chuyển tiếp thức ăn tùy ý, CNN, RNN) trong R?
Martin Thoma

1
R không thực sự là IMO "cấp thấp". Đó cũng là một ngôn ngữ năng động.
xji

12

Không có ngôn ngữ viên đạn bạc nào có thể được sử dụng để giải quyết mọi vấn đề liên quan đến dữ liệu. Sự lựa chọn ngôn ngữ phụ thuộc vào bối cảnh của vấn đề, kích thước của dữ liệu và nếu bạn đang làm việc tại nơi làm việc, bạn phải tuân theo những gì họ sử dụng.

Cá nhân tôi sử dụng R thường xuyên hơn Python do các thư viện trực quan và phong cách tương tác của nó. Nhưng nếu tôi cần hiệu năng cao hơn hoặc mã có cấu trúc, tôi chắc chắn sử dụng Python vì nó có một số thư viện tốt nhất như SciKit-Learn, numpy, scipy, v.v. Tôi sử dụng cả R và Python trong các dự án của mình thay thế cho nhau.

Vì vậy, nếu bạn đang bắt đầu công việc khoa học dữ liệu, tôi khuyên bạn nên tìm hiểu cả hai và không khó vì Python cũng cung cấp giao diện tương tự như R với Pandas .

Nếu bạn phải đối phó với các bộ dữ liệu lớn hơn nhiều, bạn không thể thoát khỏi các hệ sinh thái được xây dựng bằng Java (Hadoop, Pig, Hbase, v.v.).


8

Không có ngôn ngữ "tốt hơn". Tôi đã thử cả hai và tôi thấy thoải mái với Python nên tôi chỉ làm việc với Python. Mặc dù tôi vẫn đang học các thứ, nhưng tôi chưa gặp phải bất kỳ rào cản nào với Python cho đến bây giờ. Điểm hay của Python là cộng đồng quá tốt và bạn có thể nhận được rất nhiều sự giúp đỡ trên Internet một cách dễ dàng. Ngoài ra, tôi sẽ nói đi với ngôn ngữ bạn thích không phải là người mà bạn đề nghị.


8

Theo kinh nghiệm của tôi, câu trả lời phụ thuộc vào dự án trong tầm tay. Đối với nghiên cứu thuần túy, tôi thích R vì hai lý do: 1) nhiều thư viện và 2) nhiều tài liệu khoa học dữ liệu bao gồm các mẫu R.

Nếu dự án yêu cầu giao diện tương tác được sử dụng bởi các cư dân, tôi đã thấy R quá hạn chế. Shiny là một khởi đầu tuyệt vời, nhưng nó chưa đủ linh hoạt. Trong những trường hợp này, tôi sẽ bắt đầu xem xét chuyển công việc R của tôi sang Python hoặc js.


8

Một vấn đề mà tất cả các câu trả lời khác không giải quyết được là cấp phép .

Hầu hết các thư viện R tuyệt vời nói trên là GPL (ví dụ ggplot2 , data.table ). Điều này ngăn bạn phân phối phần mềm của bạn ở dạng độc quyền.

Mặc dù nhiều cách sử dụng của các thư viện đó không ngụ ý phân phối phần mềm (ví dụ: để đào tạo các mô hình ngoại tuyến), GPL có thể tự thu hút các công ty sử dụng chúng. Ít nhất là trong kinh nghiệm của tôi.

Trong cõi trăn, mặt khác, hầu hết các thư viện đều có giấy phép phân phối thân thiện với doanh nghiệp, chẳng hạn như BSD hoặc MIT.

Trong học viện, vấn đề cấp phép thường không phải là vấn đề.



6

Một trong những thách thức thực sự, tôi gặp phải với R là các gói khác nhau tương thích với các phiên bản khác nhau .. khá nhiều gói R không có sẵn cho phiên bản R mới nhất. Và R khá nhiều lần bị lỗi do thư viện hoặc gói được viết cho cũ hơn phiên bản..


3
Tôi không chắc đây là một vấn đề cụ thể với R, hoặc nó trả lời câu hỏi Python và R khác nhau như thế nào.
Sean Owen

5

Tôi chưa thử R (tốt, một chút, nhưng không đủ để so sánh tốt). Tuy nhiên, đây là một số điểm mạnh của Pythons:

  • Cú pháp rất trực quan : tuple giải nén, element in a_list, for element in sequence, matrix_a * matrix_b(cho phép nhân ma trận), ...
  • Nhiều thư viện :
    • scipy : Tính toán khoa học; nhiều phần của nó chỉ là các hàm bao cho mã Fortran khá nhanh
    • theano > Lasagne > nolearn : Thư viện cho các mạng thần kinh - họ có thể được đào tạo về GPU (nvidia, CUDA là bắt buộc) mà không cần điều chỉnh
    • sklearn : Thuật toán học tập chung
  • Cộng đồng tốt :
  • Máy tính xách tay IPython
  • Linh tinh :
    • Mảng 0 chỉ mục ... Tôi luôn mắc lỗi đó với R.
    • Cấu trúc gói thành lập
    • Hỗ trợ tốt để kiểm tra mã của bạn

3

Tôi thích Python hơn R vì Python là ngôn ngữ lập trình hoàn chỉnh nên tôi có thể kết thúc các nhiệm vụ học máy như thu thập dữ liệu bằng máy chủ HTTP được viết bằng Python, thực hiện các tác vụ ML nâng cao và sau đó xuất bản kết quả trực tuyến. Tất cả điều này có thể được thực hiện trong Python. Tôi thực sự thấy R khó học hơn và số tiền chi trả cho việc học Python lớn hơn nhiều vì nó có thể được sử dụng cho hầu hết mọi nhiệm vụ lập trình.


2
Bạn có thể thực hiện tất cả 3 điều đó rất dễ dàng trong R
Gaius

2

R: R là bản sao nguồn mở. mà theo truyền thống đã được sử dụng trong các học giả và nghiên cứu. Do tính chất nguồn mở của nó, các kỹ thuật mới nhất được phát hành nhanh chóng. Có rất nhiều tài liệu có sẵn trên internet và đó là một lựa chọn rất hiệu quả. Python: Với nguồn gốc là ngôn ngữ kịch bản mã nguồn mở, việc sử dụng Python đã tăng lên theo thời gian. Ngày nay, nó là các thư viện thể thao (numpy, scipy và matplotlib) và các chức năng cho hầu hết mọi hoạt động thống kê / xây dựng mô hình mà bạn có thể muốn làm. Kể từ khi giới thiệu gấu trúc, nó đã trở nên rất mạnh trong các hoạt động trên dữ liệu có cấu trúc.

Mã Python

Thư viện nhập khẩu

Nhập các thư viện cần thiết khác như gấu trúc, numpy ...

từ sklearn nhập linear_model

Tải tập dữ liệu Train and Test

Xác định (các) tính năng và biến trả lời và các giá trị phải là mảng số và numpy

x_train = input_variables_values_training_datasets y_train = target_variables_values_training_datasets x_test = input_variables_values_test_datasets

Tạo đối tượng hồi quy tuyến tính

linear = linear_model.LinearRegression ()

Huấn luyện mô hình bằng cách sử dụng các bộ huấn luyện và kiểm tra điểm số

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

Hệ số phương trình và đánh chặn

print ('Hệ số: \ n', linear.coef_) print ('Chặn: \ n', linear.intercept_)

Dự đoán đầu ra

dự đoán = linear.predict (x_test) Mã R

Tải tập dữ liệu Train and Test

Xác định (các) tính năng và biến trả lời và các giá trị phải là mảng số và numpy

x_train <- input_variabled_values_training_datasets y_train <- target_variables_values_training_datasets x_test <- input_variabled_values_test_datasets x <- cbind (x_train, y_train)

Huấn luyện mô hình bằng cách sử dụng các bộ huấn luyện và kiểm tra điểm số

tóm tắt tuyến tính <- lm (y_train ~., data = x) (tuyến tính)

Dự đoán đầu ra

dự đoán = dự đoán (tuyến tính, x_test)



0

nhập mô tả hình ảnh ở đây

Tôi đã nhận được hình ảnh này trong một bài viết linksin. Bất cứ khi nào tôi nghi ngờ về việc sử dụng python hoặc R, tôi đều nhìn vào nó và nó tỏ ra rất hữu ích.


Vậy bạn chọn cái gì?
Serhii Ba Lan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.