Notas de aprendizaje automático - Determinante

I. Resumen

        Se puede pensar en una matriz como una transformación lineal del espacio. El determinante de la matriz A es un número que corresponde al cambio multiplicativo obtenido al transformar el espacio usando esta matriz. Un determinante negativo significa que la orientación ha cambiado (en lugar de simplemente cambiar la escala y/o rotar). Un cambio de orientación significa, por ejemplo, en un plano 2D, simetría.

        Aquí hay un ejemplo que diferencia entre determinantes positivos y negativos:

El determinante de una matriz describe la información sobre la transformación asociada con la matriz.

        Se puede ver que la transformación correspondiente al determinante negativo no se puede obtener por rotación y escalamiento.

        Además, el determinante te da la cantidad de transformación. Si toma un cubo unitario de n dimensiones y le aplica la matriz A, el valor absoluto del determinante corresponde al área del gráfico transformado.

Dos, ejemplo 1

        Para calcular el área de una forma, usaremos un cuadrado simple en dos dimensiones. El área cuadrada unitaria se puede calcular tomando dos vectores unitarios usando el teorema de Pitágoras.

         Las longitudes de i y j son 1, por lo que el área del cuadrado unitario es 1.

        Primero, creemos una función plotVectors() para trazar vectores:

def plotVectors(vecs, cols, alpha=1):
    plt.figure()
    plt.axvline(x=0, color='#A9A9A9', zorder=0)
    plt.axhline(y=0, color='#A9A9A9', zorder=0)

    for i in range(len(vecs)):
        x = np.concatenate([[0,0],vecs[i]])
        plt.quiver([x[0]],
                   [x[1]],
                   [x[2]],
                   [x[3]],
                   angles='xy', scale_units='xy', scale=1, color=cols[i],
                   alpha=alpha)

        Comencemos con la creación de un vector en Python:

orange = '#FF9A13'
blue = '#1190FF'

i = [0, 1]
j = [1, 0]

plotVectors([i, j], [[blue], [orange]])
plt.xlim(-0.5, 3)
plt.ylim(-0.5, 3)
plt.show()

         Aplicamos a i y j. Esta es una matriz diagonal. Por lo tanto, redimensionará nuestro espacio, pero no rotará. Más precisamente, volverá a escalar cada dimensión de la misma manera, ya que los valores de las diagonales son los mismos. Creamos la matriz A:

A = np.array([[2, 0], [0, 2]])

new_i = A.dot(i)
new_j = A.dot(j)
plotVectors([new_i, new_j], [['#1190FF'], ['#FF9A13']])
plt.xlim(-0.5, 3)
plt.ylim(-0.5, 3)
plt.show()

         Como era de esperar, podemos ver que los cuadrados correspondientes a i y j no se giran, pero las longitudes de i y j se duplican.

         Ahora calcularemos el determinante de A (los detalles sobre el cálculo del determinante no se tratan aquí):

np.linalg.det(A)
#结果为4

        Como puedes ver, la transformación multiplica el área del cuadrado unitario por 4. La nueva i y la nueva j tienen una longitud de 2 (entonces 2⋅2=4).

Tres, ejemplo 2

        Ahora veamos un ejemplo de un determinante negativo.

        Transformaremos el cuadrado unitario con una matriz: , cuyo determinante es -4:

B = np.array([[-2, 0], [0, 2]])
np.linalg.det(B)
#结果为-4

         dibujar

new_i_1 = B.dot(i)
new_j_1 = B.dot(j)
plotVectors([new_i_1, new_j_1], [['#1190FF'], ['#FF9A13']])
plt.xlim(-3, 0.5)
plt.ylim(-0.5, 3)
plt.show()

         Podemos ver que las matrices con determinantes de 2 y -2 modifican el área del cuadrado unitario de la misma manera.

         El valor absoluto del determinante muestra que, como en el primer ejemplo, el área del nuevo cuadrado es 4 veces el área del cuadrado unitario. Pero esta vez, no es solo un cambio de tamaño, es una transformación de espejo.

        No es obvio usar solo vectores unitarios, así que usemos algunos puntos aleatorios.         

        usaremos la matriz

points = np.array([[1, 3], [2, 2], [3, 1], [4, 7], [5, 4]])

C = np.array([[-1, 0], [0, 1]])
np.linalg.det(C)

         Como el determinante es -1, el área del espacio no cambia. Sin embargo, como es negativo, obtenemos una transformación que no se puede obtener por rotación:

newPoints = points.dot(C)

plt.figure()
plt.plot(points[:, 0], points[:, 1])
plt.plot(newPoints[:, 0], newPoints[:, 1])
plt.show()
invirtió la imagen

         Hemos visto que el determinante de una matriz es un valor especial que expresa propiedades sobre la transformación correspondiente a esta matriz.

Supongo que te gusta

Origin blog.csdn.net/bashendixie5/article/details/124302324
Recomendado
Clasificación