Julia: เก็บสต็อคของวิธีการทำ


19

ฉันเจอคำถามปี 2012 ที่มีการอภิปรายที่ดีมากเกี่ยวกับ Julia เป็นทางเลือกแทน R / Python สำหรับงานสถิติประเภทต่างๆ

ต่อไปนี้เป็นคำถามเริ่มต้นจากปี 2012 เกี่ยวกับคำสัญญาของจูเลีย

น่าเสียดายที่ Julia เป็นคนใหม่มากในตอนนั้น & ชุดเครื่องมือที่จำเป็นสำหรับงานสถิตินั้นค่อนข้างเก่าแก่ ข้อบกพร่องถูกรีดออก การกระจายติดตั้งยาก เป็นต้น

บางคนมีความคิดเห็นที่ฉลาดมากสำหรับคำถามนั้น:

สิ่งนี้กล่าวว่าจะใช้เวลา 5 ปีก่อนที่คำถามนี้อาจตอบได้ในแบบย้อนหลัง ณ ตอนนี้ Julia ยังขาดประเด็นสำคัญต่อไปนี้ของระบบการเขียนโปรแกรมเชิงสถิติที่สามารถแข่งขันกับ R สำหรับผู้ใช้ประจำวัน:

นั่นคือในปี 2012 ตอนนี้มันผ่านไปแล้ว 2015 และสามปีที่ผ่านมาฉันสงสัยว่าคนที่คิดว่าจูเลียทำอะไร?

มีร่างกายที่มีประสบการณ์มากขึ้นเกี่ยวกับภาษาและระบบนิเวศของ Julia โดยรวมหรือไม่? ฉันชอบที่จะรู้

โดยเฉพาะ:

  1. คุณจะแนะนำผู้ใช้ใหม่ของเครื่องมือทางสถิติเพื่อเรียนรู้ Julia มากกว่า R หรือไม่?
  2. สถิติการใช้งานประเภทใดที่คุณจะแนะนำให้ใครบางคนใช้ Julia ใน
  3. หาก R ช้าในงานบางอย่างคุณควรเปลี่ยนไปใช้ Julia หรือ Python หรือไม่?

หมายเหตุ: โพสต์ครั้งแรก 14 มิถุนายน 2015


2
ฉันดูเมื่อเร็ว ๆ นี้และไม่ประทับใจกับความลึกของแพคเกจสถิติของพวกเขา ถ้าฉันไม่เข้าใจผิดหลามก็ตีความเช่นกันดังนั้นจะมีข้อ จำกัด คล้ายกันกับอาร์การดึงดูดของจูเลียในขณะที่ฉันเข้าใจว่ามันเป็นสัญญาของความเร็วพิเศษและการเข้าถึงขนานที่ดีกว่า
DWIN

3
ฉันคิดว่าปัญหาของ Julia ก็คือ SciPy พัฒนาขึ้นเรื่อย ๆ และตอนนี้เราก็มี Torch ในส่วนผสม ไม่มีใครต้องการที่จะเรียนรู้ภาษาคอมพิวเตอร์ทางวิทยาศาสตร์ที่สาม (หรือสี่หรือห้า) แม้ว่ามันจะเร็วและมีฟังก์ชั่นการใช้งานมากเกินไป
shadowtalker

4
จูเลียเป็นภาษาที่ออกแบบมาอย่างดี แต่ในความคิดของฉันมันมาสายเกินไป ขบวนการคำนวณเมทริกซ์โหนดเดียวได้ผ่านไปนาน Julia นั้นเป็น Fortran 2.0 ที่มีฟีเจอร์ที่ดีหลายอย่าง แต่เมื่อเราเปลี่ยนไปใช้คลาวด์คอมพิวติ้งมากขึ้นมันมีน้อยมากที่จะนำเสนอผ่านภาษาที่ใช้งานได้เช่น Scala, Clojure และ Python หากจูเลียอยู่ในสถานะปัจจุบันเมื่อ 10 ปีก่อนมันอาจประสบความสำเร็จอย่างมาก
Marc Claesen

2
Python และ Rcpp กำลังพัฒนาแบบไดนามิกจริงๆ R ได้รับความสนใจเพิ่มขึ้นเรื่อย ๆ (R Consortium, Microsoft เป็นต้น) ดังนั้นจึงเป็นเรื่องยากที่จูเลียจะจับ ...
ทิม

1
ฉันไม่เห็นกรณีธุรกิจของ Julia และยังไม่เห็น ดูเหมือนว่าโปรแกรมเมอร์พยายามสร้างสิ่งที่มีอยู่แล้วซ้ำอีกครั้ง
Aksakal

