Anexo · Álgebra lineal para Machine Learning (para novatos)¶
Anexo de apoyo. No es una unidad del curso ni sustituye a la lección 1.4 de NumPy (que enseña el manejo de arrays). Esta página explica qué significan los vectores, las matrices y sus operaciones, y por qué aparecen en cada modelo. Parte de cero: no hace falta haber dado álgebra lineal. Solo se asume saber crear arrays básicos en NumPy. Los ejemplos se ejecutan con
uv run python(NumPy es dependencia del proyecto).
Contexto y motivación¶
Cuando un modelo te parezca "magia" o veas X @ w y te entre vértigo, vuelve
aquí. La idea central son tres frases:
- Una tabla de datos ES una matriz.
- Una fila de esa tabla ES un vector (una observación, sus características).
- Un modelo lineal ES una multiplicación
X @ w.
Entender esas tres frases te quita el "velo" de la mayor parte del Machine Learning: la regresión lineal, la regresión logística y, en esencia, una neurona artificial, funcionan sumando características ponderadas. El álgebra lineal es el lenguaje de esa suma.
Objetivos observables¶
Al terminar podrás...
- Explicar qué es un vector y qué es su dimensión.
- Representar una tabla como matriz
Xy dar su forma(m, n). - Sumar vectores, multiplicarlos por un escalar y calcular el producto punto, e interpretar cada resultado.
- Calcular
X @ wy justificar por qué el resultado es un vector dempredicciones. - Explicar qué son la transpuesta, la identidad y la inversa, y para qué se usan.
- Calcular la norma de un vector, normalizarlo y explicar por qué importa en ML.
- Comparar dos vectores con la similitud coseno.
- Ajustar unos pesos con la ecuación normal y explicar cuándo falla.
- Interpretar
XᵀXcomo la relación entre características y detectar colinealidad. - Explicar qué son los autovalores/autovectores y su papel en PCA.
- Detectar el error de "dimensiones que no coinciden" y corregirlo.
- Interpretar la predicción de un modelo lineal a partir de los pesos
w.
Cómo comprobarlo: al final hay una práctica de transferencia; si la resuelves, has conseguido todos los objetivos.
Vocabulario mínimo¶
| Término | Qué significa | En ML |
|---|---|---|
| Escalar | Un solo número | Un peso, un umbral, una métrica |
| Vector | Lista ordenada de números | Los valores de una observación |
| Dimensión | Cuántos números tiene un vector | Número de características |
| Matriz | Tabla de números, con filas y columnas | La tabla X de datos |
| Forma (shape) | (nº filas, nº columnas) |
(m, n): m observaciones, n características |
| Transpuesta | Cambiar filas por columnas (X.T) |
Aparece en la ecuación normal |
| Producto punto | Suma de productos; da un escalar | Predicción de UNA observación |
| Norma | Longitud o tamaño de un vector (‖x‖) |
Distancia entre vectores; el RMSE resume el tamaño de varios errores |
| Vector unitario | Longitud 1, misma dirección | Normalizar características |
| Similitud coseno | Producto punto entre normas | Comparar textos/embeddings (RAG) |
| Combinación lineal | a₁·v₁ + a₂·v₂ + … |
Suma ponderada del modelo lineal |
| Matriz de Gram | XᵀX, simétrica |
Relación entre características |
| Rango | Nº de filas/columnas independientes | Dimensión "real", colinealidad |
| Autovalor / autovector | A·v = λ·v |
PCA, direcciones de mayor varianza |
| Producto matriz-vector | Cada fila "por" el vector; da un vector | Predicción de TODAS a la vez |
| Identidad | Matriz que no cambia nada (I) |
Elemento neutro |
| Inversa | La que "deshace" la matriz (A⁻¹) |
Resolver sistemas; ecuación normal |
Prerrequisitos¶
- Saber sumar y multiplicar números.
- Crear arrays en NumPy (
np.array,.shape) — lección 1.4. - No hace falta haber dado álgebra lineal.
- Trae la intuición de una tabla: filas = casos u observaciones, columnas = características.
Orden de los ejemplos
Los ejemplos se pueden ejecutar de arriba abajo: algunos reutilizan X,
w o notas preparados en un apartado anterior. Si copias un bloque de
forma aislada, incluye también sus datos de entrada.
1. Del número al vector¶
En ML, un dato aislado es un escalar: un solo número. Pero una observación normalmente tiene varias características a la vez. Para guardarlas en orden usamos un vector: una lista de números con un orden fijo.
Ejemplo. Una vivienda descrita por tres números: superficie, habitaciones y antigüedad.
import numpy as np
vivienda = np.array([80, 3, 10]) # m², habitaciones, años
print(vivienda.shape) # cuántos elementos tiene
Salida esperada:
(3,) es la forma del vector: tiene dimensión 3. El orden importa: la
componente 0 es la superficie, la 1 son las habitaciones y la 2 la antigüedad.
Si cambias el orden, cambias el dato.
¿Y por qué decimos "vector"? Porque un par de números se puede ver como un punto (o una flecha desde el origen) en el plano, y una terna como un punto en el espacio. Pero en ML casi nunca hay 2 o 3 características: hay 10, 100 o 1000. Entonces no intentes "ver" el espacio; quédate con la regla práctica: un vector es una lista de números en un orden fijo.
2. Sumar y escalar: la combinación lineal¶
Dos operaciones con vectores:
- Sumar (o restar): se hace componente a componente.
- Multiplicar por un escalar: se multiplica cada componente por ese número (alarga, encoge o invierte si es negativo).
import numpy as np
v1 = np.array([80, 3, 10]) # vivienda A
v2 = np.array([60, 2, 5]) # vivienda B
# Combinación lineal: 70% de A y 30% de B
combinacion = 0.7 * v1 + 0.3 * v2
print(combinacion)
Salida esperada:
La combinación lineal es la operación estrella del ML. Un modelo lineal
calcula una suma ponderada de las características (una combinación lineal) y
una neurona artificial hace exactamente eso y luego aplica una función de
activación. Por eso conviene familiarizarse con la expresión
a₁·v₁ + a₂·v₂ + … + aₖ·vₖ.
3. El producto punto: la predicción de un caso¶
El producto punto (o producto escalar) de dos vectores es la suma de los productos de sus componentes, y da un único número:
Es la predicción de un modelo lineal para una observación. Si x son las
características y w los pesos aprendidos, entonces:
import numpy as np
x = np.array([80, 3, 10]) # una vivienda
w = np.array([0.1, 50.0, 1.5]) # pesos del modelo
sesgo = 5.0
prediccion = np.dot(w, x) + sesgo
print(prediccion)
Salida esperada:
Compruébalo a mano: 0.1·80 + 50·3 + 1.5·10 = 8 + 150 + 15 = 173, y 173 + 5 = 178.
Interpretación geométrica (breve). El producto punto mide cuánto va un vector en la dirección del otro:
- Si los vectores apuntan igual → el resultado es grande y positivo.
- Si son perpendiculares → el resultado es 0.
- Si apuntan en sentido contrario → negativo.
Eso lo convierte en una medida de alineación o similitud: es la base de la similitud del coseno (que normaliza por las longitudes) y aparece en la correlación. En ML lo verás en recomendación, recuperación de texto y en muchas métricas.
No confundas @ con *
np.dot(w, x) y w @ x son lo mismo. En NumPy, @ es el operador de
producto matricial/vectorial (álgebra lineal), mientras que * multiplica
elemento a elemento. Mezclarlos produce resultados silenciosamente
incorrectos o un error de formas.
4. La norma: tamaño, distancia y normalización¶
El producto punto medía en qué dirección va un vector respecto a otro. Ahora queremos medir cuánto mide un vector. Su norma (norma euclídea, o norma 2) es la raíz cuadrada de la suma de sus componentes al cuadrado:
Es la longitud de la flecha. En dos dimensiones, la longitud de (3, 4) es
√(9 + 16) = 5.
import numpy as np
x = np.array([3.0, 4.0])
print(np.linalg.norm(x)) # longitud
print(x / np.linalg.norm(x)) # vector unitario (longitud 1)
Salida esperada:
- Distancia entre dos vectores: la norma de su diferencia,
‖a - b‖. - Vector unitario: dividir entre la norma; mantiene la dirección y pasa a medir 1. Normalizar una característica es un paso parecido (dividir entre su desviación típica) para que ninguna domine a las demás.
¿Por qué importa en ML? Porque gran parte de las métricas son normas:
- El RMSE es la norma del vector de errores dividida por
√m:‖y - ŷ‖ / √m. - Normalizar características evita que una variable con valores enormes (los m²) domine a otra con valores pequeños (los años) cuando las sumamos.
- La norma aparece en la regularización: penalizamos
‖w‖(Ridge/Lasso).
Nota. Hablamos de la norma más habitual, la "norma 2". Hay otras (norma 1, norma ∞), pero la que usarás casi siempre en ML es esta.
5. Similitud coseno: ¿qué tan parecidos son dos vectores?¶
El producto punto medía alineación, pero le afectaba el tamaño de los vectores. Para comparar solo la dirección (y no la magnitud), dividimos entre las normas:
El resultado va de -1 a 1: 1 si apuntan igual, 0 si son perpendiculares y -1 si apuntan en sentido contrario.
import numpy as np
a = np.array([1.0, 2.0, 3.0])
b = np.array([4.0, 5.0, 6.0])
cos = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(np.round(cos, 4))
Salida esperada:
Como los dos vectores apuntan "bastante en la misma dirección", la similitud es alta (cerca de 1). Esto es exactamente lo que se usa para comparar embeddings: en recomendadores, búsqueda semántica y RAG se representan textos como vectores y se ordenan por similitud coseno.
Conexión con el curso. En Python puedes usar
from sklearn.metrics.pairwise import cosine_similarity, que hace este cálculo para todas las parejas de una vez.
6. La tabla de datos es una matriz¶
Apila varias filas (observaciones) y obtienes una matriz: una tabla de
números con filas y columnas. En ML la llamamos X y su forma es
(m, n), donde:
m= número de observaciones (filas);n= número de características (columnas).
import numpy as np
X = np.array([
[80, 3, 10], # vivienda 1
[60, 2, 5], # vivienda 2
[120, 4, 2], # vivienda 3
[75, 3, 20], # vivienda 4
[90, 3, 8], # vivienda 5
])
print(X.shape)
Salida esperada:
Léelo como "5 observaciones, 3 características". X[i, j] es el valor de la
característica j de la observación i. La columna j son todos los
valores de una característica; la fila i es un vector (una observación).
Notación del curso. Cuando aparezca
X(mayúscula) yy(minúscula),Xes la matriz de características yyes el objetivo (lo que queremos predecir).ysuele ser un vector (una columna), no una matriz.
7. Producto matriz-vector: predecir todas las observaciones¶
La regla del producto matriz-vector:
Cada elemento del resultado es el producto punto de una fila de X con
el vector w. Es decir, X @ w calcula la predicción de cada observación,
todas a la vez. Por eso aparece constantemente en el código de ML.
import numpy as np
X = np.array([
[80, 3, 10],
[60, 2, 5],
[120, 4, 2],
[75, 3, 20],
[90, 3, 8],
])
w = np.array([0.1, 50.0, 1.5])
sesgo = 5.0
y_hat = X @ w + sesgo
print(y_hat)
print(y_hat.shape)
Salida esperada:
Mira lo que ha pasado: como X tiene 5 filas y w tiene 3 componentes, el
resultado es un vector de 5 predicciones, una por vivienda. El + sesgo suma
el mismo número a todas (es un "empujón" constante, el término independiente del
modelo).
Regla práctica para las dimensiones: las columnas de la matriz (el número
n) deben coincidir con la longitud del vector w (n). Si no coinciden,
NumPy lanza un error:
Salida esperada (error):
Consejo. Siempre que te salga ese error, escribe antes
print(X.shape)yprint(w.shape). El problema, casi siempre, es que las dimensiones internas no coinciden.
8. Matriz por matriz, identidad e inversa¶
8.1 Producto matriz-matriz¶
Cada celda (i, j) es el producto punto de la fila i de la primera por la
columna j de la segunda. Las dimensiones internas (n) deben coincidir; el
resultado tiene las dimensiones externas (m y p). El orden importa:
A @ B no es lo mismo que B @ A.
8.2 De una columna de pesos a una capa de neuronas¶
Hasta ahora multiplicábamos X (m observaciones × n características) por un
vector w (n pesos) y obteníamos m predicciones. Pero un modelo puede tener
varias salidas: por ejemplo, una red de 2 neuronas usa una matriz de pesos
W de forma (n, 2). El resultado X @ W es una matriz (m, 2): una columna
por cada neurona.
import numpy as np
X = np.array([[1, 0],
[0, 1],
[1, 1]], dtype=float)
W = np.array([[2., -1.],
[0.5, 3.]])
b = np.array([0., 1.]) # un sesgo por cada salida
Z = X @ W + b
print(Z.shape)
print(Z)
Salida esperada:
Z tiene una fila por observación y una columna por neurona. Cada elemento es un
producto punto de una fila de X con una columna de W, más su sesgo. Si luego
aplicas una función de activación (por ejemplo, la sigmoide en regresión
logística) a Z, obtienes la salida de la capa. Esta es la operación central de
una red neuronal: Z = X @ W + b.
8.3 Identidad¶
La matriz identidad I es la que no cambia nada: I @ A = A. Es el "1" de
las matrices.
import numpy as np
A = np.array([[2., 1.],
[1., 3.]])
I = np.eye(2)
print(I)
print(I @ A) # devuelve A
Salida esperada:
8.4 Inversa y resolver sistemas¶
Si existe una matriz A⁻¹ tal que A @ A⁻¹ = I, se llama inversa. Sirve
para resolver sistemas de ecuaciones: la ecuación A·x = b se despeja como
x = A⁻¹·b. En NumPy se usa np.linalg.solve, más estable y rápido que calcular
la inversa a mano.
import numpy as np
A = np.array([[2., 1.],
[1., 3.]])
b = np.array([9., 8.])
x = np.linalg.solve(A, b)
print(x)
print(A @ x) # comprobación: debe dar b
Salida esperada:
¿Y esto para qué en ML? La ecuación A·x = b con su solución x = A⁻¹·b es
exactamente la lógica de la ecuación normal de la regresión lineal
((XᵀX)w = Xᵀy), que desarrollamos a fondo en la sección 9. Por ahora quédate con
la idea: "despejar" los pesos con álgebra lineal, usando una transposición, un
producto de matrices y una inversa.
9. La ecuación normal: ajustar un modelo con álgebra lineal¶
La regresión lineal busca los pesos w que hacen que X @ w se parezca lo más
posible a y. El criterio habitual es minimizar la suma de los errores al
cuadrado, es decir, minimizar ‖y - X·w‖². Resulta que eso se resuelve
"despejando" con álgebra lineal, y la solución se llama ecuación normal:
Para que la fórmula funcione, X debe incluir una columna de 1s (que hace de
intercept o sesgo). Veámoslo con un caso exacto (sin ruido) para que el resultado
salga limpio.
import numpy as np
x = np.array([1., 2., 3., 4.]) # una característica
y = np.array([3., 5., 7., 9.]) # objetivo (relación y = 2x + 1)
X = np.column_stack([np.ones(4), x]) # añade la columna de 1s (intercept)
print(X.shape)
# Ecuación normal
w = np.linalg.inv(X.T @ X) @ X.T @ y
print(w)
# El método "robusto" de NumPy (el que usarías en la práctica)
print(np.linalg.lstsq(X, y, rcond=None)[0])
Salida esperada:
w = [1, 2] significa: intercept 1 y pendiente 2 (la recta y = 2x + 1). Ambos
métodos coinciden. np.linalg.lstsq es el que usarías en la práctica, porque es
más estable numéricamente.
¿Y si XᵀX no tiene inversa?
Ocurre cuando hay colinealidad (características redundantes) o menos
observaciones que características. Entonces la inversa no existe (o es
inestable) y np.linalg.inv falla. La solución típica es la regularización
Ridge: se suma λI a XᵀX, lo que garantiza que sea invertible y, de paso,
encoge los pesos. Por eso siempre oirás hablar de regularización en regresión.
10. ¿Qué guarda XᵀX? Matriz de Gram, covarianza y correlación¶
XᵀX nos dice cómo se relacionan las columnas (las características) entre sí.
Su entrada (i, j) es el producto punto de la columna i con la columna j, es
decir, la suma sobre las observaciones de caract_i · caract_j. Es simétrica.
Se llama matriz de Gram.
Si además centramos cada columna (le restamos su media) y la dividimos por la desviación típica, obtenemos la matriz de correlación, acotada entre -1 y 1 y mucho más fácil de interpretar.
import numpy as np
X = np.array([
[80, 3, 10],
[60, 2, 5],
[120, 4, 2],
[75, 3, 20],
[90, 3, 8],
], dtype=float)
print(X.T @ X) # matriz de Gram (3x3)
print(np.round(np.corrcoef(X.T), 2)) # matriz de correlación
Salida esperada:
[[38125. 1335. 3560.]
[ 1335. 47. 132.]
[ 3560. 132. 593.]]
[[ 1. 0.95 -0.43]
[ 0.95 1. -0.15]
[-0.43 -0.15 1. ]]
Cómo leerlo. En la matriz de correlación, la diagonal es siempre 1 (una variable se correlaciona perfectamente consigo misma). Fuera de la diagonal, un valor alto y positivo indica que las dos características crecen juntas. Aquí superficie y habitaciones tienen 0.95: están muy correlacionadas, es decir, aportan información muy parecida. Eso es colinealidad: el modelo no sabe distinguir cuál manda y eso desestabiliza los coeficientes. Por eso el análisis exploratorio (EDA) siempre incluye esta matriz, y por eso el PCA (reducción de dimensionalidad) trabaja sobre ella.
11. Matrices como transformaciones¶
Una matriz no es solo una "tabla de números": también es una máquina que recibe un vector y devuelve otro. Eso es una transformación lineal: estira, encoge, rota o proyecta.
import numpy as np
# Estira el eje x y encoge el eje y
S = np.array([[2., 0.],
[0., 0.5]])
v = np.array([1., 1.])
print(S @ v)
Salida esperada:
El vector (1, 1) se convierte en (2, 0.5): la componente x se duplicó y la y se
redujo a la mitad. Aplicar varias transformaciones seguidas equivale a
multiplicar sus matrices (y el orden importa). La identidad no cambia nada;
la inversa deshace la transformación. En ML, cada capa lineal de una red es, en
esencia, una transformación de este tipo.
12. Autovalores y autovectores: la intuición detrás del PCA¶
Algunos vectores, al aplicar una matriz, solo se escalan pero no giran: salen en la misma dirección que entraron, multiplicados por un número. Esos son los autovectores, y ese número el autovalor:
- El autovector
vdefine una dirección "especial" de la matriz. - El autovalor
λdice cuánto se estira en esa dirección. - Para matrices simétricas (como la de covarianza), los autovalores son reales y los autovectores perpendiculares.
import numpy as np
A = np.array([[2., 1.],
[1., 2.]])
valores, vectores = np.linalg.eigh(A)
print(np.round(valores, 6))
print(np.round(np.abs(vectores), 6))
Salida esperada:
np.linalg.eigh devuelve los autovalores ordenados de menor a mayor: aquí 1 y
3. El signo de cada autovector es arbitrario: v y -v representan la misma
dirección. Por eso mostramos abs(vectores) para que la salida sea estable. La
dirección con mayor autovalor (la de (1, 1)) es donde la matriz más
"estira".
Ampliación
En PCA (Análisis de Componentes Principales), la matriz es la de covarianza de los datos, y los autovectores con mayores autovalores son los ejes principales: las direcciones donde los datos más varían. Proyectar los datos sobre esos ejes es reducir dimensiones conservando la mayor parte de la información. Aquí solo queremos la intuición; el uso práctico lo verás en la parte de reducción de dimensionalidad.
13. Independencia lineal y rango¶
Un conjunto de vectores es linealmente independiente si ninguno puede
escribirse como combinación de los demás. Cuando dos características son una
"combinación" la una de la otra (por ejemplo, siempre habitaciones = 2 · camas),
aportan la misma información y hay colinealidad.
El rango de una matriz es el número de filas o columnas independientes; en cierto sentido, la "dimensión real" de los datos.
import numpy as np
A = np.array([[1., 2.],
[2., 4.]]) # la 2ª fila es el doble de la 1ª
B = np.array([[1., 2.],
[3., 4.]])
print(np.linalg.matrix_rank(A)) # 1
print(np.linalg.matrix_rank(B)) # 2
Salida esperada:
A tiene rango 1 (una fila es múltiplo de la otra), luego AᵀA sería singular y
la ecuación normal fallaría; B tiene rango 2. La regla práctica para que el
problema esté bien planteado: tener más observaciones que características
(m > n) y características no colineales. Esto explica por qué molesta una
característica redundante y por qué la regularización es tan útil.
Errores frecuentes¶
| Error | Qué pasa | Cómo evitarlo |
|---|---|---|
Confundir vector (n,) con matriz (n,1) |
Formas y broadcasting inesperados | Imprime .shape y usa .reshape si hace falta |
Multiplicar con * en vez de @ |
Producto elemento a elemento, no matricial | Usa @ para álgebra lineal y * para escalares |
| Dimensiones internas que no coinciden | ValueError |
Comprueba X.shape y w.shape; iguala n |
Pensar que A@B = B@A |
Resultado distinto | Las matrices no conmutan |
| Confundir filas y columnas | Interpretar mal X[i,j] |
Recuerda: filas = observaciones, columnas = características |
| Creer que la predicción es un número | En X @ w el resultado es un vector de m valores |
Hay una predicción POR observación |
| No añadir la columna de 1s al ajustar | La recta pasa por el origen | Añade una columna de unos (intercept) |
Usar np.linalg.inv con colinealidad |
Inestable o da error | Usa np.linalg.lstsq o regulariza |
Ejemplo guiado completo¶
Pongamos todo junto en una mini regresión lineal "a mano":
import numpy as np
# Tabla de datos: X (5 viviendas, 3 características)
X = np.array([
[80, 3, 10],
[60, 2, 5],
[120, 4, 2],
[75, 3, 20],
[90, 3, 8],
])
# Pesos aprendidos (supongamos que el modelo ya los ha calculado)
w = np.array([0.1, 50.0, 1.5])
b = 5.0
# Predicción de todas las viviendas a la vez
y_hat = X @ w + b
# La primera predicción a mano, para verificar
primera = np.dot(X[0], w) + b
print("Predicciones:", y_hat)
print("Primera a mano:", primera)
print("Coinciden:", np.isclose(y_hat[0], primera))
Salida esperada:
Lectura del resultado. El vector y_hat tiene un número por cada vivienda. El
valor 178.0 corresponde a la primera fila (80 m², 3 habitaciones, 10 años):
contribuyen 8 (superficie), 150 (habitaciones) y 15 (antigüedad), más un sesgo de
5. Compara con el resto: a más metros y más habitaciones, mayor predicción,
aunque la antigüedad y otros factores matizan. Y esto es exactamente lo que
hace la regresión lineal (y, en esencia, una neurona).
Práctica de transferencia¶
Resuelve esto antes de mirar la solución:
- Dada
X = np.array([[1, 2], [3, 4]]), ¿cuál es su forma? ¿Y la deX.T? - Calcula
np.dot([1, 2, 3], [4, 5, 6])a mano. ¿Qué número sale? - Si
Xtiene forma(4, 6)ywtiene(6,), ¿qué forma tieneX @ w? ¿Qué representa cada elemento? - Con
A = [[2, 0], [0, 3]], ¿cuál es la inversa? Compruébala connp.linalg.inv(A). - Calcula la norma de
[3, 4]y el vector unitario correspondiente. - ¿Cuál es la similitud coseno entre
[1, 0]y[0, 1]? ¿Y entre[1, 0]y[2, 0]? - Si
Xtiene forma(m, n), ¿qué forma tieneX.T @ X? ¿YX @ X.T? - Con
A = [[2, 1], [1, 2]], ¿cuáles son sus autovalores? ¿Con qué dirección se asocia el mayor?
Soluciones (comprueba después):
(2, 2)y(2, 2)(la transpuesta de una 2×2 es 2×2).1·4 + 2·5 + 3·6 = 4 + 10 + 18 = 32.(4,): un vector de 4 predicciones, una por cada observación.np.linalg.inv(A)da[[0.5, 0], [0, 0.333...]].- Norma =
5; vector unitario =[0.6, 0.8]. - Coseno entre
[1, 0]y[0, 1]=0(perpendiculares); entre[1, 0]y[2, 0]=1(misma dirección). X.T @ Xes(n, n);X @ X.Tes(m, m).- Autovalores
1y3; el mayor (3) corresponde a la dirección(1, 1).
Producto evaluable¶
En tu cuaderno marimo:
- Crea la matriz
Xde un mini dataset de 4 viviendas con 2 características (por ejemplo, superficie y habitaciones). - Elige unos pesos
wy un sesgobrazonables. - Calcula
y_hat = X @ w + b. - En una celda de texto responde: ¿qué forma tiene
y_haty qué representa cada uno de sus elementos? Justifica usando los conceptos de producto punto y de filas-observaciones.
Resumen y referencia rápida¶
| Operación | Forma | Resultado | Significado en ML |
|---|---|---|---|
x + y |
(n,) |
(n,) |
Combinar vectores |
2 * x |
(n,) |
(n,) |
Escalar una característica |
w @ x |
(n,) |
escalar | Predicción de UNA observación |
X @ w |
(m,n) @ (n,) |
(m,) |
Predicción de TODAS las observaciones |
X.T |
(m,n) |
(n,m) |
Intercambiar filas/columnas |
A @ B |
(m,n) @ (n,p) |
(m,p) |
Producto de matrices |
I |
— | no cambia | Elemento neutro |
A⁻¹ |
— | "deshace" A |
Resolver sistemas; ecuación normal |
‖x‖ |
(n,) |
escalar | Longitud; distancia, RMSE |
x / ‖x‖ |
(n,) |
(n,) |
Normalizar |
cos(a, b) |
— | escalar [-1, 1] | Comparar vectores (RAG) |
X.T @ X |
(m,n) @ (n,m) |
(n,n) |
Gram; relaciones entre características |
X @ X.T |
(m,n) @ (n,m) |
(m,m) |
Relaciones entre observaciones |
Las tres frases para llevarte: una tabla es una matriz; una fila es un vector;
un modelo lineal es X @ w.