การเรียนรู้ของเครื่องสำหรับนักพัฒนา Java ตอนที่ 1: อัลกอริทึมสำหรับการเรียนรู้ของเครื่อง

รถยนต์ที่ขับเคลื่อนด้วยตัวเองซอฟต์แวร์ตรวจจับใบหน้าและลำโพงที่ควบคุมด้วยเสียงล้วนสร้างขึ้นจากเทคโนโลยีและกรอบการเรียนรู้ของเครื่องและนี่เป็นเพียงคลื่นลูกแรก ในทศวรรษหน้าผลิตภัณฑ์รุ่นใหม่จะเปลี่ยนแปลงโลกของเราโดยริเริ่มแนวทางใหม่ ๆ ในการพัฒนาซอฟต์แวร์แอปพลิเคชันและผลิตภัณฑ์ที่เราสร้างและใช้งาน

ในฐานะนักพัฒนา Java คุณต้องการก้าวข้ามเส้นโค้งนี้โดยเฉพาะอย่างยิ่งเนื่องจาก บริษัท เทคโนโลยีเริ่มลงทุนอย่างจริงจังในการเรียนรู้ของเครื่อง สิ่งที่คุณเรียนรู้ในวันนี้คุณสามารถต่อยอดได้ในอีก 5 ปีข้างหน้า แต่คุณต้องเริ่มต้นที่ไหนสักแห่ง

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

การเรียนรู้ของเครื่องสำหรับนักพัฒนา Java ตอนที่ 2

คุณพร้อมสำหรับขั้นตอนต่อไปหรือยัง? ครึ่งหลังของบทช่วยสอนนี้จะแสดงวิธีพัฒนาและปรับใช้ไปป์ไลน์ข้อมูลแมชชีนเลิร์นนิงของคุณ

การเรียนรู้ของเครื่องและปัญญาประดิษฐ์

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

วิธีการเรียนรู้ของเครื่องที่ล้ำสมัยจำนวนมากมีพื้นฐานมาจากแนวคิดเก่าแก่หลายทศวรรษ สิ่งที่เปลี่ยนแปลงไปในช่วงทศวรรษที่ผ่านมาคือขณะนี้คอมพิวเตอร์ (และแพลตฟอร์มคอมพิวเตอร์แบบกระจาย) มีพลังการประมวลผลที่จำเป็นสำหรับอัลกอริทึมการเรียนรู้ของเครื่อง อัลกอริธึมการเรียนรู้ของเครื่องส่วนใหญ่ต้องการการคูณเมทริกซ์จำนวนมากและการดำเนินการทางคณิตศาสตร์อื่น ๆ ในการประมวลผล เทคโนโลยีการคำนวณเพื่อจัดการการคำนวณเหล่านี้ไม่ได้มีอยู่เมื่อสองทศวรรษที่แล้ว แต่ก็มีอยู่ในปัจจุบัน

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

การเรียนรู้ภายใต้การดูแลกับการเรียนรู้ที่ไม่มีผู้ดูแล

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

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

ตัวอย่างเช่นแอปพลิเคชันอสังหาริมทรัพย์ที่ชาญฉลาดอาจได้รับการฝึกฝนด้วยเวกเตอร์คุณลักษณะซึ่งรวมถึงขนาดจำนวนห้องและอายุของบ้านแต่ละประเภท ช่างติดฉลากที่เป็นมนุษย์จะติดป้ายชื่อบ้านแต่ละหลังด้วยราคาบ้านที่ถูกต้องตามปัจจัยเหล่านี้ ด้วยการวิเคราะห์ข้อมูลดังกล่าวแอปพลิเคชันอสังหาริมทรัพย์จะได้รับการฝึกอบรมเพื่อตอบคำถาม: " ฉันจะได้รับเงินเท่าไหร่สำหรับบ้านหลังนี้ "

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

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

บทความนี้มุ่งเน้นไปที่แมชชีนเลิร์นนิงภายใต้การดูแลซึ่งเป็นแนวทางที่พบบ่อยที่สุดในการเรียนรู้ของเครื่องในปัจจุบัน

แมชชีนเลิร์นนิงภายใต้การดูแล

การเรียนรู้ของเครื่องทั้งหมดขึ้นอยู่กับข้อมูล สำหรับโครงการแมชชีนเลิร์นนิงภายใต้การดูแลคุณจะต้องติดป้ายกำกับข้อมูลให้มีความหมายสำหรับผลลัพธ์ที่คุณต้องการ ในตารางที่ 1 ให้สังเกตว่าระเบียนบ้านแต่ละแถวมีป้ายกำกับ "ราคาบ้าน" ด้วยการเชื่อมโยงข้อมูลแถวกับป้ายราคาบ้านในที่สุดอัลกอริทึมจะสามารถทำนายราคาตลาดสำหรับบ้านที่ไม่อยู่ในชุดข้อมูลได้ (โปรดทราบว่าขนาดบ้านจะขึ้นอยู่กับตารางเมตรและราคาบ้านจะขึ้นอยู่กับยูโร)