คำตอบ:


15

ฉันเปลี่ยนมาเป็นจูเลียแล้วและนี่คือเหตุผลที่ใช้งานได้จริง:

  • มันทำรหัสกาวได้ดีจริงๆ ฉันมีรหัสดั้งเดิมจำนวนมากใน MATLAB และMATLAB.jlใช้เวลา 5 นาทีในการติดตั้งทำงานได้อย่างสมบูรณ์และมีไวยากรณ์ที่กระชับซึ่งทำให้การใช้งานฟังก์ชั่น MATLAB เป็นธรรมชาติ จูเลียก็มีเหมือนกันสำหรับ R, Python, C, Fortran และภาษาอื่น ๆ อีกมากมาย
  • จูเลียทำคู่ขนานได้ดีจริงๆ ฉันไม่เพียง แต่พูดถึงตัวประมวลผลหลายตัว (หน่วยความจำที่แชร์) แบบขนาน แต่ยังรวมถึงแบบหลายโหนด ฉันเข้าถึงโหนด HPC ที่ไม่ได้ใช้บ่อยเกินไปเพราะแต่ละโหนดค่อนข้างช้าดังนั้นฉันจึงตัดสินใจลอง Julia ฉันเพิ่ม @parallel ไปยังลูปเริ่มต้นโดยบอกไฟล์เครื่องจักรและใช้มันทั้ง 5 โหนด ลองทำใน R / Python ใน MPI ที่อาจต้องใช้เวลาสักครู่เพื่อให้มันทำงาน (และนั่นก็คือการรู้ว่าคุณกำลังทำอะไร) ไม่กี่นาทีในครั้งแรกที่คุณลอง!
  • vectorization ของ Julia นั้นรวดเร็ว (ในหลาย ๆ กรณีเร็วกว่าภาษาระดับสูงกว่าอื่น ๆ ) และโค้ดที่ไม่ได้รับการตรวจสอบนั้นเกือบจะรวดเร็ว ดังนั้นถ้าคุณเขียนอัลกอริธึมทางวิทยาศาสตร์โดยปกติคุณจะเขียนมันใน MATLAB ก่อนแล้วค่อยเขียนมันใหม่ใน C. Julia ให้คุณเขียนหนึ่งครั้งจากนั้นให้คอมไพเลอร์โค้ดและ 5 นาทีต่อมามันเร็ว แม้ว่าคุณจะไม่ทำเช่นนี้หมายความว่าคุณเพียงแค่เขียนโค้ดไม่ว่าวิธีการของคุณจะดูเป็นธรรมชาติและจะทำงานได้ดี ใน R / Python บางครั้งคุณต้องคิดให้ดีเพื่อให้ได้เวอร์ชั่นที่ดี (ซึ่งอาจยากที่จะเข้าใจในภายหลัง)
  • metaprogramming นั้นยอดเยี่ยม นึกถึงจำนวนครั้งที่คุณเป็นเช่น "ฉันหวังว่าฉันจะได้ ______ เป็นภาษา" เขียนแมโครสำหรับมัน มักจะมีคนอยู่แล้ว
  • ทุกอย่างอยู่ใน Github รหัสแหล่งที่มา แพคเกจ ง่ายสุด ๆ ในการอ่านโค้ดรายงานปัญหาให้กับนักพัฒนาพูดคุยกับพวกเขาเพื่อค้นหาวิธีการทำบางสิ่งบางอย่าง
  • พวกเขามีห้องสมุดที่ดีจริงๆ สำหรับสถิติคุณอาจสนใจแพ็คเกจการเพิ่มประสิทธิภาพ (JuliaOpt เป็นกลุ่มที่จัดการพวกเขา) แพคเกจที่เป็นตัวเลขนั้นเป็นตัวเลือกที่ดีที่สุดและปรับปรุงแล้วเท่านั้น

ที่กล่าวว่าฉันยังคงรัก Rstudio จริง ๆ แต่ Juno บน Atom ตัวใหม่นั้นดีจริงๆ เมื่อมันไม่ได้มีการพัฒนาอย่างหนักอีกต่อไปและมีความเสถียรฉันสามารถดูได้ดีกว่า Rstudio เนื่องจากความง่ายของปลั๊กอิน (ตัวอย่าง: มันมีปลั๊กอินที่ดีสำหรับการปรับให้เข้ากับหน้าจอ hidpi) ดังนั้นฉันคิดว่า Julia เป็นภาษาที่ดีที่จะเรียนรู้ตอนนี้ มันใช้งานได้ดีสำหรับฉันจนถึงตอนนี้ YMMV


