Baixe o app para aproveitar ainda mais
Prévia do material em texto
1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 1/20 Àlgebra Linear: fundamentos e aplicações em Ciência de Dados Autor: Ronisson Lucas Calmon da Conceição GitHub: https://github.com/ronissonlucas (https://github.com/ronissonlucas) Linkdin: https://www.linkedin.com/in/ronisson-lucas-calmon-da-concei%C3%A7%C3%A3o-7aa884202/ (https://www.linkedin.com/in/ronisson-lucas-calmon-da-concei%C3%A7%C3%A3o-7aa884202/) Facebook: https://www.facebook.com/ronisson.lucas (https://www.facebook.com/ronisson.lucas) Tópicos: 1. Vetor 2. Matrizes 3. Sistemas Lineares 4. Determinante 5. Produto interno 6. Norma 7. Combinação Linear 8. Hands On! - Parte I 9. Hands On! - Parte II 10. Próximos passos: Rede Neural 11. Adendos 1. Vetor In [2]: import numpy as np Vetor: módulo, direção e sentido (array unidimensional 1-D). x = 1 7 −1[ ] In [2]: x = np.array([[1], [7], [-1]]) x Out[2]: array([[ 1], [ 7], [-1]]) https://github.com/ronissonlucas https://www.linkedin.com/in/ronisson-lucas-calmon-da-concei%C3%A7%C3%A3o-7aa884202/ https://www.facebook.com/ronisson.lucas 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 2/20 In [3]: u = np.array([[1], [2], [3]]) u In [4]: type(u) In [5]: u.shape In [7]: x = np.array([1, 7, -1]) x In [8]: x.shape = (x.shape[0],1) x In [10]: x = np.array([10, 15, 20]).reshape(-1, 1) x Igualdade Out[3]: array([[1], [2], [3]]) Out[4]: numpy.ndarray Out[5]: (3, 1) Out[7]: array([ 1, 7, -1]) Out[8]: array([[ 1], [ 7], [-1]]) Out[10]: array([[10], [15], [20]]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 3/20 u = x1, y1, z1 , v = x2, y2, z2( ) ( ) u = v ⇔ x1 = x2, y1 = y2, z1 = z2 In [4]: u = np.array([1, 4, 100]) v = np.array([1, np.log2(16), np.power(10, 2)]) In [5]: u == v Soma e multiplicação por escalar u + v = (x1 + x2, y1 + y2, z1 + z2) av = (ax1, ay1, az1), a ∈ R In [6]: u = np.array([11, 12, 13]) v = np.array([9, 3, 2]) u+v In [7]: 10*u Produto escalar (ou produto interno) u ⋅ v = x1x2 + y1y2 + z1z2 In [8]: sum(u*v) Out[5]: array([ True, True, True]) Out[6]: array([20, 15, 15]) Out[7]: array([110, 120, 130]) Out[8]: 161 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 4/20 In [9]: np.inner(u,v) Dois vetores são ortogonais ou perpendiculares se o produto interno entre eles for nulo. u ⋅ v = 0 ⇒ u ⊥ v Módulo ou norma de um vetor | v | = √v ⋅ v = x1x1 + y1y1 = x21 + y 2 1 | v | = x21 + y 2 1 + z 2 1 √ √ √ In [10]: u = np.array([3,-4]) In [11]: np.sqrt(np.inner(u, u)) Generalizando para o Rn podemos definir todas as operações anteriores. x = x1 x2 ⋮ xn [ ] x ∈ Rn 2. Matriz representação tabular de dados; notação: Am×n. Out[9]: 161 Out[11]: 5.0 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 5/20 A = a11 … a1n a21 … a2n ⋮ ⋱ ⋮ am1 … amn [ ] In [12]: import numpy as np A2 × 2 = −11 2 7 15[ ] In [11]: matrix = np.array([[-11, 2], [7, 15]]) In [12]: matrix In [15]: type(matrix) In [16]: matrix.shape In [17]: matrix.ndim #número de dimensões Out[12]: array([[-11, 2], [ 7, 15]]) Out[15]: numpy.ndarray Out[16]: (2, 2) Out[17]: 2 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 6/20 2.1 Matrizes importantes 1. Matriz Quadrada: matriz em que o número de linhas é igual ao número de colunas (m = n). A2 × 2 = −1 2 4 5[ ] In [18]: A = np.array([[-1, 2], [4, 5]]) In [19]: A 1. Matriz Nula: matriz em que todos os elementos são nulos, ou seja, aij = 0 para todo i e j. B2 × 3 = 0 0 0 0 0 0[ ] In [20]: B = np.array([[0, 0, 0], [0, 0, 0]]) B In [21]: B = np.zeros(shape = (2, 3)) B Out[19]: array([[-1, 2], [ 4, 5]]) Out[20]: array([[0, 0, 0], [0, 0, 0]]) Out[21]: array([[0., 0., 0.], [0., 0., 0.]]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 7/20 In [22]: K = np.zeros(shape = (10, 10)) K 1. Matriz-Coluna: matriz que possui uma única coluna (Am× 1). C4 × 1 = −1 2 10 5[ ] In [23]: C = np.array([[-1], [2], [10], [5]]) C 1. Matriz-Linha: matriz com uma única linha (A1 ×n) D4 × 1 = −1 2 10 5[ ] In [24]: D = np.array([-1, 2, 10, 5]) D Out[22]: array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]) Out[23]: array([[-1], [ 2], [10], [ 5]]) Out[24]: array([-1, 2, 10, 5]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 8/20 1. Matriz diagonal: matriz quadrada em que qualquer elemento fora da diagonal principal é nulo, isto é, aij = 0 para i ≠ j. E3 × 3 = 5 0 0 0 10 0 0 0 15[ ] In [25]: E = np.diag(np.arange(5,16,5)) E 1. Matriz identidade: matriz em que aij = 1 , ∀i = j e aij = 0, ∀i ≠ j. Assim, a matriz identidade, ou matriz unitária, de ordem n, denotada por In ou, simplesmente, por I, é a matriz quadrada com 1 na diagonal principal e 0 em todas as demais entradas. A matriz identidade I é análoga ao escalar 1, pois, dada qualquer matriz Am×n, temos que AI = IA = A. Para uma matriz Bn× 1, verifica-se IB = B I3 = 1 0 0 0 1 0 0 0 1[ ] In [26]: I = np.eye(3) I In [27]: I = np.identity(3) I Out[25]: array([[ 5, 0, 0], [ 0, 10, 0], [ 0, 0, 15]]) Out[26]: array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) Out[27]: array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 9/20 1. Matriz simétrica: matriz quadrada em que aij = aji para quaisquer i, j e A T = A. F3 × 3 = 4 3 −1 3 2 0 −1 0 5[ ] In [28]: F = np.array([[4, 3, -1], [3, 2, 0], [-1, 0, 5]]) F In [29]: F.T == F 1. Matriz Idempotente: matriz quadrada em que A ⋅ A = A . L2 × 2 = 5 −5 4 −4[ ] In [30]: L = np.array([[5, -5], [4, -4]]) L In [31]: np.dot(L, L) Out[28]: array([[ 4, 3, -1], [ 3, 2, 0], [-1, 0, 5]]) Out[29]: array([[ True, True, True], [ True, True, True], [ True, True, True]]) Out[30]: array([[ 5, -5], [ 4, -4]]) Out[31]: array([[ 5, -5], [ 4, -4]]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 10/20 2.2 Operações matriciais 2.2.1 Adição e multiplicação por escalar As matrizes precisam ter a mesma ordem. A2 × 2 = 1 3 2 7 B2 × 2 = 2 5 5 3 [ ] [ ] A + B = 1 + 2 3 + 5 2 + 5 7 + 3 A + B = 3 8 7 10 [ ] [ ] In [32]: A = np.array([[1, 3], [2, 7]]) B = np.array([[2, 5], [5, 3]]) soma = A+B soma Generalizando: A + B = a11 + b11 … a1n + b1n a21 + b21 … a2n + b2n ⋮ ⋱ ⋮ am1 + bm1 … amn + bmn [ ] Produto por escalar Out[32]: array([[ 3, 8], [ 7, 10]]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 11/20 10A2 × 2 = 10 × 1 10 × 3 10 × 2 10 × 7[ ] In [33]: 10*A Generalizando: kA = ka11 … ka1n ka21 … ka2n ⋮ ⋱ ⋮ kam1 … kamn [ ] 2.2.2 Multiplicação de matrizes Multiplicação entre uma matriz linha e uma matriz coluna 1 5 10 2 3 2 = 1 × 2 + 5 × 3 + 10 × 2 = 37.[ ][ ] In [34]: u = np.array([1, 5, 10]) v = np.array([[2], [3], [2]]) In [35]: u Out[33]: array([[10, 30], [20, 70]]) Out[35]: array([ 1, 5, 10]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 12/20 In [36]: v In [37]: np.dot(u,v) Generalizando: AB= a1, a2, . . . , an b1 b2 . . . bn = a1b1+a2b2 + ... + anbn.[ ][ ] Caso geral de multiplicação de matrizes Am×p ⋅ Bp×n = Cm×n O elemento cijserá obtido por meio da multiplicação dos elementos da i-ésima linha da primeira matriz pelos correspondentes elementos da j-ésima coluna da segunda matriz, com a posterior soma destes produtos. 2 1 4 2 5 3 3 × 2 ⋅ 1 −1 0 4 2 × 2 = 2 × 1 + 1 × 0 2 × ( − 1) + 1 × 4 4 × 1 + 2 × 0 4 × ( − 1) + 2 × 4 5 × 1 + 3 × 0 5 × ( − 1) + 3 × 4 3 × 2 = 2 2 4 4 5 7 3 × 2 [ ] [ ] [ ] [ ] In [38]: A = np.array([[2, 1], [4, 2], [5, 3]]) B = np.array([[1, -1], [0, 4]]) C = np.dot(A,B) C Out[36]: array([[2], [3], [2]]) Out[37]: array([37]) Out[38]: array([[2, 2], [4, 4], [5, 7]]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 13/20 2.3 Matriz transposta A transposta de uma matriz A, denotada por AT ou A ′ , é a matriz obtida escrevendo as colunas de A, na mesma ordem, como linhas. A = 1 7 8 3 1 2[ ] AT = 1 8 1 7 3 2[ ] In [13]: A = np.array([[1, 7], [8, 3], [1, 2]]) A In [40]: A.T In [41]: A.transpose() 2.4 Traço de uma matriz O traço de uma matriz quadrada A, denotado por tr(A), é a soma dos elementos da diagonal principal, a saber, tr(A) = a11 + a22 + a33 + . . . + ann Out[13]: array([[1, 7], [8, 3], [1, 2]]) Out[40]: array([[1, 8, 1], [7, 3, 2]]) Out[41]: array([[1, 8, 1], [7, 3, 2]]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 14/20 A = 2 7 1 8 3 2 1 2 10[ ] In [42]: A = np.array([[2, 7, 1], [8, 3, 2], [1, 2, 10]]) A.trace() 2.5 Matriz Inversa Uma matriz quadrada A é dita invertível, ou não singular, se existir uma matriz B tal que AB = BA = I onde I é a matriz identidade. Uma tal matriz B é única. In [43]: Z = np.array([[3,4],[1,0]]) Z_inv = np.linalg.inv(Z) In [44]: Z_inv In [45]: Z.dot(Z_inv) Dinâmica 1 3. Sistemas Lineares Um sistema linear pode ter uma única solução, múltiplas soluções ou nenhuma solução. Out[42]: 15 Out[44]: array([[ 0. , 1. ], [ 0.25, -0.75]]) Out[45]: array([[1., 0.], [0., 1.]]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 15/20 a11x1 + a12x2 + . . . + a1nxn = b1 a21x1 + a22x2 + . . . + a2nxn = b2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . am1x1 + am2x2 + . . . + amnxn = bm em que a11, a12, . . . , a1n, b1, b2, . . . , bm{ Desse sistema, destacamos as seguintes matrizes: matriz completa do sistema a11 a12 . . . a1n b1 a21 a22 . . . a2n b2 . . . . . . . . . . . . . . . . an1 an2 . . . ann b1m matriz incompleta do sistema a11 a12 . . . a1n a21 a22 . . . a2n . . . . . . . . . . . . an1 an2 . . . ann Consideremos ainda as seguintes matrizes-colunas assosciadas ao sistema: X = x1 x2 ⋮ xn , B = b1 b2 ⋮ bm [ ] [ ] [ ] [ ] a11 a12 . . . a1n a21 a22 . . . a2n . . . . . . . . . . . . an1 an2 . . . ann ⋅ x1 x2 ⋮ xn = b1 b2 ⋮ bm [ ] [ ] [ ] Representemos o sistema 3a − 7b = 1 5a + 2b = 4 na forma matricial e encontremos sua solução.{ In [46]: A = np.array ([[3, -7], [5, 2]]) B = np.array([[1], [4]]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 16/20 In [47]: X = (np.linalg.solve(A, B)) In [48]: X #solução do sistema 4. Determinante Podemos pensar no determinante como um número associado a uma matriz quadrada Am×n. Denotamos det A. Dada a matriz V = 1 2 3 4 4 3 2 1 0 2 4 6 5 7 9 11 encontremos det (V).[ ] Basta utilizar a função np.linalg.det() In [49]: V = np.array([[1, 2, 3, 4], [4, 3, 1, 1], [0, 2, 4, 6], [5, 7, 9, 1]]) In [50]: round (np.linalg.det(V)) 5. Produto interno Produto interno canônico: x = x1, x2, …, xn y = y1, y2, …, yn ( ) ( ) ⟨x, y⟩ = x1y1 + x2y2 + x3y3 + …xnyn Out[48]: array([[0.73170732], [0.17073171]]) Out[50]: -20 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 17/20 In [51]: i = np.array([1, 0, 0]) j = np.array([0, 1, 0]) k = np.array([0, 0, 1]) In [52]: np.inner(i,j) In [53]: np.inner(j,k) v = a1v1 + a2v2 + a3v3 (3, 2, 1) = 3(1, 0, 0) + 2(0, 1, 0) + 1(0, 0, 1) Se dois vetores x, y, em um dado espaço vetorial possuem produto interno nulo, então esses vetores são ortogonais. 6. Norma Seja x ∈ Rn, o número | x | é denominado norma euclidiana ou distância, tal que: | x | = √⟨x, x⟩ = x21 + x 2 2 + ⋯ + x 2 n√ 7. Combinação Linear Sejam v1, v2, …vn vetores de um espaço vetorial V e os escalares reais a1, a2, …an. Qualquer vetor v ∈ V, tal que v = a1v1 + a2v2 + a3v3 + …anvn é uma combinação linear dos vetores v1, v2, …, vn. In [54]: u = np.array([1, 0]) v = np.array([0, 1]) w = np.array([3, 2]) Out[52]: 0 Out[53]: 0 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 18/20 In [55]: 3*u+2*v Dinâmica 2 8. Hands On! - Parte 1 1. Encontre WI sendo W = 1 3 0 20 2 −1 10 13 3 4 10 0 4 9 −1 0 e I = 2 0 −4 11 5 −2 6 0[ ] [ ] 1. Construa uma matriz 5 × 5 e encontre traço, diagonal principal e secundária. 1. Crie uma matriz 2 × 2 somente com elementos pares e calcule seu determinante. 1. Represente os sistemas abaixo na forma matricial e encontre as respectivas soluções. a) 2x + y = 5 x − 3y = 0 b) 2a + b + c = − 1 a + c = 0 −3a + 5b − c = 2 { { 1. Determine a inversa das matrizes: a) H = 1 0 3 0 b) I = 1 0 0 1 3 1 1 2 0 [ ] [ ] 9. Hands On! - Parte 2 1. Com base nos dados gerados a seguir obtenha a matriz de coeficientes da regressão linear e em seguida utilize a biblioteca Statsmodels para verificar os resultados obtidos. Out[55]: array([3, 2]) 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 19/20 In [56]: from sklearn.datasets import make_regression X, y = make_regression(n_samples = 1000, n_features = 10, random_state = 99) β̂ols = (X ′X) − 1(X ′y) 1. Use a biblioteca sklearn para ajustar um modelo de regressão linear com base nas matrizes anteriores, calcule ainda outras métricas de avaliação da regressão. Use a função train_test_split() para separar os dados em treino e teste com random_state igual a 55. 1. Faça: a. Importe o banco de dados anexo nesta aula (kc_house_data.csv); b. Mostre as 5 primeiras linhas; c. Mostre as colunas e o índice do dataset; d. Mostre o shape do dataset; e. Mostre informações do objeto criado com a função info(); f. Mostre o dtype de cada coluna; g. Remova as seguintes colunas: 'id', 'date', 'zipcode', 'lat', 'long'; h. Verifique se há missing data no dataset; i. Mostre estatísticas descritivas do dataset com a função describe(); j. Calcule a matriz de correlação; l. Calcule a matriz de covariância; m. Faça um mapa de calor com base na matriz de correlação, use o módulo Seaborn; n. Faça um gráfico das relações entre as variáveis do dataset com a função pairplot do módulo Seaborn; o. Defina a variável target (coluna 'price') e armazene em uma variável; p. Defina as variáveis preditoras, que serão utilizadas para explicar o preço, e armazene em uma variável; q. Use a função train_test_split do sklearn para separar o dataset em dados de treino e teste, defina o test_size = 0.3 e random_state = 33; r. Crie um modelo de regressão linear e ajuste aos dados de treino, use: from sklearn.linear_model import LinearRegression; s. Calcule o coeficiente de determinação do modelo com a função score(), passando os dados de teste; Próximos passos: Rede Neural 1/28/2021 Algebra_Linear file:///home/lucas/Downloads/Algebra_Linear.html 20/20 https://www.deeplearningbook.org/ (https://www.deeplearningbook.org/) Adendos Propriedades da soma de matrizes Considerando as matrizes A, B e C de mesma ordem mxn temos que: 1. A + B = B + A (comutatividade) 2. A + (B + C) = (A + B) + C (associatividade) 3. A + 0 = A Propriedades da multiplicação por escalar Sejam as matrizes A e B de mesma ordem e as constantes reais k, k1, k2, temos que: 1. k(A + B) = kA + kB 2. (k1 + k2)A = k1A + k2A 3. kA = 0, em que k=0 Propriedades da Multiplicação de Matrizes 1. Em geral AB ≠ BA. 2. AI = IA = A (o que justifica o nome da matriz identidade) 3. A(B + C) = AB + AC (distributividadeà esquerda da multiplicação) 4. (A + B)C = AC + BC (distributividade à direita da multiplicação) 5. (AB)C = A(BC) (associatividade) 6. (AB) ′ = B ′A ′ 7. 0 ⋅ A = 0 e A ⋅ 0 = 0 Propriedades da transposição de matrizes 1. Uma matriz é simétrica se, e somente se ela é igual à sua transposta, ou seja, A = A ′ . 2. A ″ = A. 3. (A + B) ′ = A ′ + B ′ . 4. (kA) ′ = kA ′ , em que k é um escalar. Propriedades do traço 1. tr(A + B) = tr(B + A) 2. tr(α ⋅ A) = α ⋅ tr(A), com α ∈ R 3. tr(A) = tr(A ′ ) 4. tr(In) = n 5. tr(AB) = tr(BA) https://www.deeplearningbook.org/
Compartilhar