pumpy 본문

카테고리 없음

pumpy

keydisk 2024. 2. 16. 13:51

선행대수( 행렬)

행렬을 사용하면 많은 데이터를 하나로 묶어서 연산이 가능

머신러닝에서 하나하나 계산이 아니라 통으로 계산하니 효율적 계산 가능

 선형대수는 1차식, 일차함수에 대해서만 다룬다.

1차식이 여러개면 선형 시스템이라고 한다.

행뱍터 , 열백터 => 1행/1열만 있는 행렬

 

 

 

미적분

머신러닝에서 최적화시 사용

 

통계

데이터의 큰 흐름 파악 => 예측에 사용

 

확률

가능성. 50%보다 높으면...

 

 

import numpy as np

 

행렬 구성

A = np.array( [

       [1,-1,2],

       [3,2,2],

       [4,1,2],

      [7,5,6]

 ])

 

C = np.random.rand(3,5)

 

D = np.zeros( [2,3])

 

A[0][2] 

======================

 

np.dot(A,B) <===  행렬 곱하기

A @ B  <===  행렬 곱하기

 

A@B + (A+2*B) 

 

(2*A) @ -B  @ (3*C+D)

                                                   ^ 요기서 그냥 * 하면 행렬의 차원이 같아서 그냥 곱함

 

===================

전치행렬

열과 행을 바꿈

행렬 곱계산을 할때 모양을 맞춰야 할때 전치행렬로 맞출수 있다.

전치행렬로 바꾼후 계산해도 계산이 맞냐?? 

=>

행렬의 전치와 관련하여 다음과 같은 성질이 있습니다.

(AT)T=A

(cA)T=cAT

(A+B)T=AT+BT

(AB)T=BTAT

 T=전치행렬

 

위 성질들 덕분에 계산의 필요로 인해 전치하여 행렬연산을 하였더라도

이후에 상황에 맞게 적절히 다시 한 번 더 전치하는 등의 조치를 하면 괜찮습니다.

 

 

단위행렬

대각선 요소만 1, 나머지는 0

항상 정사각형 모양

1의 역할을 함

AI=A 

 

역행렬

곱했을떄 1이 나오는수가 역수

이와 같은게 역행렬

 A * ? = I (I = 단위행렬)

역행렬이 항상 존재하는것은 아님

 

============

np.transpose(A) <---A의 전치행렬 구하기

A.T  <=== A의 전치행렬 구하기

 

I =np.identity(3) <== 단위행렬 만들기 3은 3*3 행렬

 

A * I = 기존행렬 A가 나옴

 

np.linalg.pinv(A) <---  역행렬 구하기

역행렬은 모두 존재하지 않기때문에 역행렬이 없는 경우도 있다.

이런경우 pinv 는 몬가를 리턴 , 역행렬이랑 최대한 비슷한 효과를 내는 행렬을 리턴함

제 생각엔 linalg 는 Linear Algebra(선형대수)를 의미하는 것 같습니당^^

 

np.transpose(B) @ (2 * np.transpose(A) ) @ (3 * np.linalg.pinv(C) + np.transpose(D) )

B.T @ (2*A.T) @ (3* np.linalg.pinv(C) + D.T

 

 

이제 예측으로 예제를 하면

아파트 가격은 크기( 크기 의 영향력 a1) , 지하철역 거리( 지하철역 거리 의 영향력  a2), 층수( 층수 의 영향력  a3)로 결정된다고 하면

 

1번 아파트 가격 = 110 * a1 + 400 *a2 + 20 *a3  ( 110 =크기, 400=지하철역 거리,20=층수)

2번 아파트 가격 = 100 * a1 + 1000*a2 + 5 *a3 

3번 아파트 가격 = 180 * a1 + 10 *a2 + 30 *a3  

4번 아파트 가격 = 50 * a1 + 300 *a2 + 5 *a3  

 

모두 1차식, 선형대수학은 모두 1차식을 다룸

 

100, 400, 20

100, 1000, 5             a1

180, 10,    30            a2

50,   300,  5              a3

 

 

집값은 = Xa