본문 바로가기
반응형

개발 Tools92

학습의 종류 (지도 학습, 비지도 학습, 강화 학습, 준지도 학습, 결정론적 학습, 스토캐스틱 학습) 지도 학습 - 특징 벡터 x와 목푯값 y가 모두 주어진 상황 - 정답을 알고 있는 학습 - 회귀와 분류 문제로 구분 비지도 학습 - 특징 벡터 x는 주어지는데 목푯값 y가 주어지지 않은 상황 - 입력만 집어넣음 - 밀도 추정, 특징 공간 변화에 사용 강화 학습 - 목표값은 주어지나 지도 학습과는 다른 형태 - 예로 바둑, 수를 두는 행위가 샘플이고 게임이 이기고 지고가 목푯값 준지도 학습 - 일부는 x, y를 모두 가지지만 나머지는 x만 가지는 상황 - 인터넷 덕분으로 x의 수집은 쉽지만 y는 수작업이 필요하여 최근 중요성이 부각됐다. 결정론적 학습 - 같은 데이터를 가지고 다시 학습하면 같은 예측기가 만들어짐 스토캐스틱 학습 - 학습 과정에서 난수를 사용하므로 같은 데이터로 다시 학습하면 다른 예측기가.. 2021. 11. 24.
차원의 저주 (Curse of Dimensionality) & 매니폴드 가정 (manifold assumption) 차원의 저주(Curse of Dimensionality) - 차원이 높아짐에 따라 발생하는 현실적인 문제들 - 차원이 증가할수록 개별 차원 내 학습할 데이터 수가 적어지는(sparse) 현상 발생 - 예) d=4인 Iris 데이터에서 축마다 100개 구간으로 나누면 총 1004=1억 개의 칸 - 예) d=784인 MNIST 샘플의 화소가 0과 1 값을 가진다면 2784개의 칸. 이 거대한 공간에 고작 6만 개의 샘플을 흩뿌린 매우 희소한 분포 - 즉, 가지고 있는 데이터(샘플)가 고차원의 feature space에 고르게 분포할 수 없으며, 이렇게 비어있는 공간은 정보가 없으니 머신러닝 모델을 만들 때 이런 공간을 고려하기 어렵고 결국 성능이 감소될 수 있음 - 예를 들면 (1) (2) (3) 이렇게 있.. 2021. 11. 24.
딥러닝 LSTM (Long Short-Term Memory) LSTM 의미 있는 데이터와 의미 없는 데이터를 구분하고, 정보가 많아지면 기울기의 소실이 생기는데 이를 막기 위해 나온 개념이다. 기본 RNN에서 Cells이라는 개념이 추가된다. Cells란 정보를 임시적으로 저장하는 소자이고 이 정보를 망각, 입력, 출력 게이트를 이용하여 전달한다. 이렇게 정보가 많이 생기니 파라미터가 훨씬 많아지는 단점이 있다. 망각 게이트 시그모이드를 적용하여 결과가 크면 이전의 상태 값을 많이 통과시키고, 작으면 조금만 통과시키는 동작을 하는 부분인데 만약 0이라면 거의 0으로 입력을 받는 즉, 망각하는 동작을 수행한다. 이렇듯 망각 게이트는 과거의 데이터를 얼마나 받아들이냐를 결정한다. 입력 게이트 망각 게이트로부터 들어온 애와 더해주는데 입력단을 얼마나 받아들일지 결정한다.. 2021. 10. 22.
파이썬 Pandas value_counts (고윳값) value_counts 열의 고윳값 별 몇 개 있는지 알려준다. 중복을 피해서 볼 때 좋다. 열 "C0"에 대해 값을 봤다. import pandas as pd df = pd.DataFrame([[0, 1, 2], [3, 4, 5]], index=["r0", "r1"], columns=["c0", "c1", "c2"]) print(df) 출력 c0 c1 c2 r0 0 1 2 r1 3 4 5 print(df["c0"].value_counts()) 출력 0 1 3 1 Name: c0, dtype: int64 2021. 10. 17.
파이썬 시간 복잡도 (Big-o, 빅오) 코드 동작 실행 시간을 체크하는 데 사용한다. 가장 기본적인 생각은 코드가 실행된 순간부터 끝나는 순간을 체크하면 된다. 파이썬은 time이라는 라이브러리를 사용하면 쉽게 볼 수 있다. import time start = time.time() # 실행될 때 찍힌 시간 for i in range(10000000): pass end = time.time() # 실행될 때 찍힌 시간 print(f"{end - start}") # 정수부는 초단위, 소수부는 마이크로 초단위 출력 0.47263002395629883 time.time은 이 코드가 실행될 때 시작하는 시간이다. 그러니 시작과 끝에 이 코드를 적으면 얼마나 동작했는지 알 수 있다. 하지만 이런 코드에는 문제가 있다. 왜냐면 객관적인 시간이 아니기 때문.. 2021. 10. 17.