ตารางที่ 1. บันทึกบ้าน

ลักษณะเฉพาะ ลักษณะเฉพาะ ลักษณะเฉพาะ ฉลาก
ขนาดบ้าน จำนวนห้องพัก อายุบ้าน ค่าใช้จ่ายโดยประมาณของบ้าน
90 ม² / 295 ฟุต 2 ห้อง 23 ปี 249,000 €
101 ม² / 331 ฟุต 3 ห้อง n / a 338,000 €
1330 ม² / 4363 ฟุต 11 ห้อง 12 ปี 6,500,000 €

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

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

เครื่องจักรเรียนรู้ที่จะทำนายได้อย่างไร

ความท้าทายของแมชชีนเลิร์นนิงภายใต้การดูแลคือการค้นหาฟังก์ชันการคาดคะเนที่เหมาะสมสำหรับคำถามเฉพาะ ศาสตร์ความท้าทายคือการหาฟังก์ชั่นอินพุทที่ใช้เวลาตัวแปรxและผลตอบแทนที่คุ้มค่าการทำนายY ฟังก์ชันสมมติฐานนี้(h θ ) เป็นผลลัพธ์ของกระบวนการฝึกอบรม บ่อยครั้งที่ฟังก์ชันสมมติฐานเรียกอีกอย่างว่าเป้าหมายหรือฟังก์ชันการทำนาย

Gregor Roth

In most cases, x represents a multiple-data point. In our example, this could be a two-dimensional data point of an individual house defined by the house-size value and the number-of-rooms value. The array of these values is referred to as the feature vector. Given a concrete target function, the function can be used to make a prediction for each feature vector x. To predict the price of an individual house, you could call the target function by using the feature vector { 101.0, 3.0 } containing the house size and the number of rooms:

 // target function h (which is the output of the learn process) Function h = ...; // set the feature vector with house size=101 and number-of-rooms=3 Double[] x = new Double[] { 101.0, 3.0 }; // and predicted the house price (label) double y = h.apply(x); 

ในรายการ 1 ค่าxตัวแปรอาร์เรย์แสดงถึงเวกเตอร์คุณลักษณะของบ้าน Yค่าส่งกลับโดยฟังก์ชั่นเป้าหมายคือราคาบ้านที่คาดการณ์ไว้

ความท้าทายของการเรียนรู้ของเครื่องคือการกำหนดฟังก์ชันเป้าหมายที่จะทำงานได้อย่างถูกต้องที่สุดสำหรับอินสแตนซ์ข้อมูลที่ไม่รู้จักและมองไม่เห็น ในการเรียนรู้เครื่อง, ฟังก์ชั่นเป้าหมาย (h θ ) บางครั้งเรียกว่ารูปแบบ แบบจำลองนี้เป็นผลมาจากกระบวนการเรียนรู้

Gregor Roth

อัลกอริทึมการเรียนรู้จะมองหาโครงสร้างหรือรูปแบบในข้อมูลการฝึกตามตัวอย่างการฝึกอบรมที่มีป้ายกำกับ จากสิ่งเหล่านี้จะสร้างแบบจำลองที่สรุปได้ดีจากข้อมูลนั้น

Typically, the learning process is explorative. In most cases, the process will be performed multiple times by using different variations of learning algorithms and configurations.

Eventually, all the models will be evaluated based on performance metrics, and the best one will be selected. That model will then be used to compute predictions for future unlabeled data instances.

Linear regression

ในการฝึกเครื่องจักรให้คิดขั้นตอนแรกคือการเลือกอัลกอริทึมการเรียนรู้ที่คุณจะใช้ การถดถอยเชิงเส้นเป็นหนึ่งในอัลกอริธึมการเรียนรู้ภายใต้การดูแลที่ง่ายและเป็นที่นิยมมากที่สุด อัลกอริทึมนี้ถือว่าความสัมพันธ์ระหว่างคุณสมบัติอินพุตและเลเบลเอาต์พุตเป็นแบบเชิงเส้น ทั่วไปฟังก์ชั่นการถดถอยเชิงเส้นด้านล่างผลตอบแทนคุ้มค่าที่คาดการณ์โดยสรุปองค์ประกอบของแต่ละเวกเตอร์คุณลักษณะคูณด้วยพารามิเตอร์ที (θ) พารามิเตอร์ theta ถูกใช้ในกระบวนการฝึกอบรมเพื่อปรับหรือ "ปรับแต่ง" ฟังก์ชันการถดถอยตามข้อมูลการฝึกอบรม