คุณคิดที่จะอัปเดตคำตอบนี้มานานกว่า 3 ปีหรือไม่?
Bayequentist

1
ผมให้การตอบสนองการปรับปรุงที่นี่: scicomp.stackexchange.com/questions/10922/... บางทีนั่นควรจะถูกคัดลอกไป
Chris Rackauckas

11

ฉันคิดว่า "เรียนรู้ X มากกว่า Y" ไม่ใช่วิธีที่ถูกต้องในการกำหนดคำถาม ในความเป็นจริงคุณสามารถเรียนรู้ (อย่างน้อยพื้นฐาน) และตัดสินใจเลือกเครื่องมือที่เหมาะสมโดยขึ้นอยู่กับงานที่เป็นรูปธรรม และเนื่องจาก Julia ได้รับมรดกส่วนใหญ่ของไวยากรณ์และแนวคิดจากภาษาอื่น ๆ มันจึงเป็นเรื่องง่ายที่จะเข้าใจ (เช่นเดียวกับ Python แม้ว่าฉันไม่แน่ใจว่าอาจจะพูดเกี่ยวกับ R)

ดังนั้นภาษาใดที่เหมาะกับงานประเภทใดดีกว่า จากประสบการณ์ของฉันกับเครื่องมือเหล่านี้ฉันจะให้คะแนนพวกเขาดังนี้:

  • สำหรับการวิจัยทางสถิติล้วนๆที่สามารถทำได้ด้วย REPL และสคริปต์สองสามตัวRดูเหมือนจะเป็นตัวเลือกที่สมบูรณ์แบบ มันถูกออกแบบมาโดยเฉพาะสำหรับสถิติมีประวัติยาวนานที่สุดของเครื่องมือและอาจเป็นชุดของไลบรารีสถิติที่ใหญ่ที่สุด

  • หากคุณต้องการที่จะบูรณาการสถิติ (หรือตัวอย่างเช่นการเรียนรู้เครื่อง) ลงในระบบการผลิต , งูหลามดูเหมือนว่าทางเลือกที่ดีมาก: เป็นภาษาโปรแกรมวัตถุประสงค์ทั่วไปก็มีกองเว็บน่ากลัวผูกเพื่อ APIs มากที่สุดและห้องสมุด literaly สำหรับทุกอย่าง จากการทะเลาะวิวาทเว็บเพื่อสร้างเกม 3D

  • ขั้นตอนวิธีการที่มีประสิทธิภาพสูงเป็นเรื่องง่ายที่จะเขียนในจูเลีย หากคุณต้องการใช้หรือรวมไลบรารีที่มีอยู่เช่นSciKit Learnหรือe1071 ที่สนับสนุนโดย C / C ++ คุณจะสามารถใช้งาน Python และ R ได้ แต่เมื่อพูดถึงแบ็กเอนด์ที่รวดเร็ว Julia ก็กลายเป็นเครื่องมือประหยัดเวลาจริง: เร็วกว่า Python หรือ R และไม่ต้องการความรู้เพิ่มเติมเกี่ยวกับ C / C ++ ยกตัวอย่างเช่นMocha.jl reimplements ในกรอบการเรียนรู้อย่างลึกล้ำของจูเลียCaffeซึ่ง แต่เดิมเขียนด้วยภาษาซีพลัสพลัสพร้อมห่อหุ้มในไพ ธ อน

  • อย่าลืมว่าห้องสมุดบางแห่งมีให้บริการในบางภาษาเท่านั้น เช่นเดียวกับงูหลามที่มีระบบนิเวศที่โตเต็มที่สำหรับการมองเห็นคอมพิวเตอร์อัลกอริทึมการจับคู่รูปร่างและการเปลี่ยนรูปแบบถูกนำมาใช้ในจูเลียเท่านั้นและฉันเคยได้ยินแพคเกจเฉพาะสำหรับสถิติการแพทย์ในอาร์


ฉันจะบอกว่าคนส่วนใหญ่ควรพยายามเลือกหนึ่งและอยู่กับส่วนใหญ่ --- สำหรับฉันอย่างน้อยโดยใช้หลายภาษาฉันท้ายผสมพวกเขาเสียเวลามากว่า ...
kjetil b halvorsen

