Linear Algebra ใครบอกว่าเรียนมาไม่ได้ใช้ ว่าด้วยเรื่องการแก้สมการด้วย Matrix ใน Machine Learning
สมมติว่าเรามีข้อมูลและปัญหา อยู่ชุดหนึ่งที่มีตั้งแต่ 2 ตัวแปรขึ้นไป ในการแก้ปัญหาเราจะนำข้อมูลมา plot ลงในกราฟตาราง แล้วหาความสัมพันธ์ เพื่อได้ค่าที่ต้องการทราบ แต่วิธีนี้ค่อนข้างจะลำบากและใช้เวลานาน นักคณิตศาสตร์จึงคิดค้นเทคนิคต่างๆ เพื่อให้ง่ายในการคำนวณ ลองมาดูโจทย์สักตัวอย่าง
ยกตัวอย่างเช่น
แม่ค้าขายส้มสองชนิด
ชนิดแรก ขายกิโลกรัมละ 25 บาท
ชนิดที่สอง ขายกิโลกรัมละ 30 บาท
ถ้าแม่ค้าขายส้มทั้งสองชนิดได้ 70 กิโลกรัม เป็นเงิน จำนวน 1780 บาท
จงหาว่าแม่ค้าขายส้มได้ชนิดละกี่กิโลกรัม
ตีความจากโจทย์ แม่ค้าขายส้มทั้ง สองชนิดได้ 70 กิโลกรัม คือ
X + Y = 70 ----------------- สมการที่ 1
จำนวนเงินที่ได้จากการขายส้มชนิดแรก ได้ 25 บาท คือ 25X
จำนวนเงินที่ได้จากการขายส้มชนิดที่สอง ได้ 30 บาท คือ 30Y
โดยทั้ง 2 ชนิด ขายแล้วรวมกันได้จำนวนเงินทั้งหมด 1780 บาท
25X + 30Y = 1780 ------------- สมการที่ 2
ในการแก้สมการในระบบเชิงเส้น ใช้วิธีกำจัดตัวแปร หรือทำให้เหลือตัวแปรเดียว
นำสมการที่ 1 มาเปลี่ยนรูป เช่น ต้องการกำจัด Y ในสมการที่ 2
Y = 70 – X
แล้วนำไปแทนในสมการที่ 2 จะได้
25X + 30(70 – X) = 1780
25X + 2100 – 30X = 1780
-5X = -320
X = 64
ดังนั้น Y = 70 – 64 ; Y = 6
X : 64 , Y : 6
จากโจทย์ถามว่า แม่ค้าขายส้มได้ชนิดละกี่กิโลกรัม สรุป คือ
ขายส้มชนิดแรกที่ 25 บาท ได้ 64 กิโลกรัม
ขายส้มชนิดที่สองที่ 30 บาท ได้ 6 กิโลกรัม
จากวิธีแก้ปัญหาที่ผ่านมา สมการไม่ได้มีเพียงแค่ตัวเดียว จะมีตั้งแต่ 2 ตัวขึ้นไป มีการเก็บข้อมูลที่มากขึ้น ดังนั้นจะต้องนำเทคนิคที่ช่วยแก้ปัญหาที่มีความซับซ้อนสูงมาช่วย นั้นคือ Matrix
ลองนำสมการที่ 1 และ สมการที่ 2 จากเมื่อสักครู่มาแปลงให้อยู่ในระบบ Matrix จะได้
X + Y = 70 ----------------- สมการที่ 1
25X + 30Y = 1780 ------------- สมการที่ 2
ในรูปแบบของสมการ Metrix จะอยู่ในรูปที่ของ AX = D โดยที่
A = [ a b]. X = [x]. D = [d1]
[ c d]. [y]. [d2]
| 1. 1 | |x| = | 70 |
| 25 30 | |y| = | 1780 |
ดังนั้น
A = [1 1 ]
[25 30]
D = [ 70 ]
[ 1780 ]
ในการหาค่า X จาก AX = D จะใช้วิธี คูณด้วย A ยกกำลัง -1 ทั้ง 2ข้าง จะได้
X = A^-1 x D
โดย A ยกกำลัง -1 คือ (1 / Det A) x (adj A)
Adj คือ ค่า ผกผัน ของ A โดย กรณีเป็น 2 มิติ
ถ้า A = [a b] หรือ [1 1]
[c d]. [25 30]
ดังนั้น adj A = [d -b] หรือ [ 30 -1]
[-c a] [ -25 1]
และ
Det A หรือ Determinant คือ ค่าของตัวเลขที่สอดคล้องกับเมทริกซ์จัตุรัส โดยมีสูตรสมการคือ
Det A = ad – cb
กลับมาที่โจทย์ของเรา เราจะได้
Det A = (1*30) – (25*1) เท่ากับ 5
Det A = 5
จากนิยามสมการทั้งหมด คือ
X = (1/Det A) [d -b] [ d1 ]
[-c. a] [ d2]
ดังนั้น
X = (1/5) [ 30 -1] [ 70 ]
[ -25 1] [ 1780]
คำนวณออกมา โดยมีการคูณ Metrix
X = [ 6 -1/5 ] [ 70 ]
[ -5 1/5 ] [ 1780 ]
= [ (6 x 70) + (-1780/5) ]
[ (-70 x 5) + ( 1780/5) ]
= [ 420 - 356 ]
[ -350 + 356 ]
[ x ] = [ 64 ]
[ y ] [ 6 ]
จะเห็นว่าทั้ง 2 วิธี มีค่า X = 64. และ Y = 6 เท่ากัน
ถ้าเป็นโจทย์แบบนี้ ผู้เขียนก็เลือกวิธีแรก เพราะว่าง่ายกว่าในการคำนวณ แต่เมื่อมีความซับซ้อนของโจทย์ที่มากขึ้น จะต้องเลือกวิธี แบบ Matrix อย่างเช่น สมการ 3 ตัวแปรขึ้นไป
มาดูทฤษฎีเวกเตอร์ ที่เขียนด้วยไพธอนกันเถอะ
จากบทความที่แล้ว ได้พูดถึงในส่วนของ Vector ซึ่ง Vector เองนั้นก็เป็น Array เหมือนกัน แต่เป็น Array 1 มิติ ในส่วนของ Metrix เป็น Array 2 มิติขึ้นไป
เหตุผลหลายๆอย่างที่นำ Metric มาใช้งาน – Page 92 Data Science From Scratch
1. เราสามารถจะนำ Vector หลายๆตัว มาอยู่ในรูปของ Metrix ตัวอย่างเช่น เก็บข้อมูลความสูง น้ำหนักและอายุ ได้เช่น
data = [
[70, 170, 40],
[65, 120, 26],
[77, 250, 19],
# ....
]
2. เราสามารถ ใช้ n x k มิติของ Metric ได้แทนค่าใน Linear function ที่มีความสัมพันธ์ ระหว่าง n – dimension และ k- dimension
3. เราสามารถ กำหนดค่าตัวแทนของการเชื่อมโยงความสัมพันธ์ระหว่าง 2 ตัวแปร ได้ยกตัวอย่าง ในบทความ “หาความสัมพันธ์ ของ user กันเถอะ” โดยเราแทน ความสัมพันธ์ ว่าเป็นเพื่อนกัน เท่ากับ “1” ไม่ได้เป็นเพื่อนกัน เท่ากับ “0”
# user0 1 2 3 4 5 6 7 8 9
#
[1, 0, 1, 1, 0, 0, 0, 0, 0, 0], # user 1
[1, 1, 0, 1, 0, 0, 0, 0, 0, 0], # user 2
[0, 1, 1, 0, 1, 0, 0, 0, 0, 0], # user 3
[0, 0, 0, 1, 0, 1, 0, 0, 0, 0], # user 4
[0, 0, 0, 0, 1, 0, 1, 1, 0, 0], # user 5
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0], # user 6
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0], # user 7
[0, 0, 0, 0, 0, 0, 1, 1, 0, 1], # user 8
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]] # user 9
เมื่อเป็น เพื่อนก็ใช้ ฟังก์ชันที่เกี่ยวข้อง update ข้อมูลลงไป
friendships[0][2] == 1 # True, 0 and 2 are friends
friendships[0][8] == 1 # False, 0 and 8 are not friends
ยกตัวอย่างอีกสักตัวอย่าง ที่ใช้ Metrix ในงาน Machine Learning โดยเฉพาะ
จาก Machine Learning Cook Book Chapter 2 Page 38 – Loading Data Set
Digits datasets เป็น datasets รูปภาพภาพลายมือเขียนจำนวน 1,797 ภาพ เอาไว้ ซึ่งเหมาะสำหรับฝึกฝนงานด้าน Classification ซึ่ง เป็น Datasets ที่อาจจะเรียกอีกอย่างว่า Toy
นอกจากนี้ยังมี Dataset อื่นๆ อย่างเช่น boston และ iris เอาไว้ให้ฝึกฝนเช่นกัน
มาดูตัวอย่างของ dataset ที่ชื่อ digits กันดีกว่า
ลองเปิด jupyter notebook แล้ว run คำสั่งตามไปได้เลย
# เรียก library scikit learn function datasets
from sklearn import datasets
# load data
digits = datasets.load_digits()
# set up ตัวแปร array
features = digits.data
# แสดงผล
features[0]
array([ 0., 0., 5., 13., 9., 1., 0., 0., 0., 0., 13., 15., 10.,
15., 5., 0., 0., 3., 15., 2., 0., 11., 8., 0., 0., 4.,
12., 0., 0., 8., 8., 0., 0., 5., 8., 0., 0., 9., 8.,
0., 0., 4., 11., 0., 1., 12., 7., 0., 0., 2., 14., 5.,
10., 12., 0., 0., 0., 0., 6., 13., 10., 0., 0., 0.])
จะเห็นว่าตัวอย่างข้อมูล จะอยู่ในรูปของ Array Metrix
หรือจะลองสร้าง แบบจำลองขึ้นด้วยฟังก์ชันสร้าง dataset classification
# Load library
from sklearn.datasets import make_classification
# Generate features matrix and target vector
features, target = make_classification(n_samples = 100, n_features = 3, n_informative = 3,n_redundant = 0,n_classes = 2,weights = [.25, .75],random_state = 1)
# View feature matrix and target vector
print('Feature Matrix\n', features[:3])
print('Target Vector\n', target[:3])
ผลลัพท์ที่ได้
Feature Matrix
[[ 1.06354768 -1.42632219 1.02163151]
[ 0.23156977 1.49535261 0.33251578]
[ 0.15972951 0.83533515 -0.40869554]]
Target Vector
[1 0 0]
# View scatterplot
plt.scatter(features[:,0], features[:,1], c=target)
plt.show()
ลองใช้ scatter plot เพื่อพล็อตกราฟออกมาดูกลุ่มของข้อมูล
จะเห็นว่า Data ที่ใช้ หรือ ต้องสร้างขึ้นจะอยู่ในรูปของ Matrix
ทั้งหมดนี้ผู้เขียนต้องการแสดงถึงเหตุผล ความจำเป็นในการใช้ Metrix และวิธีการแก้ปัญหาด้วย Metrix อย่างง่ายๆ ในการนำไปประยุกต์ใช้งาน เพื่อให้เห็นภาพว่า การใช้งานในด้านของ Machine เป็นอย่างไรเพื่อนำไปต่อยอดในเรื่อง Machine Learning หรือ Deep Learning ในบทต่อๆไป
ถ้าบทความนี้มีประโยชน์ ก็ฝากกด Ads เพื่อเป็นกำลังใจให้ผู้เขียนด้วยนะครับ
Ref:
introduction-matrices-machine-learning
matrix-operations-for-machine-learning
solving_system_of_linear_equations_using_matrix