Ngôn ngữ tốt nhất cho máy tính khoa học [đóng]


10

Dường như hầu hết các ngôn ngữ đều có sẵn một số thư viện máy tính khoa học.

  • Con trăn có Scipy
  • RustSciRust
  • C++có một số bao gồm ViennaCLArmadillo
  • JavaJava NumericsColtcũng như một số khác

Không đề cập đến các ngôn ngữ như RJuliađược thiết kế rõ ràng cho máy tính khoa học.

Với rất nhiều lựa chọn, làm thế nào để bạn chọn ngôn ngữ tốt nhất cho một nhiệm vụ? Ngoài ra, ngôn ngữ nào sẽ được thực hiện nhiều nhất? PythonRdường như có lực kéo nhất trong không gian, nhưng về mặt logic, một ngôn ngữ được biên dịch có vẻ như nó sẽ là một lựa chọn tốt hơn. Và bất cứ điều gì sẽ tốt hơn bao giờ hết Fortran? Các ngôn ngữ được biên dịch bổ sung có xu hướng tăng tốc GPU, trong khi các ngôn ngữ được giải thích như RPythonkhông. Tôi nên tính đến điều gì khi chọn ngôn ngữ và ngôn ngữ nào mang lại sự cân bằng tốt nhất về tiện ích và hiệu suất? Ngoài ra có ngôn ngữ nào có tài nguyên tính toán khoa học quan trọng mà tôi đã bỏ lỡ không?

efficiency  statistics  tools  knowledge-base  machine-learning  neural-network  deep-learning  optimization  hyperparameter  machine-learning  time-series  categorical-data  logistic-regression  python  visualization  bigdata  efficiency  classification  binary  svm  random-forest  logistic-regression  data-mining  sql  experiments  bigdata  efficiency  performance  scalability  distributed  bigdata  nlp  statistics  education  knowledge-base  definitions  machine-learning  recommender-system  evaluation  efficiency  algorithms  parameter  efficiency  scalability  sql  statistics  visualization  knowledge-base  education  machine-learning  r  python  r  text-mining  sentiment-analysis  machine-learning  machine-learning  python  neural-network  statistics  reference-request  machine-learning  data-mining  python  classification  data-mining  bigdata  usecase  apache-hadoop  map-reduce  aws  education  feature-selection  machine-learning  machine-learning  sports  data-formats  hierarchical-data-format  bigdata  apache-hadoop  bigdata  apache-hadoop  python  visualization  knowledge-base  classification  confusion-matrix  accuracy  bigdata  apache-hadoop  bigdata  efficiency  apache-hadoop  distributed  machine-translation  nlp  metadata  data-cleaning  text-mining  python  pandas  machine-learning  python  pandas  scikit-learn  bigdata  machine-learning  databases  clustering  data-mining  recommender-system 

12
Không có câu hỏi ở đây. Nếu bạn cần thực hiện nghiên cứu cơ bản về ngôn ngữ lập trình, bạn nên đọc Wikipedia hơn là chờ ai đó xuất hiện ở đây để thúc đẩy sở thích của mình.
Dirk Eddelbuettel

@DirkEddelbuettel Điểm rất tốt. Nghĩ rằng tốt hơn là nên thử sản xuất nội dung hơn là tinh chỉnh nội dung tại thời điểm này trong bản Beta, nhưng tôi không biết một lượng lớn về SE betas. Đó có phải là một động thái tốt về phía tôi hay không?
indico

1
Nhìn vào những con số này .
Emre

@DirkEddelbuettel bạn không sai, nhưng hy vọng của tôi là thúc đẩy một cuộc thảo luận về các đặc điểm và công cụ hữu ích liên quan đến các ngôn ngữ khác nhau. Ngôn ngữ bạn sử dụng là một công cụ quan trọng trong khoa học dữ liệu, vì vậy suy nghĩ của tôi là mọi người có thể thảo luận về các công cụ họ ưa thích và có lợi ích khách quan ở đây, như một nguồn lực cho những người muốn thử công việc tương tự.
hoành hành vào

1
@indico Hãy thử cran.r-project.org/web/packages/overlap/index.html , đây chỉ là cái đầu tiên tôi tình cờ chọn một cách ngẫu nhiên. Nhưng thực sự, cá nhân tôi đã biết nhiều nhà thống kê đã viết các gói R. Không ai trong số họ đã viết một con trăn. Để mở rộng cuộc trò chuyện một chút, kdnuggets.com/2013/08/ Ấn thật thú vị.
Lembik

