지금은마라톤중

멋사 AI스쿨 TIL - (28) 본문

멋쟁이사자처럼/Python

멋사 AI스쿨 TIL - (28)

달리는중 2023. 4. 18. 22:33

2023.03.29

 

질문🙋🏻‍♂️ : 넘파이가 빠른이유?
코드 내부가 파이썬이 아니고 low level 언어로 만들어졌습니다.
내부적으로 반복을 사용하지 않습니다.
벡터, 행렬 연산을 합니다.

 

 

● 파이썬이 느림에도 불구하고 데이터사이언스에서 큰 역할을 하고 있는 것은

내부가 다른 언어로 만들어져있고 API가 파이썬으로 되어있기 때문에 장점만을 모아 만든 도구입니다.

파이썬은 문법이 직관적이고 고수준(사람이 이해하기 쉬운언어)이기 때문에 API를 파이썬으로 작성하고 내부를 저수준(사람이 이해하기 어려운 언어)로 만들어서 빠르게 동작하도록 했기 때문에 빠른속도와 (비교적)쉬운 인터페이스로 사용할 수 있도록 만들어졌습니다

 

질문🙋🏻‍♂️ : umpy 의 zeros, ones, zeros_like, ones_like 어디에서 사용했을까요?
삼각행렬을 mask로 상단부분 또는 하단부분을 지울 때 사용했습니다.

 

 

질문🙋🏻‍♂️ : random.unifrom은 어디에서 사용했을까요?
랜덤서치 파라미터 범위 지정할때

 

 

●배열생성

  기능  주요 파라미터
np.array() 배열 생성 object, dtype, *, copy, order
np.zeros() 0으로 채워진 배열 생성
메모리를 할당받아 0으로 초기화 후 반환
shape, dtype, order
np.ones() 1로 채워진 배열 생성 shape, dtype, order
np.empty() 무작위값으로 채워진 빈 배열 생성
메모리를 할당만 받고 초기화 없이 반환
shape, dtype, order
np.arange() 특정 범위값에 해당하는 배열 생성 start, end, step, dtype
np.linspace() 지정 범위의 균일한 간격의 숫자 반환 start, stop, num

 

팁❗️

-np.array([리스트])를 이용해 리스트를 넘파이 배열로 만들 수 있다!

-넘파이는 역순 정렬을 제공하지 않음! - > flip이나 slicing을 통해 정렬을 하게 됩니다

 

-파이썬에서 썼던 방식대로 인덱싱과 슬라이싱이 가능하다.

- 벡터끼리 기본 연산이 가능하다!

- 벡터에 스칼라 값을 곱하면 broadcasting이 된다.

- 행렬끼리 더할 때 (a, b) (b, c) 가운데가 맞아야 함

[...] == [:] 같다.

 

 

질문🙋🏻‍♂️ : np.where(Z>0.5, 0, 1) 는 언제 주로 사용할까요?
수치형을 범주형으로 만들 때 사용할 수 있습니다.
pandas 의 loc를 통해 특정 조건에 따라 다른 값을 넣어줄 때 np.where로 대체해서 사용할 수 있습니다.


확률값으로 반환받아 특정 임계치에 따라 클래스 값을 정할 때

 

 

● 이미지 데이터는 여러개의 채널을 갖는 텐서로 이루어져 있다

 

● 색상 특징

색상은 0 ~ 255 사이의 값을 가집니다

PPT 등의 컬러 선택에 보면 HTML 컬러코드를 선택할 수 있는 옵션이 있기도 한데 #FFFFFF 흰색 #000000 검정색

 

 

 

● 행렬 곱셈(matrix multiplication)

두 개의 행렬에서 한 개의 행렬을 만들어내는 이항연산이다. 이 때 첫째 행렬의 열 개수와 둘째 행렬의 행 개수가 동일해야한다. 곱셈의 결과 새롭게 만들어진 행렬은 행렬곱(matrix product)라 하며, 첫째 행렬의 행 갯수와 둘째 행렬의 열 갯수를 가진다. 행렬 A와 B의 곱은 간단히 AB로 나타낸다.

행렬곱셈의 조건 : 첫째 행렬의 열 개수와 둘째 행렬의 행 개수가 동일해야한다

 

( N x M ) X ( M x Z ) => (N, Z)

 

다르게 작성되었지만 같은 기능을 합니다

 

 

●  np.arange(1, n+1).reshape(2,3,6)

reshape 뜯어보기 => 2 : 행의 수 3 : 열의 수 6 : 채널의 수 

 

 

reshape -> 차원 변경시 많이 사용됨

색상값은 0~255까지의 값으로 표현이 되어 있습니다! 255로 나눠주는 방식으로 0~1까지 값을 갖도록 scaling해줄 수 있습니다!

 

세 개의 행렬 곱으로 분해 U∑V ∑-> 대각행렬(대각선상에 있는 값이 음수가 아니며 나머지가 0인 행렬)

s와 Vt가 계산되게 하기 위해 대각행렬로 만들어줘야 한다!

 

 

 

 

 

 

 

 

질문🙋🏻‍♂️ :((768, 768), (768,), (1024, 1024)) 특이값 분해로 나온 shape 입니다.
대각행렬의 shape 는 어떻게 되어야 할까요? 



(768,1024)로 하면 됩니다!

 

 

●  토픽 모델링이란?

텍스트 마이닝에서 주로 사용하는 연구방법론. 반복적으로 등장하는 용어의 빈도에 기초하여 내재한 주요 동향과 관계에 대해 파악 단어를 근간으로 하여 토픽을 추출하고, 그에 해당하는 텍스트들을 대표하는 특정 이슈나 주제들을 자동으로 추출하는 분석기법으로 뉴스 빅데이터를 가지고 잠재적인 주제나 쟁점을 분석하는 데 유용

 