1
ปัญหาขัดแย้งที่เกิดขึ้นกับการเขียนอัลกอริธึมประสิทธิภาพสูงคือแม้ว่าพวกเขาจะสามารถเขียนในภาษาระดับสูงเช่น R หรือ Julia ได้ง่ายขึ้นตามเวลาที่คุณเขียนอัลกอริทึมประสิทธิภาพสูงจริง ๆ คุณอาจต้องการใช้ C ++ หรืออาจเป็นเพียงฉัน
หน้าผา AB

3

(b) สถิติการใช้งานประเภทใดที่คุณจะแนะนำผู้ใช้ Julia

(c) ถ้า R ช้าในงานบางอย่างคุณควรเปลี่ยนมาใช้ Julia หรือ Python หรือไม่?

ปัญหาที่เข้มข้นในมิติสูงและการคำนวณ

  • multiprocessing ความสามารถในการเชื่อมต่อแบบโหนดเดียวของ Julia ( @spawnat) นั้นสะดวกกว่าใน python เช่นในไพ ธ อนคุณไม่สามารถใช้แผนที่ลดพูลมัลติโพรเซสเซอร์บน REPL และทุกฟังก์ชั่นที่คุณต้องการจะขนานต้องมีจำนวนมาก

  • การคำนวณคลัสเตอร์ ClusterManagersแพ็คเกจของ Julia ให้คุณใช้งานกลุ่มการคำนวณเกือบจะเหมือนกับเครื่องเดียวที่มีหลายคอร์ [ฉันเล่นด้วยทำให้รู้สึกเหมือนสคริปต์ในClusterUtils ]

  • แชร์หน่วยความจำ SharedArrayวัตถุของ Julia นั้นเหนือกว่าวัตถุหน่วยความจำที่ใช้ร่วมกันที่เทียบเท่าในหลาม

  • ความเร็ว. การใช้งาน Julia ของฉันคือ (เครื่องเดียว) เร็วกว่าการติดตั้ง R ของฉันในการสร้างตัวเลขสุ่มและที่พีชคณิตเชิงเส้น (รองรับ BLAS มัลติเธรด)
  • การทำงานร่วมกัน จูเลียPyCallโมดูลช่วยให้คุณเข้าถึงระบบนิเวศหลามโดยไม่ต้องห่อ - pylabเช่นผมใช้นี้ มีบางอย่างที่คล้ายกับ R แต่ฉันไม่ได้ลองเลย นอกจากนี้ยังมีccallไลบรารี C / Fortran
  • GPU เครื่องห่อ CUDA ของ Julia นั้นพัฒนาได้ไกลกว่าเครื่อง python (Rs แทบจะไม่มีเลยเมื่อฉันตรวจสอบ) ฉันสงสัยว่าสิ่งนี้จะเป็นเช่นนี้ต่อไปเพราะการเรียกไลบรารี่ภายนอกในจูเลียนั้นง่ายกว่าการใช้หลาม

  • ระบบนิเวศ Pkgใช้โมดูล GitHub เป็นแบ็กเอนด์ ฉันเชื่อว่าสิ่งนี้จะมีผลกระทบอย่างใหญ่หลวงต่อการบำรุงรักษาโมดูลของ Julia ที่ยาวนานมากเพราะมันทำให้การเสนอแพตช์หรือตรงไปตรงมามากขึ้นสำหรับเจ้าของเพื่อรับผิดชอบ

  • σ

การเขียนรหัสอย่างรวดเร็วสำหรับปัญหาใหญ่จะขึ้นอยู่กับการคำนวณแบบขนาน Python เป็นคู่ขนานที่ไม่เป็นมิตร (GIL) โดยเนื้อแท้และการประมวลผลหลายตัวใน R คือ AFAIK ที่ไม่มีอยู่จริง จูเลียไม่ต้องการให้คุณเลื่อนลงไปที่ C เพื่อเขียนรหัสนักแสดงในขณะที่ยังคงความรู้สึกส่วนใหญ่ของ python / R / Matlab

ข้อเสียเปรียบหลักของ Julia ที่มาจาก python / R คือการขาดเอกสารนอกฟังก์ชั่นหลัก หลามเป็นผู้ใหญ่มากและสิ่งที่คุณไม่สามารถหาได้ในเอกสารมักจะอยู่ใน stackoverflow ระบบเอกสารของ R ค่อนข้างดีเมื่อเปรียบเทียบ

(a) คุณจะแนะนำผู้ใช้ใหม่ของเครื่องมือทางสถิติเพื่อเรียนรู้ Julia ผ่าน R หรือไม่?

ใช่ถ้าคุณเหมาะสมกับกรณีการใช้งานในส่วน (b) หากกรณีการใช้งานของคุณเกี่ยวข้องกับการทำงานที่หลากหลาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.