การฝังในแมชชีนเลิร์นนิง: ทำให้ข้อมูลที่ซับซ้อนง่ายขึ้น
เผยแพร่แล้ว: 2022-03-11การทำงานกับข้อมูลที่ไม่ใช่ตัวเลขอาจเป็นเรื่องยาก แม้สำหรับนักวิทยาศาสตร์ข้อมูลที่มีประสบการณ์ โมเดลการเรียนรู้ของเครื่องโดยทั่วไปคาดว่าคุณลักษณะจะเป็นตัวเลข ไม่ใช่คำ อีเมล หน้าเว็บไซต์ รายการ กราฟ หรือการแจกแจงความน่าจะเป็น เพื่อให้มีประโยชน์ ข้อมูลจะต้องถูกแปลงเป็นสเปซเวกเตอร์ก่อน แต่อย่างไร
วิธีหนึ่งที่ได้รับความนิยมคือ ถือว่าคุณลักษณะที่ไม่ใช่ตัวเลขเป็นหมวดหมู่ วิธีนี้อาจใช้ได้ผลดีหากหมวดหมู่มีน้อย (เช่น หากข้อมูลระบุอาชีพหรือประเทศ) อย่างไรก็ตาม หากเราพยายามใช้วิธีนี้กับอีเมล เราน่าจะได้หมวดหมู่มากเท่ากับที่มีตัวอย่าง ไม่มีอีเมลสองฉบับที่เหมือนกันทุกประการ ดังนั้นวิธีนี้จะไม่มีประโยชน์
อีกวิธีหนึ่งคือการ กำหนดระยะห่างระหว่างตัวอย่างข้อมูล ซึ่งเป็นฟังก์ชันที่บอกเราว่าตัวอย่างสองตัวอย่างอยู่ใกล้แค่ไหน หรือเราสามารถกำหนดการ วัดความคล้ายคลึงกัน ซึ่งจะให้ข้อมูลเดียวกันแก่เรา ยกเว้นว่าระยะห่างระหว่างตัวอย่างที่อยู่ใกล้สองตัวอย่างมีขนาดเล็กในขณะที่ความคล้ายคลึงกันมีขนาดใหญ่ ระยะทางในการคำนวณ (ความคล้ายคลึงกัน) ระหว่างตัวอย่างข้อมูลทั้งหมดจะให้เมทริกซ์ระยะทาง (หรือความคล้ายคลึงกัน) แก่เรา นี่คือข้อมูลตัวเลขที่เราสามารถใช้ได้
อย่างไรก็ตาม ข้อมูลนี้จะมีมิติมากเท่ากับที่มีตัวอย่าง ซึ่งมักจะไม่ค่อยดีนักหากเราต้องการใช้เป็นคุณลักษณะ (ดูคำสาปของมิติ) หรือแสดงเป็นภาพ (ในขณะที่พล็อตเรื่องหนึ่งสามารถจัดการกับ 6D ได้ ฉันยังมี เพื่อดูพล็อต 100D) เราสามารถลดจำนวนมิติลงเป็นจำนวนที่เหมาะสมได้หรือไม่?
คำตอบคือใช่! นั่นคือสิ่งที่เรามี การฝัง
การฝังคืออะไรและทำไมจึงใช้
การฝังคือการแสดงข้อมูลมิติต่ำของข้อมูลมิติสูง โดยทั่วไป การฝังจะไม่เก็บข้อมูลทั้งหมดที่มีอยู่ในข้อมูลต้นฉบับ อย่างไรก็ตาม การฝังที่ดีจะจับภาพได้มากพอที่จะแก้ปัญหาในมือได้
มีการฝังจำนวนมากที่เหมาะสำหรับโครงสร้างข้อมูลเฉพาะ ตัวอย่างเช่น คุณอาจเคยได้ยิน word2vec สำหรับข้อมูลข้อความ หรือตัวอธิบายฟูริเยร์สำหรับข้อมูลรูปภาพรูปร่าง แต่เราจะพูดถึงวิธีการใช้การฝังกับข้อมูลใดๆ ที่เราสามารถกำหนดระยะทางหรือการวัดความคล้ายคลึงกันได้ ตราบใดที่เราสามารถคำนวณเมทริกซ์ระยะทาง ธรรมชาติของข้อมูลจะไม่เกี่ยวข้องเลย มันจะทำงานเหมือนกัน ไม่ว่าจะเป็นอีเมล รายการ ต้นไม้ หรือหน้าเว็บ
ในบทความนี้ เราจะแนะนำให้คุณรู้จักกับการฝังประเภทต่างๆ และอภิปรายว่าการฝังตัวที่เป็นที่นิยมบางประเภททำงานอย่างไร และเราจะใช้การฝังเพื่อแก้ปัญหาจริงที่เกี่ยวข้องกับข้อมูลที่ซับซ้อนได้อย่างไร เราจะพูดถึงข้อดีและข้อเสียของวิธีนี้รวมถึงทางเลือกอื่นด้วย ใช่ ปัญหาบางอย่างสามารถแก้ไขได้ดีกว่าด้วยวิธีอื่น แต่น่าเสียดายที่ไม่มีสัญลักษณ์แสดงหัวข้อย่อยสีเงินในการเรียนรู้ของเครื่อง
มาเริ่มกันเลย.
การฝังทำงานอย่างไร
การฝังทั้งหมดพยายามลดมิติข้อมูลในขณะที่รักษาข้อมูล "สำคัญ" ไว้ในข้อมูล แต่การฝังทุกครั้งจะทำในลักษณะของตัวเอง ในที่นี้ เราจะพูดถึงการฝังที่เป็นที่นิยมสองสามอย่างที่สามารถนำไปใช้กับเมทริกซ์ระยะทางหรือความคล้ายคลึงกัน
เราจะไม่พยายามครอบคลุมการฝังทั้งหมดที่นั่น มีการฝังตัวที่รู้จักกันดีอย่างน้อยหนึ่งโหลที่สามารถทำได้ รวมทั้งการฝังและรูปแบบอื่น ๆ ที่ไม่ค่อยมีคนรู้จักอีกมากมาย แต่ละคนมีแนวทางข้อดีและข้อเสียของตัวเอง
หากคุณต้องการดูว่ามีการฝังอื่นๆ ใดบ้าง คุณสามารถเริ่มที่นี่:
- คู่มือผู้ใช้ Scikit-learn
- The Elements of Statistical Learning (Second Edition), Chapter 14
เมทริกซ์ระยะทาง
ลองสัมผัสสั้น ๆ เกี่ยวกับเมทริกซ์ระยะทาง การค้นหาระยะทางที่เหมาะสมสำหรับข้อมูลจำเป็นต้องมีความเข้าใจในปัญหาเป็นอย่างดี มีความรู้ด้านคณิตศาสตร์บ้าง และ บางครั้งอาจต้องใช้โชค ช่วย ในแนวทางที่อธิบายในบทความนี้ นั่นอาจเป็นปัจจัยที่สำคัญที่สุดที่เอื้อต่อความสำเร็จโดยรวมหรือความล้มเหลวของโครงการของคุณ
คุณควรคำนึงถึงรายละเอียดทางเทคนิคบางประการด้วย อัลกอริธึมการฝังจำนวนมากจะถือว่าเมทริกซ์ระยะทาง (หรือ dissimilarity ) $\textbf{D}$ มีศูนย์ในแนวทแยงและสมมาตร ถ้ามันไม่สมมาตร เราสามารถใช้ $(\textbf{D} + \textbf{D}^T) / 2$ แทน อัลกอริทึมที่ใช้เคล็ดลับเคอร์เนลจะถือว่าระยะทางเป็นหน่วยเมตริก ซึ่งหมายความว่าอสมการสามเหลี่ยมจะถือ:
\[\forall a, b, c \;\; d(a,c) \leq d(a,b) + d(b,c)\]นอกจากนี้ หากอัลกอริทึมต้องการเมทริกซ์ความคล้ายคลึงกันแทน เราสามารถใช้ฟังก์ชันลดเสียงเดียวเพื่อแปลงเมทริกซ์ระยะทางเป็นเมทริกซ์ความคล้ายคลึงกัน: ตัวอย่างเช่น $\exp -x$
การวิเคราะห์องค์ประกอบหลัก (PCA)
การวิเคราะห์องค์ประกอบหลักหรือ PCA น่าจะเป็นการฝังที่ใช้กันอย่างแพร่หลายที่สุดจนถึงปัจจุบัน แนวคิดนี้เรียบง่าย: ค้นหาการเปลี่ยนแปลงเชิงเส้นของคุณลักษณะที่เพิ่มความแปรปรวนที่ตรวจจับได้มากที่สุด หรือ (เทียบเท่า) ลดความคลาดเคลื่อนในการสร้างกำลังสองให้เหลือน้อยที่สุด
ให้คุณสมบัติเป็นเมทริกซ์ตัวอย่าง $\textbf{X} \in \mathbb{R}^{n \times p}$ มี $n$ คุณสมบัติและขนาด $p$ เพื่อความง่าย สมมติว่าค่าเฉลี่ยของตัวอย่างข้อมูลเป็นศูนย์ เราสามารถลดจำนวนมิติข้อมูลจาก $p$ เป็น $q$ ได้ด้วยการคูณ $\textbf{X}$ ด้วยเมทริกซ์ออร์โธนอร์มัล $\textbf{V}_q \in \mathbb{R}^{p \times q}$ :
\[\hat{\textbf{X}} = \textbf{X} \textbf{V}_q\]จากนั้น $\hat{\textbf{X}} \in \mathbb{R}^{n \times q}$ จะเป็นชุดคุณลักษณะใหม่ ในการแมปคุณลักษณะใหม่กลับไปยังพื้นที่เดิม (การดำเนินการนี้เรียกว่า reconstruction ) เราเพียงแค่ต้องคูณมันอีกครั้งด้วย $\textbf{V}_q^T$
ตอนนี้ เราต้องค้นหาเมทริกซ์ $\textbf{V}_q$ ที่ลดข้อผิดพลาดในการสร้างใหม่:
\[\min_{\textbf{V}_q} ||\textbf{X}\textbf{V}_q\textbf{V}_q^T - \textbf{X}||^2\]คอลัมน์ของเมทริกซ์ $\textbf{V}_q$ เรียกว่า ทิศทางขององค์ประกอบหลัก และคอลัมน์ของ $\hat{\textbf{X}}$ เรียกว่า ส่วนประกอบหลัก ในเชิงตัวเลข เราสามารถค้นหา $\textbf{V}_q$ ได้โดยใช้ SVD-decomposition กับ $\textbf{X}$ แม้ว่าจะมีวิธีอื่นที่ใช้ได้เท่าเทียมกัน
PCA สามารถใช้กับคุณสมบัติตัวเลขได้โดยตรง หรือถ้าคุณลักษณะของเราไม่ใช่ตัวเลข เราก็สามารถใช้กับเมทริกซ์ระยะทางหรือความคล้ายคลึงกันได้
หากคุณใช้ Python PCA จะถูกนำไปใช้ใน scikit-learn
ข้อดี ของวิธีนี้คือคำนวณได้เร็วและป้องกันสัญญาณรบกวนในข้อมูลได้ดี
ข้อเสีย คือสามารถจับโครงสร้างเชิงเส้นได้เท่านั้น ดังนั้นข้อมูลที่ไม่ใช่เชิงเส้นที่มีอยู่ในข้อมูลดั้งเดิมจึงมีแนวโน้มที่จะสูญหาย
เคอร์เนล PCA
Kernel PCA เป็น PCA เวอร์ชันที่ไม่เป็นเชิงเส้น แนวคิดคือการใช้ เคล็ดลับเคอร์เนล ซึ่งคุณอาจเคยได้ยินมาบ้างหากคุณคุ้นเคยกับ Support Vector Machines SVM
โดยเฉพาะอย่างยิ่ง มีหลายวิธีในการคำนวณ PCA หนึ่งในนั้นคือการคำนวณ eigendecomposition ของ gram matrix รุ่น double-centered $\textbf{X} \textbf{X}^T \in \mathbb{R}^{n \times n}$ ตอนนี้ ถ้าเราคำนวณ เคอร์เนลเมทริกซ์ $\textbf{K} \in \mathbb{R}^{n \times n}$ สำหรับข้อมูลของเรา Kernel PCA จะถือว่ามันเป็นเมทริกซ์แกรมเพื่อค้นหาองค์ประกอบหลัก
ให้ $x_i$, $i \in {1,..,n}$ เป็นตัวอย่างคุณลักษณะ เมทริกซ์เคอร์เนลถูกกำหนดโดยฟังก์ชันเคอร์เนล $K(x_i,x_j)=\langle \phi(x_i),\phi(x_j) \rangle$
ตัวเลือกยอดนิยมคือเคอร์เนลเรเดียล:
\[K(x_i,x_j)=\exp -\gamma \cdot d(x_i,x_j)\]โดยที่ $d$ เป็นฟังก์ชันระยะทาง
Kernel PCA กำหนดให้เราต้องระบุระยะทาง ตัวอย่างเช่น สำหรับคุณสมบัติเชิงตัวเลข เราสามารถใช้ระยะทางแบบยุคลิดได้: $d(x_i,x_j)=\vert\vert x_i-x_j \vert \vert ^2$
สำหรับคุณสมบัติที่ไม่ใช่ตัวเลข เราอาจจำเป็นต้องสร้างสรรค์ สิ่งหนึ่งที่ต้องจำไว้คืออัลกอริธึมนี้ถือว่าระยะทางของเราเป็นหน่วยเมตริก
หากคุณใช้ Python Kernel PCA จะถูกนำไปใช้ใน scikit-learn
ข้อดี ของวิธี Kernel PCA คือสามารถจับโครงสร้างข้อมูลที่ไม่เป็นเชิงเส้นได้
ข้อเสีย คือ มีความไวต่อสัญญาณรบกวนในข้อมูล และการเลือกระยะทางและฟังก์ชันเคอร์เนลจะส่งผลอย่างมากต่อผลลัพธ์
การปรับขนาดหลายมิติ (MDS)
มาตราส่วนหลายมิติ (MDS) พยายามรักษาระยะห่างระหว่างตัวอย่างทั่วโลก แนวคิดนี้ค่อนข้างเข้าใจง่ายและทำงานได้ดีกับเมทริกซ์ระยะทาง
โดยเฉพาะอย่างยิ่ง จากตัวอย่างคุณลักษณะ $x_i$, $i \in {1,..,n}$ และฟังก์ชันระยะทาง $d$ เราคำนวณตัวอย่างคุณลักษณะใหม่ $z_i \in \mathbb{R}^{q}$, $i \in {1,..,n}$ โดยการลด ฟังก์ชัน stress ให้น้อยที่สุด:
\[\min_{z_1,..,z_n} \sum_{1 \leq i < j \leq n} (d(x_i, x_j) - ||z_i - z_j||)^2\]หากคุณใช้ Python จะมีการปรับใช้ MDS ใน scikit-learn อย่างไรก็ตาม scikit-learn ไม่สนับสนุนการแปลงคะแนนที่ไม่อยู่ในตัวอย่าง ซึ่งอาจไม่สะดวกหากเราต้องการใช้การฝังร่วมกับแบบจำลองการถดถอยหรือการจัดหมวดหมู่ โดยหลักการแล้วมันเป็นไปได้
ข้อดี ของ MDS คือแนวคิดสอดคล้องกับกรอบงานของเราอย่างสมบูรณ์ และไม่ได้รับผลกระทบจากสัญญาณรบกวนในข้อมูลมากนัก
ข้อเสีย คือการใช้งานใน scikit-learn ค่อนข้างช้าและไม่รองรับการแปลงที่ไม่อยู่ในตัวอย่าง
ใช้กรณี: การติดตามการจัดส่ง
การตั้งถิ่นฐานไม่กี่แห่งบนเกาะเขตร้อนขนาดเล็กได้พัฒนาบริการจัดส่งพัสดุภัณฑ์เพื่อรองรับอุตสาหกรรมการท่องเที่ยวในท้องถิ่น พ่อค้าคนหนึ่งในการตั้งถิ่นฐานเหล่านี้ตัดสินใจที่จะดำเนินการเพื่อให้ได้เปรียบเหนือการแข่งขัน ดังนั้นเขาจึงตั้งค่าระบบเฝ้าระวังด้วยดาวเทียมเพื่อติดตามการจัดส่งพัสดุภัณฑ์ทั้งหมดบนเกาะ เมื่อรวบรวมข้อมูลแล้ว พ่อค้าก็เรียกนักวิทยาศาสตร์ข้อมูล (เรานั่นเอง!) เพื่อช่วยตอบคำถามต่อไปนี้: เราสามารถทำนายปลายทางของพัสดุภัณฑ์ที่กำลังเดินทางได้หรือไม่?