토픽모델링 => 각 주제에 어떤 키워드가 있는지를 추출해 주고 시각화 해볼 예정입니다. 예를 들어 뉴스 기사의 세계라면 이란, 중국, 일본 등의 키워드가 빈번하게 등장할 거에요

 

 

질문🙋🏻‍♂️ : appox_10 = U @ Sigma[:, :k] @ Vt[:k, :]로 이미지를 svd 압축했습니다. 여기서 k가 무엇인가요?
k값은 압축률을 나타냅니다
'k는 이미지를 압축할 때 사용되는 특이값의 개수를 결정하는 하이퍼파라미터입니다.
“k'가 클수록, 더 많은 특이값이 사용되어 이미지가 더 많은 정보를 포함하게 되며, 따라서 더 높은 압축률 을 갖습니다. 하지만, 'k'가 커질수록 압축된 이미지의 질이 높아지므로, 더 많은 계산 리소스가 필요하게 됩니다.
반대로, 'k' 가 작을수록, 더 적은 특이값이 사용되어 이미지가 덜 압축되며, 따라서 더 낮은 압축률을 갖습 니다. 하지만, 'k'가 작을수록 압축된 이미지의 질이 떨어지므로, 더 적은 계산 리소스가 필요하게 됩니다.
따라서, 'k 값은 압축률과 압축된 이미지의 질 사이에서 균형점을 찾기 위한 trade-off를 결정하는 매우 중요한 하이퍼파라미터입니다. 일반적으로, k'값은 이미지의 크기 및 목적에 따라 다르며, 실험적으로 결정됩니다.

 

 

● clip

: 특정 값 이하는 0으로, 나머지는 1로 만들어줌 (이상치 처리할 때도 많이 사용됨)

 

 

● SVD진행순서(2차원 흑백이미지 => 3차원 컬러이미지)

1) 선형대수 모듈을 통해 특이값분해

2) U, sigma, V 값으로 반환이 되었습니다.

3) sigma 가 1D array 라서 원래의 값으로 복원을 하려면 U, s, V 값을 행렬곱셈을 해야하는데 s값이 1D라서 s @ V의 행렬곱셈을 할 수 없기 때문에 s 값을 0으로 채워진 대각행렬로 만들어 줍니다. 대각행렬을 만들 때 U의 shape의 마지막 값, V shape 의 첫번째 값으로 만들어주면 행렬 곱셈이 가능해 지게 됩니다.

4) 특이값분해 한 결과를 다시 행렬곱셈을 하게 되면 원래 이미지의 값과 비슷하게 복원할 수 있습니다.

5) 분해한 값에서 sigma을 다 사용하는게 아니라 일부만 계산에 사용하면 데이터를 압축할 수 있습니다

 

 

● 특이값분해 (SVD, Singular Value Decomposition)

1) 데이터의 양을 줄여서 계산을 효과적으로 할 수 있습니다.

2) 토픽모델링 등에 활용할 수 있습니다.

3) 이미지 사이즈 줄이기 등에 응용할 수 있습니다

 

 

● TF-IDF -> LDA 시각화

-> 주어진 문서에 대하여 각 문서에 어떤 주제들이 존재하는지, 해당 문서가 어떤 주제들을 함께 다루고 있을지 예측

 

 

● TF-IDF 잠재 디리클레 할당 분석(LDA)

  • 자연어 처리에서 잠재 디리클레 할당(Latent Dirichlet allocation, LDA)은 주어진 문서에 대하여 각 문서에 어떤 주제들이 존재하는지를 서술하는 대한 확률적 토픽 모델 기법 중 하나
  • 미리 알고 있는 주제별 단어수 분포를 바탕으로, 주어진 문서에서 발견된 단어수 분포를 분석함으로써 해당 문서가 어떤 주제들을 함께 다루고 있을지를 예측할 수 있음
  • 주의:  선형판별분석과는 다름! (LDA: Linear discriminant analysis)

● 비음수 행렬 분해(Non-negative matrix factorization, NMF)

: 음수를 포함하지 않는 행렬 V를 음수를 포함하지 않는 행렬 W와 H의 곱으로 분해하는

알고리즘선형 차원 축소를 위한 비지도 학습 기법이며, 샘플과 특성 사이에 잠재되어 있는 관계를 표현하는 행렬로 특성 행렬을 분해합니다

 

 

● pyLDAvis

: 토픽 모델링에 이용되는 LDA 모델의 학습 결과를 시각화하는 Python 라이브러리

pyLDAViz로 토픽별 시각화를 할 수 있습니다!

tsne -> 차원 축소, 고차원 데이터를 2, 3차원으로 줄여 가시화하는 데 쓴다

 

●  거리 종류

코사인 거리 : 단어 사이의 공간상의 거리(유사도)를 각도를 바탕으로 구하는 거리입니다.

유클리디안 거리 : 제곱값 사용

맨해튼 거리 : 절댓값 사용

 

● 유사도

=> 추천시스템에서 상품에 대한 설명이 있다면 해당 설명에 대해 텍스트 데이터를 TF-IDF로 벡터화 하고 그 값을 유사도를 구해서 가장 높은 유사도가 나온 데이터를 추천해 주기도 합니다 => contents based recommendation => 추천시스템에서 다시 배우도록 하겠습니다

 

'멋쟁이사자처럼 > Python' 카테고리의 다른 글

멋사 AI스쿨 TIL - (30)  (0) 2023.04.18
멋사 AI스쿨 TIL - (29)  (0) 2023.04.18
멋사 AI스쿨 TIL - (27)  (0) 2023.04.18
멋사 AI스쿨 TIL - (26)  (0) 2023.04.18
멋사 AI스쿨 TIL - (25)  (0) 2023.03.23
Comments