Gregor Roth

In the linear regression function, theta parameters and feature parameters are enumerated by a subscription number. The subscription number indicates the position of theta parameters (θ) and feature parameters (x) within the vector. Note that feature x0 is a constant offset term set with the value 1 for computational purposes. As a result, the index of a domain-specific feature such as house-size will start with x1. As an example, if x1 is set for the first value of the House feature vector, house size, then x2 will be set for the next value, number-of-rooms, and so forth.

Listing 2 shows a Java implementation of this linear regression function, shown mathematically as hθ(x). For simplicity, the calculation is done using the data type double. Within the apply() method, it is expected that the first element of the array has been set with a value of 1.0 outside of this function.

Listing 2. Linear regression in Java

 public class LinearRegressionFunction implements Function { private final double[] thetaVector; LinearRegressionFunction(double[] thetaVector) { this.thetaVector = Arrays.copyOf(thetaVector, thetaVector.length); } public Double apply(Double[] featureVector) { // for computational reasons the first element has to be 1.0 assert featureVector[0] == 1.0; // simple, sequential implementation double prediction = 0; for (int j = 0; j < thetaVector.length; j++) { prediction += thetaVector[j] * featureVector[j]; } return prediction; } public double[] getThetas() { return Arrays.copyOf(thetaVector, thetaVector.length); } } 

In order to create a new instance of the LinearRegressionFunction, you must set the theta parameter. The theta parameter, or vector, is used to adapt the generic regression function to the underlying training data. The program's theta parameters will be tuned during the learning process, based on training examples. The quality of the trained target function can only be as good as the quality of the given training data.

ในตัวอย่างด้านล่างLinearRegressionFunctionจะมีการสร้างอินสแตนซ์เพื่อทำนายราคาบ้านตามขนาดบ้าน เมื่อพิจารณาว่า x 0ต้องเป็นค่าคงที่ 1.0 ฟังก์ชันเป้าหมายจะถูกสร้างอินสแตนซ์โดยใช้พารามิเตอร์ theta สองตัว พารามิเตอร์ theta เป็นผลลัพธ์ของกระบวนการเรียนรู้ หลังจากสร้างอินสแตนซ์ใหม่ราคาบ้านที่มีขนาด 1330 ตร.ม. จะได้รับการคาดการณ์ดังนี้:

 // the theta vector used here was output of a train process double[] thetaVector = new double[] { 1.004579, 5.286822 }; LinearRegressionFunction targetFunction = new LinearRegressionFunction(thetaVector); // create the feature vector function with x0=1 (for computational reasons) and x1=house-size Double[] featureVector = new Double[] { 1.0, 1330.0 }; // make the prediction double predictedPrice = targetFunction.apply(featureVector); 

บรรทัดการทำนายของฟังก์ชันเป้าหมายจะแสดงเป็นเส้นสีน้ำเงินในแผนภูมิด้านล่าง บรรทัดได้รับการคำนวณโดยการเรียกใช้ฟังก์ชันเป้าหมายสำหรับค่าขนาดบ้านทั้งหมด แผนภูมิยังรวมถึงคู่ราคา - ขนาดที่ใช้สำหรับการฝึกอบรม

Gregor Roth

จนถึงตอนนี้กราฟการทำนายดูเหมือนจะพอดี พิกัดกราฟ (สกัดและความลาดชัน) { 1.004579, 5.286822 }จะถูกกำหนดโดยเวกเตอร์เธต้า แต่คุณรู้ได้อย่างไรว่าเวกเตอร์ทีต้านี้เหมาะกับแอปพลิเคชันของคุณมากที่สุด? ฟังก์ชันนี้จะเหมาะสมกว่าหรือไม่หากคุณเปลี่ยนพารามิเตอร์ theta ตัวแรกหรือตัวที่สอง ในการระบุเวกเตอร์พารามิเตอร์ theta ที่เหมาะสมที่สุดคุณต้องมีฟังก์ชันยูทิลิตี้ซึ่งจะประเมินว่าฟังก์ชันเป้าหมายทำงานได้ดีเพียงใด

การให้คะแนนฟังก์ชันเป้าหมาย

ในแมชชีนเลิร์นนิงฟังก์ชันต้นทุน (J (θ)) ถูกใช้เพื่อคำนวณข้อผิดพลาดค่าเฉลี่ยหรือ "ต้นทุน" ของฟังก์ชันเป้าหมายที่กำหนด

Gregor Roth