Câu trả lời:


12

Đây là một câu hỏi khá lớn, vì vậy đây không phải là một câu trả lời đầy đủ, nhưng hy vọng điều này có thể giúp thông báo thực tiễn chung về việc xác định công cụ tốt nhất cho công việc khi nói đến khoa học dữ liệu. Nói chung, tôi có một danh sách tương đối ngắn về trình độ chuyên môn mà tôi tìm kiếm khi nói đến bất kỳ công cụ nào trong không gian này. Không theo thứ tự cụ thể nào:

  • Hiệu suất : Về cơ bản nắm bắt được mức độ nhanh chóng của ngôn ngữ nhân ma trận, vì đó ít nhiều là nhiệm vụ quan trọng nhất trong khoa học dữ liệu.
  • Khả năng mở rộng : Ít nhất là đối với cá nhân tôi, điều này giúp dễ dàng xây dựng một hệ thống phân tán. Đây là nơi mà các ngôn ngữ như Juliathực sự tỏa sáng.
  • Cộng đồng : Với bất kỳ ngôn ngữ nào, bạn thực sự đang tìm kiếm một cộng đồng tích cực có thể giúp bạn khi bạn gặp khó khăn khi sử dụng bất kỳ công cụ nào bạn đang sử dụng. Đây là nơi pythonkéo rất xa so với hầu hết các ngôn ngữ khác.
  • Tính linh hoạt : Không có gì tệ hơn việc bị giới hạn bởi ngôn ngữ mà bạn sử dụng. Điều đó không xảy ra rất thường xuyên, nhưng cố gắng thể hiện các cấu trúc đồ thị haskelllà một nỗi đau khét tiếng và Juliachứa rất nhiều kiến ​​trúc mã đau đớn do một ngôn ngữ trẻ như vậy.
  • Dễ sử dụng : Nếu bạn muốn sử dụng một cái gì đó trong một môi trường lớn hơn, bạn muốn đảm bảo rằng thiết lập là đơn giản và nó có thể được tự động hóa. Không có gì tệ hơn là phải thiết lập một bản dựng tinh xảo trên nửa tá máy.

Có rất nhiều bài viết về hiệu suất và khả năng mở rộng, nhưng nói chung bạn sẽ xem xét sự khác biệt về hiệu suất có thể là 5-10 lần giữa các ngôn ngữ, có thể có hoặc không quan trọng tùy thuộc vào ứng dụng cụ thể của bạn. Theo như tăng tốc GPU, cudamatlà một cách thực sự liền mạch để làm cho nó hoạt động pythoncudathư viện nói chung đã làm cho khả năng tăng tốc GPU trở nên dễ tiếp cận hơn nhiều so với trước đây.

Hai số liệu chính tôi sử dụng cho cả cộng đồng và tính linh hoạt là xem xét trình quản lý gói của ngôn ngữ và các câu hỏi về ngôn ngữ trên một trang web như SO. Nếu có một số lượng lớn câu hỏi và câu trả lời chất lượng cao, đó là một dấu hiệu tốt cho thấy cộng đồng đang hoạt động. Số lượng gói và hoạt động chung trên các gói đó cũng có thể là một proxy tốt cho số liệu này.

Theo như cách sử dụng dễ dàng, tôi là một người tin tưởng vững chắc rằng cách duy nhất để thực sự biết là thực sự tự thiết lập nó. Có rất nhiều sự mê tín xung quanh rất nhiều công cụ Khoa học dữ liệu, cụ thể là những thứ như cơ sở dữ liệu và kiến ​​trúc điện toán phân tán, nhưng không có cách nào để thực sự biết có thứ gì dễ hay khó để thiết lập và triển khai mà không tự mình xây dựng nó.


Để thêm vào câu trả lời này: về khả năng mở rộng, ScalaGođáng được đề cập.
Marc Claesen

Tôi sẽ thêm sự rõ ràng và ngắn gọn (liên quan đến cú pháp và kiến ​​trúc ngôn ngữ, nhưng không chỉ). Có thể viết nhanh và đọc mà không bị đau tạo ra sự khác biệt rất lớn (vì thời gian lập trình viên đắt hơn thời gian máy).
Piotr Migdal

5

