A decomposição do valor singular é um dos conceitos mais importantes da álgebra linear. A compreensão da decomposição do valor singular (SVD) envolve familiaridade com conceitos relacionados, como matrizes, tipos de matriz e transformações da matriz. Devido aos vínculos entre a decomposição do valor singular de uma matriz e outros tópicos algébricos lineares, aprender a ideia se tornou mais desafiadora. Neste artigo, você descobrirá a definição de decomposição de valor singular e exemplos detalhados de 2*2 e 3*3 decomposição da matriz. A abordagem SVD será explicada completamente neste post. Você pode encontrar todo o material necessário aqui, começando com a introdução e passando para vários exemplos.
O que é decomposição de valor singular?
Quando uma matriz é fatorada em três matrizes diferentes, diz -se que se decompõe em valores singulares. Este conceito é conhecido como SVD, que significa decomposição de valor singular. Como resultado, quando a Matrix "One" é levada em consideração no produto de três matrizes, a decomposição do valor singular da matriz "um" pode ser escrito como um = UDVT. Nesse caso, as colunas u e v são ortonormes, enquanto a matriz D é diagonal, tendo entradas positivas reais.
Sintaxe do método SVD
A sintaxe do método SVD tem alguns parâmetros.
Agora, você tem um entendimento básico do método SVD e sua sintaxe. Vamos discutir alguns exemplos de como usar a função.
Exemplo 1
No primeiro exemplo deste artigo, forneceremos o código de exemplo aplicando o método SVD. Vamos ver a linha de código por linha.
Na captura de tela a seguir, você pode ver que importamos a biblioteca Numpy que está disponível no Python. É feito com um código simples de "importar numpy", e geralmente escrevemos isso na primeira linha do código. Depois disso, criamos a matriz chamada "arr_data" usando o Numpy.Método da matriz. A matriz contém [1, 2, 3, 4, 5], [11, 22, 33, 11, 23], [6, 8, 10, 2, 4] e [5, 7, 3, 5, 3 ] valores.
Depois disso, usamos duas declarações de impressão para exibir a matriz original. Na próxima linha do código, usamos o Numpy.Linla.Método SVD na matriz criada acima. Aqui, definimos o parâmetro full_matrices como "false". Na última seção, outras duas declarações de impressão () são usadas. Uma declaração de impressão para exibir o “fator da matriz criada por SVD:” e a segunda declaração de impressão para mostrar o resultado na tela de saída.
importar numpy
ARR_DATA = Numpy.Array ([[1, 2, 3, 4, 5], [11, 22, 33, 11, 23],
[6, 8, 10, 2, 4], [5, 7, 3, 5, 3]],
dtype = Numpy.float32)
print ("Aqui está a matriz original:")
Imprimir (arr_data)
U, s, v = numpy.Linalg.svd (arr_data, full_matrices = false)
print ("\ nFactor da matriz criada por svd:")
print ("\ nu =", u, "\ n \ ns =", s, "\ n \ nv =", v)
A tela de resultado está anexada, na qual você pode ver a matriz original e o fator dessa matriz usando o método SVD.
Exemplo 2
Aqui está o segundo exemplo deste artigo em que o mesmo conceito é aplicado, mas em uma matriz diferente contendo valores diferentes. Na segunda linha do código, você pode ver que criamos uma matriz chamada "ar_val" com o Numpy.Método da matriz. A matriz contém [7, 1, 2], [3, 7, 3] e [2, 4, 7] valores. Depois disso, a matriz original é exibida, para que você possa ver facilmente a diferença entre a matriz original e o resultado gerado. O Numpy.Linalg.O método SVD é aplicado posteriormente na matriz especificada e o resultado é exibido.
Importar numpy
ARR_VAL = Numpy.Array ([[7, 1, 2], [3, 7, 3],
[2, 4, 7]], Dtype = Numpy.float32)
Imprimir (“Aqui está a matriz original:”)
Imprimir (arr_val)
U, s, v = numpy.Linalg.svd (arr_val, full_matrices = false)
Imprimir (“\ nFactor da matriz criada pelo método SVD:”)
print (“\ nu =”, u, “\ n \ ns =”, s, “\ n \ nv =”, v)
Aqui está a saída na qual você pode ver a matriz original e o fator dessa matriz calculada pelo método SVD.
Exemplo 3
Aqui, uma matriz diferente é armazenada em “ARR_3rd”, E seus valores são [12, 3], [4, 7]. O restante do código deste programa é quase o mesmo que acima. Você pode comparar a saída gerada por este código e a saída fornecida pelos exemplos anteriores. A saída difere dependendo da matriz de entrada fornecida com a forma e tamanho.
Importar numpy
ARR_3RD = Numpy.Array ([[12, 3], [4, 7]], Dtype = Numpy.float32)
Imprimir (“Aqui está a matriz original:”)
Imprimir (arr_3rd)
U, s, v = numpy.Linalg.svd (arr_3rd, full_matrices = false)
Imprimir (“\ nFactor da matriz criada pelo método SVD:”)
print (“\ nu =”, u, “\ n \ ns =”, s, “\ n \ nv =”, v)
Aqui está o seguinte resultado:
Exemplo 4
Este é o exemplo final deste artigo e aqui estamos usando duas matrizes 2D separadas. Vamos ver o código linha por linha na captura de tela a seguir.
Aqui, começamos a importar o Numpy e Numpy.Módulos Linalg que fornecem toda a funcionalidade necessária para a álgebra linear. Depois disso, duas matrizes 2D são criadas com o Numpy.aleatório.Método Randn. Essas matrizes são armazenadas em variáveis "First_arr" e "seconc_arr". Depois disso, uma declaração de impressão é usada para exibir as matrizes originais. A linha de codificação é "Print (" Aqui estão as matrizes originais: \ n ", First_arr)" e "Print (" Aqui estão as matrizes originais: \ n ", Second_arr)".
Agora, nós usamos o GNL.Método SVD na matriz dada e defina a opção Full_Matrices para “True”. Na última seção, mais quatro declarações de impressão são usadas. A primeira declaração de impressão exibirá o texto “Aqui você pode ver a forma de todos os valores retornados:”, e o restante das declarações de impressão exibirá a forma dos valores retornados pela função executada. Veja a captura de tela completa de código abaixo:
importar numpy
importar numpy.Linalg como GNG
primeiro_arr = Numpy.aleatório.Randn (2, 5) + 1J*Numpy.aleatório.Randn (2, 5)
Second_arr = B = Numpy.aleatório.Randn (2, 5, 7, 3) + 1J*Numpy.aleatório.Randn (2, 5, 7, 3)
print ("Aqui estão as matrizes originais: \ n", First_arr)
print ("Aqui estão as matrizes originais: \ n", Second_arr)
u, s, vh = lng.svd (primeiro_arr, full_matrices = true)
Print ("Aqui você pode ver a forma de todos os valores retornados: \ n")
print ("u =", u.forma)
print ("s =", s.forma)
print ("vh =", vh.forma)
As seguintes capturas de tela de saída completas do código anterior estão anexadas para sua referência:
Conclusão
O SVD é amplamente usado para resolver problemas em física, estatística, aprendizado de máquina e outros campos. Cobrimos a definição e a sintaxe do método SVD neste breve ensaio. Além disso, várias instâncias de decomposições de 2*2 e 3*3 são usadas para ilustrar o ponto principal do post. Você pode usar esta página como um recurso para aprender os fundamentos da abordagem SVD e por que ela é empregada com tanta frequência hoje em dia.