สปาร์ค MLlib คือส่วนประกอบ Machine Learning ของ Apache Sparkสิ่งที่น่าสนใจอย่างหนึ่งของ Spark คือความสามารถในการปรับขนาดการคำนวณจำนวนมากและนั่นคือสิ่งที่คุณต้องการสำหรับอัลกอริทึมการเรียนรู้ของเครื่อง แต่ข้อ จำกัด คืออัลกอริทึมการเรียนรู้ของเครื่องทั้งหมดไม่สามารถขนานกันได้อย่างมีประสิทธิภาพ แต่ละอัลกอริทึมมีความท้าทายของตัวเองสำหรับการขนานไม่ว่าจะเป็นงานขนานหรือความขนานของข้อมูล
ต้องบอกว่า Spark กลายเป็นแพลตฟอร์มสำหรับการสร้างอัลกอริทึมและแอปพลิเคชันแมชชีนเลิร์นนิงคุณสามารถตรวจสอบไฟล์ ดูแลโดยผู้เชี่ยวชาญในอุตสาหกรรมก่อนที่จะดำเนินการต่อในบล็อกนักพัฒนาที่ทำงานกับ Spark MLlib กำลังใช้อัลกอริธึมของเครื่องมากขึ้นเรื่อย ๆ ในลักษณะที่ปรับขนาดได้และรัดกุมใน Spark framework ในบล็อกนี้เราจะได้เรียนรู้แนวคิดของ Machine Learning, Spark MLlib, ยูทิลิตี้, อัลกอริทึมและกรณีการใช้งานที่สมบูรณ์ของ Movie Recommendation System
หัวข้อต่อไปนี้จะกล่าวถึงในบล็อกนี้:
- Machine Learning คืออะไร?
- ภาพรวม Spark MLlib
- เครื่องมือ Spark MLlib
- อัลกอริทึม MLlib
- Use Case - ระบบแนะนำภาพยนตร์
Machine Learning คืออะไร?
วิวัฒนาการมาจากการศึกษาเกี่ยวกับการจดจำรูปแบบและทฤษฎีการเรียนรู้เชิงคำนวณในปัญญาประดิษฐ์แมชชีนเลิร์นนิงจะสำรวจการศึกษาและการสร้างอัลกอริทึมที่สามารถเรียนรู้และคาดเดาข้อมูลได้อัลกอริทึมดังกล่าวเอาชนะคำสั่งของโปรแกรมแบบคงที่อย่างเคร่งครัดโดยการคาดการณ์หรือตัดสินใจที่ขับเคลื่อนด้วยข้อมูล ผ่านการสร้างแบบจำลองจากปัจจัยการผลิตตัวอย่าง
รูป: เครื่องมือ Machine Learning
แมชชีนเลิร์นนิงมีความเกี่ยวข้องอย่างใกล้ชิดกับสถิติการคำนวณซึ่งมุ่งเน้นไปที่การทำนายผ่านการใช้คอมพิวเตอร์ มีความสัมพันธ์อย่างมากกับการเพิ่มประสิทธิภาพทางคณิตศาสตร์ซึ่งส่งมอบวิธีการทฤษฎีและโดเมนแอปพลิเคชันไปยังฟิลด์ ภายในสาขาการวิเคราะห์ข้อมูลการเรียนรู้ของเครื่องเป็นวิธีการที่ใช้ในการประดิษฐ์แบบจำลองและอัลกอริทึมที่ซับซ้อนซึ่งช่วยให้สามารถคาดการณ์ได้ซึ่งในเชิงพาณิชย์เรียกว่าการวิเคราะห์เชิงคาดการณ์
งานแมชชีนเลิร์นนิงมีสามประเภท:
- การเรียนรู้ภายใต้การดูแล : การเรียนรู้ภายใต้การดูแลคือการที่คุณมีตัวแปรอินพุต (x) และตัวแปรเอาต์พุต (Y) และคุณใช้อัลกอริทึมเพื่อเรียนรู้ฟังก์ชันการทำแผนที่จากอินพุตไปยังเอาต์พุต
- การเรียนรู้ที่ไม่มีการดูแล : การเรียนรู้ที่ไม่มีผู้ดูแลคืออัลกอริทึมการเรียนรู้ของเครื่องประเภทหนึ่งที่ใช้ในการวาดการอนุมานจากชุดข้อมูลซึ่งประกอบด้วยข้อมูลอินพุตที่ไม่มีการตอบสนอง
- การเรียนรู้เสริมแรง : โปรแกรมคอมพิวเตอร์โต้ตอบกับสภาพแวดล้อมแบบไดนามิกซึ่งจะต้องทำเป้าหมายบางอย่าง (เช่นขับรถหรือเล่นเกมกับคู่ต่อสู้) โปรแกรมจะให้ข้อเสนอแนะในแง่ของรางวัลและการลงโทษในขณะที่สำรวจพื้นที่ปัญหาแนวคิดนี้เรียกว่าการเรียนรู้แบบเสริมแรง
ภาพรวม Spark MLlib
Spark MLlib ใช้เพื่อทำการเรียนรู้ของเครื่องใน Apache Spark MLlib ประกอบด้วยอัลกอริทึมและยูทิลิตี้ยอดนิยม
ภาพรวม MLlib:
- spark.mllib มี API ดั้งเดิมที่สร้างขึ้นบน RDD ขณะนี้อยู่ในโหมดการบำรุงรักษา
- spark.ml ให้ API ระดับที่สูงขึ้นที่สร้างขึ้นบน DataFrames สำหรับการสร้างท่อ ML spark.ml เป็น Machine Learning API หลักสำหรับ Spark ในขณะนี้
เครื่องมือ Spark MLlib
Spark MLlib มีเครื่องมือดังต่อไปนี้:
- อัลกอริทึม ML: ML Algorithms เป็นแกนหลักของ MLlib ซึ่งรวมถึงอัลกอริธึมการเรียนรู้ทั่วไปเช่นการจัดหมวดหมู่การถดถอยการจัดกลุ่มและการกรองการทำงานร่วมกัน
- Featurization: Featurization รวมถึงการแยกคุณลักษณะการเปลี่ยนแปลงการลดขนาดและการเลือก
- ท่อส่ง: ท่อส่งเครื่องมือสำหรับสร้างประเมินและปรับแต่ง ML Pipelines
- วิริยะ: ความคงทนช่วยในการบันทึกและโหลดอัลกอริธึมโมเดลและไปป์ไลน์
- ยูทิลิตี้: ยูทิลิตี้สำหรับพีชคณิตเชิงเส้นสถิติและการจัดการข้อมูล
อัลกอริทึม MLlib
อัลกอริทึมและยูทิลิตี้ยอดนิยมใน Spark MLlib ได้แก่ :
- สถิติพื้นฐาน
- การถดถอย
- การจัดหมวดหมู่
- ระบบคำแนะนำ
- การทำคลัสเตอร์
- การลดขนาด
- คุณสมบัติการสกัด
- การเพิ่มประสิทธิภาพ
ให้เราดูรายละเอียดบางส่วนเหล่านี้
สถิติพื้นฐาน
สถิติพื้นฐาน รวมถึงเทคนิคพื้นฐานที่สุดของการเรียนรู้ของเครื่อง ซึ่งรวมถึง:
- สรุปสถิติ : ตัวอย่าง ได้แก่ ค่าเฉลี่ยความแปรปรวนจำนวนสูงสุดค่าต่ำสุดและจำนวนนับเลขศูนย์
- สหสัมพันธ์ : Spearman และ Pearson เป็นวิธีค้นหาความสัมพันธ์
- การสุ่มตัวอย่างแบบแบ่งชั้น : ซึ่งรวมถึง sampleBykey และ sampleByKeyExact
- การทดสอบสมมติฐาน : การทดสอบไคสแควร์ของ Pearson เป็นตัวอย่างของการทดสอบสมมติฐาน
- การสร้างข้อมูลแบบสุ่ม : RandomRDDs, Normal และ Poisson ใช้ในการสร้างข้อมูลแบบสุ่ม
การถดถอย
การถดถอย การวิเคราะห์เป็นกระบวนการทางสถิติสำหรับการประมาณความสัมพันธ์ระหว่างตัวแปร ประกอบด้วยเทคนิคมากมายสำหรับการสร้างแบบจำลองและการวิเคราะห์ตัวแปรหลายตัวเมื่อโฟกัสอยู่ที่ความสัมพันธ์ระหว่างตัวแปรตามและตัวแปรอิสระอย่างน้อยหนึ่งตัว โดยเฉพาะอย่างยิ่งการวิเคราะห์การถดถอยช่วยให้เราเข้าใจว่าค่าทั่วไปของตัวแปรตามเปลี่ยนแปลงอย่างไรเมื่อตัวแปรอิสระตัวใดตัวหนึ่งมีความแตกต่างกันในขณะที่ตัวแปรอิสระอื่น ๆ จะคงที่
การวิเคราะห์การถดถอยใช้กันอย่างแพร่หลายสำหรับการทำนายและการคาดการณ์โดยที่การใช้งานมีความทับซ้อนอย่างมากกับสาขาการเรียนรู้ของเครื่อง การวิเคราะห์การถดถอยยังใช้เพื่อทำความเข้าใจว่าตัวแปรอิสระใดที่เกี่ยวข้องกับตัวแปรตามและเพื่อสำรวจรูปแบบของความสัมพันธ์เหล่านี้ ในสถานการณ์ที่ จำกัด การวิเคราะห์การถดถอยสามารถใช้เพื่อสรุปความสัมพันธ์เชิงสาเหตุระหว่างตัวแปรอิสระและตัวแปรตาม
การจัดหมวดหมู่
การจัดหมวดหมู่ เป็นปัญหาในการระบุว่าชุดของหมวดหมู่ใด (ประชากรย่อย) ที่เป็นของการสังเกตใหม่บนพื้นฐานของชุดข้อมูลการฝึกอบรมที่มีข้อสังเกต (หรืออินสแตนซ์) ซึ่งทราบความเป็นสมาชิกหมวดหมู่ เป็นตัวอย่างของการจดจำรูปแบบ
ในที่นี้จะเป็นตัวอย่างการกำหนดอีเมลที่ระบุในชั้นเรียน 'สแปม' หรือ 'ไม่ใช่สแปม' หรือกำหนดการวินิจฉัยให้กับผู้ป่วยรายหนึ่งตามที่อธิบายโดยลักษณะที่สังเกตได้ของผู้ป่วย (เพศความดันโลหิตการมีหรือไม่มีอาการบางอย่าง ฯลฯ ).
ระบบคำแนะนำ
ถึง ระบบคำแนะนำ เป็นคลาสย่อยของระบบการกรองข้อมูลที่พยายามคาดคะเน“ การให้คะแนน” หรือ“ ความชอบ” ที่ผู้ใช้จะมอบให้กับสินค้า ระบบผู้แนะนำได้รับความนิยมมากขึ้นในช่วงไม่กี่ปีที่ผ่านมาและมีการใช้งานในด้านต่างๆเช่นภาพยนตร์เพลงข่าวหนังสือบทความวิจัยข้อความค้นหาแท็กโซเชียลและผลิตภัณฑ์โดยทั่วไป
โดยทั่วไประบบผู้แนะนำจะจัดทำรายการคำแนะนำด้วยวิธีใดวิธีหนึ่งจากการทำงานร่วมกันและการกรองตามเนื้อหาหรือแนวทางตามบุคลิกภาพ
- การกรองร่วมกัน แนวทางการสร้างแบบจำลองจากพฤติกรรมในอดีตของผู้ใช้ (รายการที่ซื้อก่อนหน้านี้หรือที่เลือกไว้และ / หรือการให้คะแนนเป็นตัวเลขที่มอบให้กับสินค้าเหล่านั้น) รวมถึงการตัดสินใจที่คล้ายกันของผู้ใช้รายอื่น จากนั้นโมเดลนี้จะใช้ในการทำนายรายการ (หรือการให้คะแนนสำหรับสินค้า) ที่ผู้ใช้อาจมีความสนใจ
- การกรองตามเนื้อหา วิธีการใช้ชุดลักษณะที่ไม่ต่อเนื่องของรายการเพื่อแนะนำรายการเพิ่มเติมที่มีคุณสมบัติคล้ายคลึงกัน
นอกจากนี้แนวทางเหล่านี้มักจะรวมกันเป็นระบบผู้แนะนำแบบไฮบริด
การทำคลัสเตอร์
การทำคลัสเตอร์ เป็นงานในการจัดกลุ่มชุดของวัตถุในลักษณะที่วัตถุในกลุ่มเดียวกัน (เรียกว่าคลัสเตอร์) มีความคล้ายคลึงกัน (ในบางแง่หรืออย่างอื่น) ซึ่งกันและกันมากกว่ากลุ่มอื่น ๆ (คลัสเตอร์) ดังนั้นจึงเป็นงานหลักของการขุดข้อมูลเชิงสำรวจและเป็นเทคนิคทั่วไปสำหรับการวิเคราะห์ข้อมูลทางสถิติซึ่งใช้ในหลายสาขารวมถึงการเรียนรู้ของเครื่องการจดจำรูปแบบการวิเคราะห์ภาพการดึงข้อมูลชีวสารสนเทศการบีบอัดข้อมูลและคอมพิวเตอร์กราฟิก
การลดขนาด
การลดขนาด เป็นกระบวนการลดจำนวนตัวแปรสุ่มที่อยู่ระหว่างการพิจารณาโดยการรับชุดของตัวแปรหลัก สามารถแบ่งออกเป็นการเลือกคุณลักษณะและการแยกคุณลักษณะ
- การเลือกคุณสมบัติ: การเลือกคุณลักษณะจะค้นหาตัวแปรดั้งเดิมบางส่วน (เรียกอีกอย่างว่าคุณลักษณะหรือแอตทริบิวต์)
- การสกัดคุณสมบัติ: สิ่งนี้จะแปลงข้อมูลในพื้นที่มิติสูงไปเป็นช่องว่างที่มีมิติน้อยลง การแปลงข้อมูลอาจเป็นแบบเชิงเส้นเช่นเดียวกับใน Principal Component Analysis (PCA) แต่ก็มีเทคนิคการลดขนาดที่ไม่ใช่เชิงเส้นอีกมากมาย
คุณสมบัติการสกัด
คุณสมบัติการสกัด เริ่มต้นจากชุดข้อมูลที่วัดได้เริ่มต้นและสร้างค่าที่ได้รับ (คุณลักษณะ) ที่มีวัตถุประสงค์เพื่อให้ข้อมูลและไม่ซ้ำซ้อนช่วยอำนวยความสะดวกในขั้นตอนการเรียนรู้และการวางนัยทั่วไปในภายหลังและในบางกรณีนำไปสู่การตีความของมนุษย์ที่ดีขึ้น สิ่งนี้เกี่ยวข้องกับการลดขนาด
การเพิ่มประสิทธิภาพ
การเพิ่มประสิทธิภาพ คือการเลือกสิ่งที่ดีที่สุดองค์ประกอบ (เกี่ยวกับเกณฑ์บางประการ) จากชุดทางเลือกที่มีอยู่
ในกรณีที่ง่ายที่สุดปัญหาการเพิ่มประสิทธิภาพประกอบด้วยการเพิ่มหรือลดฟังก์ชันจริงโดยการเลือกค่าอินพุตอย่างเป็นระบบจากภายในชุดที่อนุญาตและคำนวณค่าของฟังก์ชัน ลักษณะทั่วไปของทฤษฎีการเพิ่มประสิทธิภาพและเทคนิคสำหรับสูตรอื่น ๆ ประกอบด้วยคณิตศาสตร์ประยุกต์จำนวนมาก โดยทั่วไปแล้วการเพิ่มประสิทธิภาพจะรวมถึงการค้นหาค่า“ ดีที่สุดที่มี” ของฟังก์ชันวัตถุประสงค์บางอย่างที่กำหนดโดเมน (หรืออินพุต)รวมถึงฟังก์ชันวัตถุประสงค์ประเภทต่างๆและโดเมนประเภทต่างๆ
Use Case - ระบบแนะนำภาพยนตร์
คำชี้แจงปัญหา: ในการสร้างระบบแนะนำภาพยนตร์ซึ่งแนะนำภาพยนตร์ตามความต้องการของผู้ใช้โดยใช้ Apache Spark
ข้อกำหนดของเรา:
ดังนั้นให้เราประเมินข้อกำหนดในการสร้างระบบแนะนำภาพยนตร์ของเรา:
- ประมวลผลข้อมูลจำนวนมาก
- อินพุตจากหลายแหล่ง
- ง่ายต่อการใช้
- การประมวลผลที่รวดเร็ว
อย่างที่เราประเมินได้ความต้องการของเราเราต้องการเครื่องมือ Big Data ที่ดีที่สุดเพื่อประมวลผลข้อมูลขนาดใหญ่ในเวลาอันสั้น ดังนั้น Apache Spark เป็นเครื่องมือที่สมบูรณ์แบบในการติดตั้งระบบแนะนำภาพยนตร์ของเรา
python __init__ ตัวเอง
ตอนนี้ให้เราดู Flow Diagram สำหรับระบบของเรา
ดังที่เราเห็นสิ่งต่อไปนี้ใช้การสตรีมจาก Spark Streaming เราสามารถสตรีมแบบเรียลไทม์หรืออ่านข้อมูลจาก Hadoop HDFS
กำลังรับชุดข้อมูล:
สำหรับระบบแนะนำภาพยนตร์ของเราเราสามารถรับการให้คะแนนผู้ใช้จากเว็บไซต์ยอดนิยมมากมายเช่น IMDB, Rotten Tomatoes และ Times Movie Ratings ชุดข้อมูลนี้มีให้เลือกหลายรูปแบบเช่นไฟล์ CSV ไฟล์ข้อความกฐานข้อมูล nd เราสามารถสตรีมข้อมูลสดจากเว็บไซต์หรือดาวน์โหลดและเก็บไว้ในระบบไฟล์ในเครื่องหรือ HDFS ของเรา
ชุดข้อมูล:
รูปด้านล่างแสดงให้เห็นว่าเราสามารถรวบรวมชุดข้อมูลจากเว็บไซต์ยอดนิยมได้อย่างไร
เมื่อเราสตรีมข้อมูลไปยัง Spark แล้วจะมีลักษณะเช่นนี้
การเรียนรู้ของเครื่อง:
ระบบคำแนะนำทั้งหมดขึ้นอยู่กับอัลกอริทึม Machine Learning กำลังสองน้อยที่สุดสลับกัน . ในที่นี้ ALS คือการวิเคราะห์การถดถอยประเภทหนึ่งที่ใช้การถดถอยเพื่อลากเส้นท่ามกลางจุดข้อมูลในลักษณะนี้เพื่อลดผลรวมของกำลังสองของระยะห่างจากจุดข้อมูลแต่ละจุด ดังนั้นบรรทัดนี้จึงถูกใช้เพื่อทำนายค่าของฟังก์ชันที่ตรงตามค่าของตัวแปรอิสระ
เส้นสีน้ำเงินในแผนภาพคือเส้นการถดถอยที่เหมาะสมที่สุด สำหรับบรรทัดนี้ค่าของมิติ D เป็นค่าต่ำสุด เส้นสีแดงอื่น ๆ ทั้งหมดจะอยู่ห่างจากชุดข้อมูลโดยรวมเสมอ
การใช้งาน Spark MLlib:
- เราจะใช้การกรองการทำงานร่วมกัน (CF) เพื่อคาดคะเนเรตติ้งสำหรับผู้ใช้สำหรับภาพยนตร์เรื่องใดเรื่องหนึ่งโดยพิจารณาจากการให้คะแนนของภาพยนตร์เรื่องอื่น ๆ
- จากนั้นเราจะทำงานร่วมกันกับการให้คะแนนของผู้ใช้รายอื่นสำหรับภาพยนตร์เรื่องนั้น ๆ
- เพื่อให้ได้ผลลัพธ์ต่อไปนี้จาก Machine Learning ของเราเราจำเป็นต้องใช้ DataFrame, Dataset และ SQL Service ของ Spark SQL
นี่คือรหัสหลอกสำหรับโปรแกรมของเรา:
import org.apache.spark.mllib.recommendation.ALS import org.apache.spark.mllib.recommendation.Rating import org.apache.spark.SparkConf // อิมพอร์ตแพ็กเกจที่จำเป็นอื่น ๆ อ็อบเจ็กต์ Movie {def main (args: Array [String] ) {val conf = new SparkConf (). setAppName ('Movie'). setMaster ('local [2]') val sc = new SparkContext (conf) val rawData = sc.textFile ('* อ่านข้อมูลจากไฟล์ Movie CSV * ') //rawData.first () val rawRatings = rawData.map (* แยก rawData บนตัวคั่นแท็บ *) การให้คะแนนค่า = rawRatings.map {* แม็พกรณีอาร์เรย์ของผู้ใช้ภาพยนตร์และการจัดอันดับ *} // การฝึกอบรมโมเดลค่าข้อมูล = ALS.train (เรตติ้ง, 50, 5, 0.01) model.userFeatures model.userFeatures.count model.productFeatures.count val PredictRating = * Predict for User 789 for movie 123 * val userId = * User 789 * val K = 10 val topKRecs = model.recommendProducts (* แนะนำสำหรับผู้ใช้สำหรับค่าเฉพาะของ K *) println (topKRecs.mkString ('')) val movies = sc.textFile ('* Read Movie List Data *') val titles = movies.map (line => line.split ('|') ใช้เวลา ( 2)). map (array => (array (0) .toInt, array (1))). collectAsMap () val titlesRDD = movies.map (line => line.split ('|'). take (2) ) .map (array => (array (0) .toInt, array (1))). cache () titles (123) val moviesForUser = rating. * Search for User 789 * val sqlContext = * Create SQL Context * val moviesRecommended = sqlContext. * สร้าง DataFrame ของภาพยนตร์ที่แนะนำ * moviesRecommended.registerTempTable ('moviesRecommendedTable') sqlContext.sql ('Select count (*) จาก moviesRecommendedTable') foreach (println) moviesForUser * เรียงลำดับการให้คะแนนสำหรับผู้ใช้ 789 * .map (* จับคู่เรตติ้งกับชื่อภาพยนตร์ *) * พิมพ์การจัดอันดับ * val results = moviesForUser.sortBy (-_. rating) .take (30) .map (rating => (titles (rating.product), rating.rating))}}
เมื่อเราสร้างการคาดการณ์เราสามารถใช้ Spark SQL เพื่อจัดเก็บผลลัพธ์ลงในระบบ RDBMS นอกจากนี้ยังสามารถแสดงบนเว็บแอปพลิเคชัน
ผล:
รูป: ภาพยนตร์แนะนำสำหรับผู้ใช้ 77
เย่! ดังนั้นเราจึงสร้างระบบแนะนำภาพยนตร์โดยใช้ Apache Spark ได้สำเร็จ ด้วยเหตุนี้เราจึงได้กล่าวถึงอัลกอริทึมยอดนิยมที่ Spark MLlib มีให้ เราจะเรียนรู้เพิ่มเติมเกี่ยวกับ Machine Learning ในบล็อกถัดไปเกี่ยวกับ Data Science Algorithms
ก้าวไปข้างหน้าคุณสามารถเรียนรู้ Apache Spark ต่อไปได้ด้วย Spark Tutorial, Spark Streaming Tutorialและคำถามสัมภาษณ์จุดประกายEdureka ทุ่มเทเพื่อมอบประสบการณ์การเรียนรู้ทางออนไลน์ที่ดีที่สุด
ตรวจสอบ ผม หากคุณต้องการเรียนรู้ Spark และสร้างอาชีพในโดเมนของ Spark และสร้างความเชี่ยวชาญในการประมวลผลข้อมูลขนาดใหญ่โดยใช้ RDD, Spark Streaming, SparkSQL, MLlib, GraphX และ Scala พร้อมกรณีการใช้งานในชีวิตจริง