Ngôn ngữ tốt nhất phụ thuộc vào những gì bạn muốn làm. Nhận xét đầu tiên: đừng giới hạn bản thân trong một ngôn ngữ. Học một ngôn ngữ mới luôn là một điều tốt, nhưng đến một lúc nào đó bạn sẽ cần phải chọn. Các cơ sở được cung cấp bởi chính ngôn ngữ là một điều rõ ràng cần lưu ý nhưng theo tôi, những điều sau đây quan trọng hơn:

  • thư viện có sẵn : bạn có phải thực hiện mọi thứ từ đầu hoặc bạn có thể sử dụng lại những thứ hiện có không? Lưu ý rằng các thư viện này không cần phải ở bất kỳ ngôn ngữ nào bạn đang xem xét, miễn là bạn có thể giao diện dễ dàng. Làm việc trong một ngôn ngữ không có quyền truy cập thư viện sẽ không giúp bạn hoàn thành công việc.
  • số lượng chuyên gia : nếu bạn muốn các nhà phát triển bên ngoài hoặc bắt đầu làm việc trong một nhóm, bạn phải xem xét có bao nhiêu người thực sự biết ngôn ngữ này. Như một ví dụ cực đoan: nếu bạn quyết định làm việc ở Brainfuck vì bạn thích nó, hãy biết rằng bạn có thể sẽ làm việc một mình. Nhiều khảo sát tồn tại có thể giúp đánh giá mức độ phổ biến của các ngôn ngữ, bao gồm số lượng câu hỏi cho mỗi ngôn ngữ trên SO.
  • toolchain : bạn có quyền truy cập vào các trình gỡ lỗi, trình biên dịch, công cụ tài liệu tốt và (nếu bạn tham gia vào đó) IDE không?

Tôi biết rằng hầu hết các điểm của tôi ủng hộ các ngôn ngữ được thiết lập. Đây là từ quan điểm 'hoàn thành công việc'.

Điều đó nói rằng, cá nhân tôi tin rằng tốt hơn nhiều để trở nên thành thạo trong một ngôn ngữ cấp thấp và một ngôn ngữ cấp cao:

  • mức độ thấp: C ++, C, Fortran, ... bằng cách sử dụng mà bạn có thể triển khai một số điểm nóng hồ sơ nhất định chỉ khi bạn cần bởi vì việc phát triển các ngôn ngữ này thường chậm hơn (mặc dù điều này là chủ đề tranh luận). Những ngôn ngữ này vẫn là vua của ngọn đồi về hiệu suất quan trọng và có khả năng ở lại trên đỉnh trong một thời gian dài.
  • mức cao: Python, R, Clojure, ... để 'kết dính' các thứ với nhau và thực hiện các công cụ quan trọng không hiệu suất (tiền xử lý, xử lý dữ liệu, ...). Tôi thấy điều này rất quan trọng đơn giản vì việc phát triển và tạo mẫu nhanh trong các ngôn ngữ này dễ dàng hơn nhiều.

4

Đầu tiên bạn cần quyết định những gì bạn muốn làm, sau đó tìm kiếm công cụ phù hợp cho nhiệm vụ đó.

Một cách tiếp cận rất chung là sử dụng R cho các phiên bản đầu tiên và xem cách tiếp cận của bạn có đúng không. Nó thiếu một chút về tốc độ, nhưng có các thư viện lệnh và addon rất mạnh, mà bạn có thể thử hầu hết mọi thứ với nó: http://www.r-project.org/

Ý tưởng thứ hai là nếu bạn muốn hiểu các thuật toán đằng sau các thư viện, bạn có thể muốn xem qua Recipies Numerical. Chúng có sẵn cho các ngôn ngữ khác nhau và miễn phí để sử dụng cho việc học. Nếu bạn muốn sử dụng chúng trong các sản phẩm thương mại, bạn cần phải cấp giấy phép: http://en.wikipedia.org/wiki/Numerical_Recipes

Hầu hết thời gian thực hiện sẽ không phải là vấn đề mà là tìm ra các thuật toán và tham số phù hợp cho chúng, vì vậy điều quan trọng là phải có ngôn ngữ kịch bản nhanh thay vì chương trình quái vật trước tiên cần phải biên dịch 10 phút trước khi tính hai số và đưa ra kết quả.

Và một điểm cộng lớn khi sử dụng R là nó có các hàm hoặc thư viện tích hợp cho hầu hết mọi loại sơ đồ mà bạn có thể cần để trực quan hóa dữ liệu của mình.

Nếu sau đó bạn có một phiên bản hoạt động, gần như dễ dàng chuyển nó sang bất kỳ ngôn ngữ nào khác mà bạn nghĩ là hiệu quả hơn.

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.