เพื่อน ๆ รู้สึกกันไหมว่า ตอนนี้หันไปทางไหนก็มีแต่คนพูดถึง Machine Learning เต็มไปหมด แม้แต่นอกวงการด้านคอมพิวเตอร์เองก็พูดถึงเรื่องนี้กันเยอะขึ้น เพราะงั้นวันนี้ เรามาดูกันดีว่า Machine Learning คืออะไรกันแน่? พร้อมแนะนำ Algorithm นึง ที่ถือว่าเป็นพื้นฐานสุด ๆ ของ Machine Learning ถ้าพร้อมแล้วก็ไปกันเลยจ้า
Machine Learning คืออะไร?
“Machine Learning” หรือแปลไทยแบบตรงตัวว่า “การเรียนรู้ของเครื่องจักร” เป็นการสอนให้โปรแกรมของเราได้เรียนรู้บางอย่าง ซึ่งจะไม่ได้เขียนโค้ดโต้ง ๆ หรืออัลกอริทึมเป๊ะ ๆ ลงไปในโปรแกรมเลย แต่จะให้เรียนรู้ผ่านรูปแบบข้อมูลที่เราอยากให้เรียนรู้แทน
พูดงี้อาจจะยังไม่เห็นภาพ ลองยกตัวอย่างกันหน่อยดีกว่า
สมมติเรามีรูปภาพ “มะเขือเทศ” กับ “องุ่น” แล้วเราอยากเขียนโปรแกรมเพื่อแยกสองสิ่งนั้นออกจากกัน แบบว่า “เห้ย รูปนี้คือมะเขือเทศนะ รูปนี้คือองุ่นนะ” จะทำไงได้บ้าง?
ถ้าเป็นการเขียนโปรแกรมแบบปกติทั่วไป เราก็จะเขียนโค้ดที่ใช้แยกคุณสมบัติที่ต่างกันของมัน เช่น สี ขนาด รูปร่าง เปลือก ฯลฯ พอเราป้อนรูปมะเขือเทศเข้าไป โปรแกรมก็จะประมวลผลตามโค้ดที่เราเขียน แล้วแสดงผลลัพธ์ว่า นั่นคือรูปของมะเขือเทศ
แต่ถ้าวันนึง เราอยากใส่รูปสับปะรดเข้าไปล่ะ? เราก็ต้องเขียนโค้ดเพิ่มเพื่อแยกสับปะรดออกจากมะเขือเทศและองุ่น ซึ่งถ้าในอนาคตมีผักผลไม้เพิ่มอีกเป็นสิบเป็นร้อยอย่าง เราก็ต้องกลับมาเขียนโค้ดเพิ่มขึ้นเรื่อย ๆ ตามจำนวนผักผลไม้ที่เพิ่มขึ้น
กลับกัน ถ้าเป็น Machine Learning เราจะป้อนรูปมะเขือเทศเข้าไปเหมือนเดิมแหละ แต่เราจะใส่ไปด้วยว่ารูปนี้คือมะเขือเทศ และตอนใส่รูปองุ่นเข้าไป ก็จะระบุว่านั่นคือองุ่นเหมือนกัน จากนั้น โปรแกรมเราจะไปคิด ไปหา หรือไปสร้างกระบวนการ/อัลกอริทึมเพื่อเรียนรู้ว่า รูปนี้คือผักผลไม้อะไร โดยที่เราไม่ต้องไปโค้ดเหมือนก่อนหน้านี้นั่นเอง
แล้ว Linear Regression Algorithm คืออะไร?
“Linear Regression” หรือ “การวิเคราะห์การถดถอยเชิงเส้น” เกิดจากการรวมกันของคำว่า “Linear” ที่แปลว่าเชิงเส้น และ “Regression” ที่แปลว่าการถดถอย โดย Linear Regression จะเป็นความสัมพันธ์ของตัวแปรหรือสิ่งที่เรากำลังสนใจ ซึ่งจะถูกใช้กับการคำนวณค่าที่เป็นตัวเลข เพื่อหาความสัมพันธ์หรือทำนายข้อมูลต่าง ๆ
Linear Regression ถือว่าเป็น Machine Learning ประเภท Supervised Learning หรือ การเรียนรู้แบบมีผู้สอน ชนิดแบบ Statistical Regression ที่เราจะต้องใส่ชุดข้อมูลเข้าไปให้โปรแกรมเรียนรู้ก่อน โดยโปรแกรมจะนำตัวแปรต้นและตัวแปรตามไปคำนวณด้วยสถิติทางคณิตศาสตร์ แล้วก็จะได้ข้อมูลกลับมาเป็นตัวเลขนั่นเอง
โดยสมการความสัมพันธ์ของ Linear Regression ก็คือ y=mx+c เมื่อ
- x คือ ตัวแปรต้น
- y คือ ตัวแปรตาม
- m คือ ความชัน
- c คือ จุดตัดแกน y
ลักษณะความสัมพันธ์ของ Linear Regression เป็นยังไง?
ก่อนจะไปทำความรู้จักกับความสัมพันธ์ของ Linear Regression อยากให้เพื่อน ๆ ได้รู้จักกับศัพท์คำนึงก่อน คำนั้นก็คือ Correlation Coefficient หรือที่มักเรียกกันว่าค่า r เป็นตัวเลขที่เอาไว้บอกลักษณะความสัมพันธ์ระหว่าง 2 ตัวแปร โดยค่า r จะอยู่ระหว่าง -1.0 จนถึง +1.0
ความสัมพันธ์ของ Linear Regression หลัก ๆ จะเป็นดังต่อไปนี้เลยจ้า
1. Positive Linear Relationship
ถ้าค่า r เข้าใกล้ค่า +1.0 จะถือว่าเป็น Positive linear relationship ซึ่งเป็นการแปรผันตรง เมื่อค่าของตัวแปรต้น (x) เพิ่ม ค่าของตัวแปรตาม (y) ก็จะเพิ่มเช่นกัน
2. Negative Linear Relationship
ถ้าค่า r เข้าใกล้ค่า -1.0 จะถือว่าเป็น Negative linear relationship ซึ่งเป็นการแปรผกผันเมื่อค่าของตัวแปรต้น (x) เพิ่ม ค่าของตัวแปรตาม (y) จะลดลง
3. No Apparent Linear Relationship
ถ้าค่า r เข้าใกล้ค่า 0 จะถือว่าเป็น No apparent linear relationship รูปแบบที่ตัวแปรต้น (x) และตัวแปรตาม (y) ไม่มีความสัมพันธ์กันชัดเจน จึงไม่สามารถระบุได้ว่าเป็นความสัมพันธ์แบบไหนนั่นเอง
เอาล่ะ มาลองเทรน Linear Regression Model กันดีกว่า!
เกริ่นกันมาเยอะแล้ว เพื่อให้เห็นภาพชัดขึ้น เรามาลองโค้ดกันดีกว่า วันนี้เราจะใช้ Python กับ Scikit-learn กันเป็นหลัก เพื่อความง่าย เราจะเขียนโค้ดที่ Jupyter Notebook กัน (หรือจะใช้ Visual Studio Code, PyCharm ก็ได้ตามที่ทุกคนสะดวกเลยจ้า)
โจทย์ก็คือ เราจะทำ Model สำหรับทำนายจำนวนสินค้าที่เราจะขายได้ในแต่ละเดือน โดยมีชุดข้อมูลตัวอย่างเป็นจำนวนสินค้าที่ขายได้ตลอด 10 เดือน ย้อนหลังไปตั้งแต่เดือนแรกที่เริ่มขาย
เริ่มต้นด้วยการ import สิ่งที่ต้องใช้กันก่อน นั่นก็คือ
- numpy
- matplotlib.pyplot
- sklearn.linear_model
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
เสร็จแล้ว เราจะเพิ่มข้อมูลตัวอย่างให้โปรแกรมได้เทรน โดยจะให้ x เป็นเดือนแต่ละเดือน ตั้งแต่ที่เราเริ่มขายสินค้า และให้ y เป็นจำนวนสินค้าที่เราขายได้ในแต่ละเดือน จากนั้นเรามาลอง Scatter Plot กัน
x=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # เดือน
y=[25,35,40,42,51,60,62,72,78,90] # จำนวนสินค้าที่ขายได้ในแต่ละเดือน
plt.scatter(x,y) # Scatter Plot
จะเห็นเลยว่า เป็นการแปรผันตรงที่สวยงาม~ พอได้กราฟของข้อมูลตัวอย่างแล้ว เราก็มาสร้างและเทรน Model กันเถอะ
model=LinearRegression()
x=np.array(x) # เปลี่ยน list เป็น array
y=np.array(y) # เปลี่ยน list เป็น array
x=x.reshape(-1,1) # เปลี่ยน x ให้เป็น array 2D
model.fit(x,y) # เทรน Model
model.score(x,y) # เมื่อเทรนเสร็จ ใช้คำสั่งนี้แสดงค่า r ของความสัมพันธ์
# Output ของค่า r คือ 0.9850564740092783
ต่อมา พอเราเทรนเสร็จแล้ว และสามารถเรียกค่า r ออกมาได้ เราจะมาลองทดสอบโมเดลนี้กัน
xtest=np.linspace(0,11) # สร้างชุดข้อมูลสำหรับทดสอบขึ้นมา โดยเป็นชุดข้อมูลตัวเลขระหว่าง 0-11
xtest=xfit.reshape(-1,1) # เปลี่ยน xtest เป็น array 2D
ytest=model.predict(xtest) # ทดสอบโมเดลด้วย xtest
plt.scatter(x,y) # นำค่า x, y ชุดข้อมูลตัวอย่างมา Scatter Plot
plt.plot(xtest,ytest) # นำค่า xtest, ytest มา Plot
- กราฟเส้นตรง Plot มาจาก xtest และ ytest
- Scatter Plot มาจาก x และ y ที่เป็นชุดข้อมูลตัวอย่าง
จะเห็นได้ว่า เส้นกราฟที่ได้จาก xtest และ ytest เป็นกราฟเส้นตรงที่สอดคล้องกับ Scatter Plot จากชุดข้อมูลตัวอย่างที่เรากำหนดไว้เลย รวมถึงค่า r ที่ได้ประมาณ 0.985 ซึ่งใกล้เคียง +1.0 มาก เพราะงั้นถือว่าโมเดลนี้พอใช้ได้เลยนะเนี่ย
เป็นไงกันบ้างกับเนื้อหาที่เราเอามาฝากกันในวันนี้ หวังว่าทุกคนจะได้เรียนรู้ Machine Learning กับ Linear Regression กันพอหอมปากหอมคอ แต่วันนี้คงต้องลาไปก่อน แล้วพบกันใหม่ สวัสดีจ้าา~