ชุดข้อมูลนี้มีข้อมูลเกี่ยวกับการจัดส่งที่ติดตาม 200 รายการ สำหรับการจัดส่งที่ติดตามทุกครั้ง จะมีรายการพิกัด (x,y) ของสถานที่ทั้งหมดที่ตรวจพบพัสดุภัณฑ์ ซึ่งโดยทั่วไปแล้วจะอยู่ระหว่างการสังเกตการณ์ 20 ถึง 50 ครั้ง พล็อตด้านล่างแสดงให้เห็นว่าข้อมูลนี้มีลักษณะอย่างไร
ข้อมูลนี้ดูเหมือนปัญหา—สองรสชาติที่แตกต่างกันจริงๆ
ปัญหาแรกคือข้อมูลที่เรากำลังจัดการนั้นมีมิติสูง ตัวอย่างเช่น ถ้าทุกแพ็คเกจถูกตรวจพบที่ 50 แห่ง ข้อมูลของเราจะมี 100 มิติข้อมูล—ฟังดูเหมือนมาก เมื่อเทียบกับตัวอย่าง 200 รายการที่คุณจำหน่าย
ปัญหาที่สอง: เส้นทางการจัดส่งที่แตกต่างกันจริง ๆ แล้วมีจำนวนการสังเกตต่างกัน ดังนั้นเราจึงไม่สามารถซ้อนรายการด้วยพิกัดเพื่อแสดงข้อมูลในรูปแบบตารางได้
พ่อค้าใช้นิ้วเคาะโต๊ะอย่างไม่อดทน และนักวิทยาศาสตร์ข้อมูลก็พยายามอย่างหนักที่จะไม่แสดงอาการตื่นตระหนกใดๆ
นี่คือจุดที่เมทริกซ์ระยะทางและการฝังจะสะดวก เราแค่ต้องหาวิธีเปรียบเทียบเส้นทางการจัดส่งสองเส้นทาง ระยะทาง Frechet ดูเหมือนจะเป็นทางเลือกที่เหมาะสม ด้วยระยะทาง เราสามารถคำนวณเมทริกซ์ระยะทางได้
หมายเหตุ: ขั้นตอนนี้อาจใช้เวลาสักครู่ เราจำเป็นต้องคำนวณระยะทาง $O(n^2)$ โดยแต่ละระยะทางมีการวนซ้ำ $O(k^2)$ โดยที่ $n$ คือจำนวนตัวอย่าง และ $k$ คือจำนวนการสังเกตในตัวอย่างเดียว การเขียนฟังก์ชันระยะทางอย่างมีประสิทธิภาพเป็นสิ่งสำคัญ ตัวอย่างเช่น ใน Python คุณสามารถใช้ numba เพื่อเร่งการคำนวณนี้ได้หลายเท่า
การแสดงภาพการฝัง
ตอนนี้ เราสามารถใช้การฝังเพื่อลดจำนวนมิติจาก 200 เหลือเพียงไม่กี่ เราเห็นได้อย่างชัดเจนว่ามีเส้นทางการค้าเพียงไม่กี่เส้นทาง ดังนั้นเราอาจหวังว่าจะพบการนำเสนอข้อมูลที่ดี แม้จะอยู่ในสองหรือสามมิติก็ตาม เราจะใช้การฝังที่เราพูดถึงก่อนหน้านี้: PCA, Kernel PCA และ MDS
บนแปลงด้านล่าง คุณสามารถดูข้อมูลเส้นทางที่มีป้ายกำกับ (ให้ไว้เพื่อการสาธิต) และการแสดงข้อมูลโดยการฝังใน 2D และ 3D (จากซ้ายไปขวา) ข้อมูลที่มีป้ายกำกับระบุว่าโพสต์การค้าสี่แห่งเชื่อมต่อกันด้วยเส้นทางการค้าหกเส้นทาง เส้นทางการค้าสองในหกเส้นทางเป็นแบบสองทิศทาง ซึ่งทำให้มีกลุ่มการขนส่งทั้งหมดแปดกลุ่ม (6+2) อย่างที่คุณเห็น เราได้แยกกลุ่มการจัดส่งทั้งแปดกลุ่มที่มีการฝัง 3D อย่างชัดเจน
นี่เป็นการเริ่มต้นที่ดี
การฝังใน Model Pipeline
ตอนนี้ เราพร้อมที่จะฝึกการฝัง แม้ว่า MDS จะแสดงผลลัพธ์ที่ดีที่สุด แต่ก็ค่อนข้างช้า นอกจากนี้ การนำ scikit-learn ไปใช้งานไม่สนับสนุนการแปลงที่ไม่อยู่ในตัวอย่าง ไม่ใช่ปัญหาสำหรับการวิจัย แต่สำหรับการผลิตได้ ดังนั้นเราจะใช้ Kernel PCA แทน สำหรับ Kernel PCA เราไม่ควรลืมที่จะใช้เคอร์เนลเรเดียลกับเมทริกซ์ระยะทางล่วงหน้า
คุณจะเลือกจำนวนมิติการส่งออกได้อย่างไร? การวิเคราะห์พบว่าแม้แต่ 3D ก็ใช้งานได้ปกติ เพื่อความปลอดภัยและไม่ทิ้งข้อมูลสำคัญใดๆ ไป ให้ตั้งค่าเอาต์พุตการฝังเป็น 10D เพื่อประสิทธิภาพที่ดีที่สุด จำนวนของมิติเอาท์พุตสามารถตั้งค่าเป็นไฮเปอร์พารามิเตอร์ของโมเดล แล้วปรับแต่งโดยการตรวจสอบโยง
ดังนั้น เราจะมีฟีเจอร์ตัวเลข 10 อย่างที่เราสามารถใช้เป็นอินพุตสำหรับโมเดลการจัดหมวดหมู่แทบทุกประเภท แล้วโมเดลเชิงเส้นตรงและโมเดลไม่เชิงเส้นหนึ่งโมเดล: เช่น Logistic Regression และ Gradient Boosting สำหรับการเปรียบเทียบ ลองใช้สองโมเดลนี้ด้วยเมทริกซ์ระยะทางเต็มเป็นอินพุต ยิ่งไปกว่านั้น เรามาทดสอบ SVM กันด้วย (SVM ออกแบบมาเพื่อทำงานกับเมทริกซ์ระยะทางโดยตรง ดังนั้นจึงไม่จำเป็นต้องฝัง)
ความถูกต้องของแบบจำลองในชุดทดสอบแสดงไว้ด้านล่าง (10 ชุดและชุดข้อมูลทดสอบถูกสร้างขึ้นเพื่อให้เราสามารถประมาณความแปรปรวนของแบบจำลองได้):
- Gradient Boosting ที่จับคู่กับการฝัง (KernelPCA+GB) เป็นที่หนึ่ง มีประสิทธิภาพดีกว่าการไล่ระดับการไล่ระดับสีโดยไม่มีการฝัง (GB) ที่นี่ Kernel PCA พิสูจน์แล้วว่ามีประโยชน์
- Logistic Regression ไม่เป็นไร สิ่งที่น่าสนใจคือ Logistic Regression with no embedding (LR) ทำได้ดีกว่าการ embedding (KernelPCA+LR) นี่ไม่ใช่สิ่งที่ไม่คาดคิดโดยสิ้นเชิง โมเดลเชิงเส้นไม่ยืดหยุ่นมากนักแต่ค่อนข้างยากที่จะใส่มากเกินไป ในที่นี้ การสูญเสียข้อมูลที่เกิดจากการฝังดูเหมือนจะมีประโยชน์มากกว่าประโยชน์ของมิติข้อมูลเข้าที่มีขนาดเล็กลง
- สุดท้ายแต่ไม่ท้ายสุด SVM ก็ทำงานได้ดีเช่นกัน แม้ว่าความแปรปรวนของรุ่นนี้จะค่อนข้างสำคัญ
ความแม่นยำของแบบจำลอง
รหัส Python สำหรับกรณีการใช้งานนี้มีอยู่ที่ GitHub
บทสรุป
เราได้อธิบายว่าการฝังคืออะไร และแสดงให้เห็นว่าสามารถใช้ร่วมกับเมทริกซ์ระยะทางเพื่อแก้ปัญหาในโลกแห่งความเป็นจริงได้อย่างไร เวลาสำหรับคำตัดสิน:
การฝังเป็นสิ่งที่นักวิทยาศาสตร์ข้อมูลควรใช้หรือไม่ เรามาดูเรื่องราวทั้งสองด้านกัน
ข้อดีและข้อเสียของการใช้ Embeddings
ข้อดี:
- วิธีนี้ช่วยให้เราสามารถทำงานกับโครงสร้างข้อมูลที่ผิดปกติหรือซับซ้อนได้ ตราบใดที่คุณสามารถกำหนดระยะทาง ซึ่งโดยปกติแล้วคุณทำได้—ด้วยความรู้ จินตนาการ และโชคระดับหนึ่ง
- เอาต์พุตเป็นข้อมูลตัวเลขมิติต่ำ ซึ่งคุณสามารถวิเคราะห์ จัดกลุ่ม หรือใช้เป็นคุณสมบัติของโมเดลสำหรับโมเดลแมชชีนเลิร์นนิงแทบทุกประเภท
จุดด้อย:
เมื่อใช้วิธีนี้ เราจะสูญเสียข้อมูลบางส่วน:
- ระหว่างขั้นตอนแรก เมื่อเราแทนที่ข้อมูลเดิมด้วยเมทริกซ์ความคล้ายคลึงกัน
- ในขั้นที่ 2 เมื่อเราลดมิติลงด้วยการฝัง
- ขึ้นอยู่กับฟังก์ชันข้อมูลและระยะทาง การคำนวณเมทริกซ์ระยะทางอาจใช้เวลานาน ซึ่งอาจบรรเทาได้ด้วยฟังก์ชันระยะทางที่เขียนได้อย่างมีประสิทธิภาพ
- การฝังบางอย่างไวต่อสัญญาณรบกวนในข้อมูลมาก ซึ่งอาจบรรเทาได้ด้วยการล้างข้อมูลเพิ่มเติม
- การฝังบางอย่างมีความอ่อนไหวต่อการเลือกพารามิเตอร์ไฮเปอร์ของมัน ซึ่งอาจบรรเทาได้ด้วยการวิเคราะห์อย่างระมัดระวังหรือการปรับพารามิเตอร์แบบไฮเปอร์
ทางเลือกอื่น: ทำไมไม่ใช้…?
- ทำไมไม่เพียงแค่ใช้การฝังโดยตรงบนข้อมูล แทนที่จะเป็นเมทริกซ์ระยะทาง?
หากคุณรู้จักการฝังที่สามารถเข้ารหัสข้อมูลของคุณโดยตรงได้อย่างมีประสิทธิภาพ ให้ใช้วิธีการดังกล่าว ปัญหาคือมันไม่มีอยู่จริงเสมอไป - ทำไมไม่เพียงแค่ใช้การจัดกลุ่มบนเมทริกซ์ระยะทาง?
หากเป้าหมายเดียวของคุณคือการแบ่งกลุ่มชุดข้อมูล ก็ทำได้ทั้งหมด วิธีการจัดคลัสเตอร์บางวิธีใช้ประโยชน์จากการฝังด้วย (เช่น Spectral Clustering) หากคุณต้องการเรียนรู้เพิ่มเติม นี่คือบทแนะนำเกี่ยวกับการจัดกลุ่ม - ทำไมไม่เพียงแค่ใช้เมทริกซ์ระยะทางเป็นคุณสมบัติ?
ขนาดของเมทริกซ์ระยะทางคือ $(n_{samples}, n_{samples})$ ไม่ใช่ทุกรุ่นจะจัดการกับมันได้อย่างมีประสิทธิภาพ—บางรุ่นอาจใส่มากเกินไป, บางรุ่นอาจใส่ได้ช้า, บางรุ่นอาจไม่พอดีกันทั้งหมด โมเดลที่มีความแปรปรวนต่ำจะเป็นตัวเลือกที่ดีในที่นี้ เช่น โมเดลเชิงเส้นและ/หรือแบบปกติ - ทำไมไม่ใช้ SVM กับเมทริกซ์ระยะทาง?
SVM เป็นโมเดลที่ยอดเยี่ยม ซึ่งทำงานได้ดีในกรณีการใช้งานของเรา อย่างไรก็ตาม มีข้อแม้บางประการ อย่างแรก หากเราต้องการเพิ่มคุณสมบัติอื่นๆ (อาจเป็นเพียงตัวเลขธรรมดา) เราจะไม่สามารถทำได้โดยตรง เราต้องรวมพวกมันไว้ในเมทริกซ์ความคล้ายคลึงของเราและอาจสูญเสียข้อมูลที่มีค่าบางอย่าง ประการที่สอง ดีเท่ากับ SVM รุ่นอื่นอาจทำงานได้ดีกว่าสำหรับปัญหาเฉพาะของคุณ - ทำไมไม่เพียงแค่ใช้การเรียนรู้เชิงลึก?
เป็นความจริง สำหรับปัญหาใดๆ ก็ตาม คุณสามารถหาโครงข่ายประสาทเทียมที่เหมาะสมได้หากคุณค้นหานานพอ อย่างไรก็ตาม พึงระลึกไว้เสมอว่ากระบวนการในการค้นหา ฝึกอบรม ตรวจสอบ และปรับใช้โครงข่ายประสาทเทียมนี้ไม่จำเป็นต้องเป็นขั้นตอนง่ายๆ ดังนั้นเช่นเคย ใช้วิจารณญาณที่ดีที่สุดของคุณ
ในหนึ่งประโยค
การฝังร่วมกับเมทริกซ์ระยะทางเป็นเครื่องมือที่มีประโยชน์อย่างเหลือเชื่อ หากคุณต้องทำงานกับข้อมูลที่ไม่ใช่ตัวเลขที่ซับซ้อน โดยเฉพาะอย่างยิ่งเมื่อคุณไม่สามารถแปลงข้อมูลของคุณเป็นพื้นที่เวกเตอร์ได้โดยตรง และต้องการมีอินพุตมิติต่ำสำหรับโมเดลของคุณ