Satu angka tidak pernah cukup untuk mendeskripsikan satu objek nyata. Sebuah minuman di menu digambarkan sekaligus oleh harga, volume, dan kalori; seorang pelanggan oleh usia, kota, dan frekuensi belanja. Ketika setiap objek membawa beberapa angka dan objeknya berjumlah ribuan, kita butuh struktur yang rapi untuk menyusun semuanya. Struktur itu adalah vektor untuk satu objek dan matriks untuk seluruh kumpulan objek. Pada chapter ini kita membaca keduanya sebagai cara menyusun data — bukan sebagai hafalan rumus — karena hampir seluruh peralatan machine learning menerima data dalam bentuk matriks dan mengolahnya lewat operasi vektor.
Vektor: Deret Angka yang Bermakna #
Vektor adalah deretan angka yang berurutan dan setiap posisinya bermakna. Kita menuliskan vektor fitur satu gelas kopi susu sebagai [24, 300, 180] — posisi pertama selalu harga (ribu rupiah), posisi kedua selalu volume (ml), posisi ketiga selalu kalori. Tiga angka itu bukan sekadar list Python; ia satu titik data utuh. Jumlah elemen vektor disebut dimensi, jadi minuman kita hidup dalam ruang tiga dimensi — dan dataset nyata dengan puluhan fitur hidup dalam ruang berdimensi puluhan juga.
Dua ukuran klasik bekerja pada vektor. Panjang vektor (norma) mengukur “seberapa besar” keseluruhan vektornya, dihitung dengan rumus Pythagoras yang diperluas. Dot product menggabungkan dua vektor menjadi satu angka dengan menjumlahkan hasil kali elemen-elemen yang sejajar:
norma(v) = akar( v1^2 + v2^2 + ... + vn^2 )
dot(a, b) = a1*b1 + a2*b2 + ... + an*bnKita hitung keduanya dengan loop murni untuk dua minuman di menu Toko Kopi Kita:
# Vektor fitur satu minuman: [harga (ribu Rp), volume (ml), kalori]
kopi_susu = [24, 300, 180]
matcha = [28, 250, 210]
def norma(v):
"""Panjang vektor: akar dari jumlah kuadrat seluruh elemen."""
jumlah = 0
for nilai in v:
jumlah += nilai**2
return jumlah**0.5
def dot(a, b):
"""Dot product: jumlah hasil kali elemen yang sejajar."""
hasil = 0
for i in range(len(a)):
hasil += a[i] * b[i]
return hasil
print(f"Norma kopi_susu : {norma(kopi_susu):.2f}")
print(f"Norma matcha : {norma(matcha):.2f}")
print(f"Dot product keduanya : {dot(kopi_susu, matcha)}")Output yang Dihasilkan:
Norma kopi_susu : 350.68
Norma matcha : 327.69
Dot product keduanya : 113472Mari kita telaah hasilnya. Norma 350.68 dan 327.69 menyatakan bahwa kedua minuman berukuran mirip sebagai titik data. Dot product 113472 jauh lebih dipengaruhi volume (300 x 250 = 75000) daripada harga (24 x 28 = 672) — bukan karena volume lebih penting, tetapi karena satuannya membuat angkanya lebih besar. Perhatikan pula bahwa kedua fungsi di atas sama-sama berpola: jumlahkan sesuatu dari setiap elemen — persis pola sigma pada chapter sebelumnya.
NumPy menyediakan kedua ukuran ini sebagai operasi siap pakai, dan hasilnya identik dengan loop manual:
import numpy as np
kopi_susu = np.array([24, 300, 180])
matcha = np.array([28, 250, 210])
print(f"Norma kopi_susu : {np.linalg.norm(kopi_susu):.2f}")
print(f"Dot product : {kopi_susu @ matcha}")Output yang Dihasilkan:
Norma kopi_susu : 350.68
Dot product : 113472Fungsi np.linalg.norm() menghitung panjang vektor, sedangkan operator @ adalah notasi dot product di NumPy. Kedua hasilnya sama persis dengan versi loop — perbedaannya hanya kecepatan eksekusi pada data besar. Pembahasan lengkap operasi array ada di chapter Dasar NumPy
.
Matriks: Tabel Data Berbaris-Kolom #
Satu vektor menggambarkan satu objek. Matriks menyusun banyak objek sekaligus: ia adalah tabel angka dengan baris dan kolom. Dalam praktik data science, matriks dibaca dengan konvensi yang sangat konsisten — baris adalah observasi, kolom adalah fitur. Empat minuman kita menjadi matriks 4 baris kali 3 kolom, yang dalam Python murni ditulis sebagai list di dalam list:
# Baris = minuman (observasi), kolom = fitur [harga, volume, kalori]
nama_minuman = ["kopi susu", "matcha latte", "teh tawar", "cokelat panas"]
X = [
[24, 300, 180], # kopi susu
[28, 250, 210], # matcha latte
[20, 200, 60], # teh tawar
[30, 400, 350], # cokelat panas
]
for nama, baris in zip(nama_minuman, X):
print(f"{nama:14s} -> {baris}")Output yang Dihasilkan:
kopi susu -> [24, 300, 180]
matcha latte -> [28, 250, 210]
teh tawar -> [20, 200, 60]
cokelat panas -> [30, 400, 350]Tabel ini memperlihatkan hubungan vektor dan matriks dengan jelas: setiap baris matriks X adalah satu vektor fitur, dan matriks adalah tumpukan vektor-vektor tersebut dengan urutan kolom yang sama. Nama X pun bukan kebetulan — di literatur machine learning, matriks fitur hampir selalu dinamai X, dan huruf itu akan menyertai kita sampai bab-bab akhir Course ini.
Konvensi Bentuk Data untuk Machine Learning #
Sebuah matriks dikatakan berukuran m x n ketika memiliki m baris dan n kolom. NumPy menyimpan informasi ini pada atribut .shape, dan membacanya adalah kebiasaan pertama sebelum memproses data apa pun:
import numpy as np
X = [
[24, 300, 180],
[28, 250, 210],
[20, 200, 60],
[30, 400, 350],
]
arr = np.array(X)
print(f"Bentuk data (shape) : {arr.shape}")
print(f"Jumlah baris : {arr.shape[0]} -> observasi (minuman)")
print(f"Jumlah kolom : {arr.shape[1]} -> fitur (harga, volume, kalori)")
print(f"Baris pertama : {arr[0].tolist()} -> vektor fitur kopi susu")Output yang Dihasilkan:
Bentuk data (shape) : (4, 3)
Jumlah baris : 4 -> observasi (minuman)
Jumlah kolom : 3 -> fitur (harga, volume, kalori)
Baris pertama : [24, 300, 180] -> vektor fitur kopi susuAtribut .shape bernilai tuple (4, 3): empat observasi, tiga fitur. Indeksasi arr[0] mengambil baris pertama — vektor kopi susu — dan .tolist() mengubahnya kembali ke list biasa agar tampil rapi. Tiga konvensi berikut layak dihafal sejak sekarang:
| Istilah | Wujud | Ukuran | Contoh pada data kita |
|---|---|---|---|
| Vektor fitur | Satu baris | n angka | [24, 300, 180] untuk kopi susu |
Matriks fitur X | Tabel m x n | m baris, n kolom | 4 minuman x 3 fitur |
| Kolom fitur | Satu kolom | m angka | Harga keempat minuman |
Alat-alat seperti scikit-learn secara konsisten meminta data dalam konvensi baris-observasi ini; pesan galat X dan y tidak kompatibel hampir selalu berarti bentuk datanya tertukar. Membaca .shape sebelum memproses data adalah kebiasaan yang menghemat waktu berjam-jam.
Rangkuman #
- Vektor adalah deretan angka yang posisinya bermakna; satu vektor menggambarkan satu objek dengan beberapa fitur.
- Norma mengukur panjang vektor lewat jumlah kuadrat; dot product menggabungkan dua vektor menjadi satu angka.
- Fitur bersatuan berbeda mendistorsi norma dan dot product — di sanalah feature scaling berperan.
- Matriks adalah tabel data dengan konvensi baris = observasi, kolom = fitur.
- Atribut
.shapepada NumPy membaca ukuranm x n; periksa selalu sebelum memproses data.
Struktur datanya kini jelas, tetapi matriks belum bisa berbuat banyak tanpa operasi. Analis perlu menjumlahkan dua matriks, mengalikan matriks dengan skalar, dan — paling penting — mengalikan matriks dengan matriks, operasi yang menjadi jantung prediksi model linear. Kita bahas satu per satu pada chapter berikutnya, Operasi Matriks .