📋 Ma trận và cách chuyển bảng dữ liệu thành ma trận

By Better Wise

Nhắc lại nhanh từ Module 1: vector là một danh sách số có thứ tự, ví dụ $\vec{v} = (8, 7, 9)$ là điểm của một bạn ở ba môn. Giờ tôi vẽ thêm hai bạn nữa lên bảng và xếp ba vector thành ba dòng, thế là bạn vừa có một ma trận. Gần như mọi bảng dữ liệu bạn từng thấy (bảng điểm, bảng rating phim, lịch sử mua hàng) đều đang giấu một ma trận bên trong như vậy.

Sau bài này, bạn sẽ:

  • Đọc và viết đúng kích thước ma trận dạng m × n
  • Phân biệt hàng (một mẫu dữ liệu) và cột (một thuộc tính)
  • Chuyển một bảng dữ liệu thực tế thành ma trận, biết bỏ hoặc mã hóa cột chữ
  • Nhận ra vector hàng, vector cột, ma trận vuông khi gặp chúng

Ma trận là gì: một lưới số có kích thước hàng × cột

Tôi vẽ lên bảng bảng điểm của ba bạn ở ba môn:

Toán Lý Hóa
An 8 7 9
Bình 6 9 7
Chi 9 8 8

Bỏ phần chữ đi, chỉ giữ lại lưới số, ta được ma trận $A$:

$$ A = \begin{bmatrix} 8 & 7 & 9 \ 6 & 9 & 7 \ 9 & 8 & 8 \end{bmatrix} $$

Ma trận này có 3 hàng và 3 cột, nên kích thước là 3 × 3. Quy ước đọc luôn là hàng trước, cột sau, giống như đọc tọa độ (x, y) chứ không phải (y, x).

Một ma trận kích thước m × n có _____ hàng và _____ cột. Phần tử nằm ở hàng thứ i, cột thứ j được ký hiệu là $a_{ij}$, tức là nó nằm ở hàng _____ và cột _____.

Với ma trận $A$ ở trên: $a_{23} = 7$ (hàng 2 là Bình, cột 3 là Hóa), còn $a_{31} = 9$ (hàng 3 là Chi, cột 1 là Toán).

flowchart TD
    T["📋<br/>Bảng dữ liệu"] --> R["➡️<br/>Mỗi dòng thành một hàng"]
    T --> C["⬇️<br/>Mỗi cột số thành một cột"]
    R --> M["🔢<br/>Ma trận m × n"]
    C --> M

Bài tập nhanh 1. Một bảng điểm có 5 sinh viên và 4 môn học (Toán, Lý, Hóa, Sinh). Bỏ cột tên sinh viên đi thì ma trận thu được có kích thước bao nhiêu? Phần tử $a_{42}$ là gì?

Xem đáp án

Kích thước 5 × 4 (5 hàng, 4 cột). $a_{42}$ nằm ở hàng 4 (sinh viên thứ tư) và cột 2 (môn Lý), tức là điểm môn Lý của sinh viên thứ tư. Lưu ý: hàng 4 không phải "sinh viên có mã 4" mà là sinh viên đứng thứ tư trong bảng.

Hàng là mẫu, cột là thuộc tính

Đây là quy ước quan trọng nhất của bài này: mỗi hàng là một mẫu, mỗi cột là một thuộc tính. Ma trận rating phim có 4 người dùng và 5 bộ phim thì là ma trận 4 × 5: mỗi hàng là một người, mỗi cột là một bộ phim, và ô $(i, j)$ là điểm người $i$ chấm cho phim $j$.

Ví dụ một bảng sản phẩm:

Sản phẩm Giá (nghìn đồng) Lượt xem Đánh giá
Áo thun 150 1200 4.5
Quần jean 450 800 4.2
Giày 700 300 4.8

Cột "Sản phẩm" là chữ nên bị bỏ ra khỏi ma trận. Còn lại 3 cột số, mỗi sản phẩm một hàng:

$$ M = \begin{bmatrix} 150 & 1200 & 4.5 \ 450 & 800 & 4.2 \ 700 & 300 & 4.8 \end{bmatrix} $$

Kích thước 3 × 3, và $m_{31} = 700$ (giá của chiếc giày). Nếu sau này bạn chuyển vị ma trận, vai trò hàng và cột sẽ đổi chỗ cho nhau, nhưng đó là nội dung của bài thứ ba trong module này.

Bài tập nhanh 2. Một bảng ghi rating của 4 người dùng cho 5 bộ phim, mỗi ô là một số từ 1 đến 5. Ma trận tương ứng có kích thước bao nhiêu? Hàng thứ 3 của ma trận chứa thông tin gì?

Xem đáp án

Kích thước 4 × 5. Hàng thứ 3 chứa 5 con số rating mà người dùng thứ ba đã chấm cho 5 bộ phim, theo đúng thứ tự cột. Nếu đọc nhầm thành 5 × 4 thì bạn đã đảo vai trò người dùng và phim.

Bốn bước chuyển bảng dữ liệu thành ma trận

  1. Chọn đối tượng: mỗi dòng của bảng (một người, một sản phẩm, một tài liệu) sẽ thành một hàng của ma trận.
  2. Chọn thuộc tính số: mỗi cột chứa số sẽ thành một cột của ma trận, giữ nguyên thứ tự cột trong bảng.
  3. Xử lý cột chữ: bỏ hẳn cột tên/nhãn, hoặc mã hóa nhãn thành số (ví dụ 0 và 1) nếu cần giữ thông tin đó.
  4. Ghi kích thước và đếm lại: số hàng bằng số dòng dữ liệu, số cột bằng số thuộc tính số.

Làm trọn vẹn với bảng sản phẩm ở trên: 3 dòng dữ liệu nên 3 hàng, 3 cột số nên 3 cột. Bỏ cột "Sản phẩm". Kết quả là ma trận 3 × 3 như đã viết.

Important: Mọi phần tử trong ma trận dữ liệu phải là số. Nếu một cột là chữ ("Hà Nội", "Đà Nẵng") thì bạn phải bỏ hoặc mã hóa trước khi đưa vào ma trận, vì các phép cộng, nhân và tính khoảng cách ở các bài sau chỉ có nghĩa với số.

Bài tập nhanh 3. Chuyển bảng sau thành ma trận và cho biết kích thước:

Tài liệu "vector" "ma trận"
A 5 1
B 2 6
C 0 4

Xem đáp án

Cột "Tài liệu" là nhãn chữ nên bỏ. Còn lại ma trận 3 × 2:

$$ \begin{bmatrix} 5 & 1 \ 2 & 6 \ 0 & 4 \end{bmatrix} $$

Hàng 1 là tài liệu A (5 lần "vector", 1 lần "ma trận"), hàng 3 là tài liệu C (0 lần "vector", 4 lần "ma trận"). Ma trận này rất giống bảng tần số từ khóa mà bài về cosine similarity ở Module 3 sẽ dùng lại.

Bốn dạng ma trận bạn sẽ gặp ngay

Dạng Kích thước Ví dụ
Vector hàng 1 × n điểm của một bạn ở ba môn: 8 7 9
Vector cột m × 1 một cột dọc gồm 8, 7, 9
Ma trận vuông n × n ma trận điểm 3 bạn × 3 môn
Ma trận không m × n mọi phần tử đều bằng 0

Điểm hay bị nhầm: một vector hàng 1 × n và một vector cột n × 1 chứa cùng các con số nhưng không phải cùng một ma trận, vì kích thước khác nhau. Khi cần, ta dùng chuyển vị để đổi dạng này sang dạng kia.

Vector hàng có kích thước _____, còn vector cột có kích thước _____. Ma trận vuông là ma trận có số hàng _____ số cột.

