Linear Algebra ใครบอกว่าเรียนมาไม่ได้ใช้ ว่าด้วยเรื่องการแก้สมการด้วย Matrix ใน Machine Learning

Image placeholder
แวะมาทักทายกันได้


สมมติว่าเรามีข้อมูลและปัญหา อยู่ชุดหนึ่งที่มีตั้งแต่ 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

#friendships =         [[0, 1, 1, 0, 0, 0, 0, 0, 0, 0], # user 0

                                   [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  กันดีกว่า


digits datasets

 

ลองเปิด 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:


machinelearningmastery


introduction-matrices-machine-learning


matrix-operations-for-machine-learning


solving_system_of_linear_equations_using_matrix


vdo-inequation-one-variable/


determinant_and_property

แวะมาทักทายกันได้
donate