Ba cái bẫy khi đọc kích thước ma trận

  • Đọc ngược hàng và cột. Ma trận 5 × 3 là 5 hàng, 3 cột. Cách kiểm tra: hàng là thứ chạy xuống, cột là thứ chạy ngang.
  • Đếm luôn dòng tiêu đề. Dòng ghi tên cột không phải một hàng dữ liệu, đừng cộng nó vào m.
  • Để sót cột chữ. Ma trận có một ô là chữ thì không cộng trừ nhân chia được nữa. Trước khi viết ma trận, hãy quét từng cột và tự hỏi: cột này toàn số chưa?
  • Mẹo kiểm tra cuối cùng: số phần tử phải bằng m × n. Ma trận 3 × 4 mà bạn đếm được 11 số thì chắc chắn đã sai ở đâu đó.

Chốt lại và sang bài nhân ma trận

  • Ma trận là một lưới số, kích thước đọc là hàng × cột.
  • Phần tử $a_{ij}$ nằm ở hàng i, cột j.
  • Khi chuyển bảng dữ liệu: mỗi dòng thành một hàng (một mẫu), mỗi cột số thành một cột (một thuộc tính), cột chữ thì bỏ hoặc mã hóa.
  • Vector hàng 1 × n, vector cột m × 1, ma trận vuông n × n, ma trận không toàn số 0.

Bài tiếp theo, "Nhân ma trận từng bước", sẽ lấy đúng những ma trận bạn vừa dựng và cho chúng tác động lên vector: xoay, co, giãn không gian, từng bước một.

Front: Ma trận kích thước m × n có bao nhiêu hàng và bao nhiêu cột? Back: m hàng và n cột, đọc hàng trước rồi mới đến cột.

Front: Phần tử a_ij nằm ở vị trí nào? Back: Hàng thứ i, cột thứ j.

Front: Ma trận 3 × 5 có bao nhiêu phần tử? Back: 15 phần tử, vì 3 × 5 = 15.

Front: Vector hàng là ma trận có kích thước bao nhiêu? Back: 1 × n, tức một hàng và n cột.

Front: Vector cột là ma trận có kích thước bao nhiêu? Back: m × 1, tức m hàng và một cột.

Front: Ma trận vuông là gì? Back: Ma trận có số hàng bằng số cột, tức kích thước n × n.

Front: Ma trận không là gì? Back: Ma trận mà mọi phần tử đều bằng 0.

Front: Khi chuyển một bảng dữ liệu thành ma trận, mỗi dòng dữ liệu trở thành gì? Back: Một hàng của ma trận, đại diện cho một mẫu quan sát.

Front: Mỗi cột số trong bảng trở thành gì? Back: Một cột của ma trận, đại diện cho một thuộc tính (feature).

Front: Dòng tiêu đề của bảng có được tính là một hàng dữ liệu không? Back: Không, tiêu đề chỉ là tên cột, không cộng vào số hàng m.

Front: Nếu một cột trong bảng chứa chữ, ví dụ tên thành phố, thì xử lý thế nào? Back: Bỏ cột đó ra hoặc mã hóa thành số (ví dụ one-hot) trước khi đưa vào ma trận.

Front: Cách kiểm tra nhanh một ma trận m × n có đủ phần tử chưa? Back: Đếm số phần tử, phải đúng bằng m × n.

Front: Ma trận 5 × 3 đọc như thế nào? Back: 5 hàng và 3 cột.

Front: Bảng có 4 dòng dữ liệu và 3 cột số thì thành ma trận kích thước nào? Back: 4 × 3, tức 4 hàng và 3 cột.

Trước khi gấp máy lại, thử tự nhắc bằng vài câu điền khuyết:

Ma trận kích thước m × n có _____ hàng và _____ cột. Phần tử a_ij nằm ở hàng thứ _____ và cột thứ _____. Một bảng có 6 dòng dữ liệu và 4 cột số sẽ thành ma trận kích thước _____.