TIL(24.06.14.)

codataffee·2024년 6월 14일

TIL

목록 보기
67/135
post-thumbnail

#INTRO

신나는 코드카타 ...ㅎㅎㅎ

오늘만 하면 다시 주말이야!


#코드카타 (09:00 ~ 10:00)

  • KATA #62

  • PYTHON

    • 슬라이딩 윈도우

      # 원하는 제품과 수량이 할인하는 날짜와 10일 연속 일치하는 날짜 찾기 
      
      def solution(want, number, discount):
      # want와 number 배열을 이용해 want_dict 딕셔너리 생성
      want_dict = {want[i]: number[i] for i in range(len(want))}
      want_length = len(discount)
      period_length = 10
      valid_days = 0
       
      # 원하는 모든 제품의 개수를 0으로 초기화한 current_count 딕셔너리
      current_count = {product: 0 for product in want}
      # 초기 윈도우 설정
      # 처음 10일 동안의 discount 배열을 탐색하여 current_count를 업데이트
      for i in range(period_length):
          if discount[i] in current_count:
              current_count[discount[i]] += 1
       
      # 첫 번째 윈도우 검사
      # 현재 윈도우에서 모든 제품의 수량이 원하는 수량을 만족하는지 확인
      if all(current_count[product] >= want_dict[product] for product in want_dict):
          valid_days += 1
      
      # 슬라이딩 윈도우 적용
      # 윈도우를 한 칸씩 이동하며 이전 윈도우의 첫 번째 제품을 제거하고, 
      # 새로운 윈도우의 마지막 제품을 추가
      for start_day in range(1, want_length - period_length + 1):
          # 윈도우의 시작 부분 제거
          if discount[start_day - 1] in current_count:
              current_count[discount[start_day - 1]] -= 1
          
          # 윈도우의 끝 부분 추가
          if discount[start_day + period_length - 1] in current_count:
              current_count[discount[start_day + period_length - 1]] += 1
          
          # 현재 윈도우 검사
          # 각 윈도우마다 원하는 제품의 수량을 만족하는지 확인
          if all(current_count[product] >= want_dict[product] for product in want_dict):
              valid_days += 1
       
      return valid_days

#머신러닝 군집 특강 세션 (10:00 ~ 12:00)

  • ML PYTHON CLASS #군집 특강

  • 군집 분석에 대해 강의를 듣고도 코드 작성이 어려웠다.
    세션을 듣고 잘 이해한 것 같다!


#머신러닝 개인 과제 (12:00 ~ 18:00)

  • ML PYTHON CLASS #개인 과제

  • 강의를 최대한 다 듣고 정리하고 이해한 상태에서 과제를 풀었는데,
    역시 백 번 보고 듣는 것보다 한 번 직접 해보는 게..

  • 과제를 하면서 직접 코드와 변수, 인자들을 넣어보면서 확실하게 이해하게 된 것도 있고,
    내가 뭘 모르는지 어떤 부분을 더 공부해야하는지 알 수 있었다.


#머신러닝 과제 해설 세션 (19:00 ~ 21:00)

  • ML PYTHON CLASS #과제 해설

  • 딥러닝 문제.. 건들지도 못할 정도로 개념이 안잡혀..
    해설 세션 듣고 전반적인 이해가 되었다.

로지스틱 회귀 모델은 확률을 구하는 과정까지는 회귀이지만,
최종적으로 (0, 1) 등의 분류를 하기 때문에 분류기로 정의된다.
 
원래 Logistic Regression은 이진분류 수행

기존에는 다중분류 수행 시
전략적인 측면 : OVR(= OVA), OVO
loss function 바꾸기 : cross entropy

사이킷런 최신 버전 업데이트부터 자동으로 다중분류가 가능해짐 !

.

# 손글씨 데이터셋 MNIST
# 원래는 정답값 0~9 (예시, 첫 번째 데이터는 2 입니다.)
# categorical (one - hot encoding) : 0, 1, 1, 1, 0, ..., 1

# Dense() ; 가장 기본적인 신경망 층
# Dense() 의 갯수 ; 신경망 층의 갯수
# Dense(숫자) ; 괄호 안 숫자 ; node (동그라미) 수
# 몇 층? 몇 개의 노드? ; 정답이 없고, 노드나 층이 많을수록 복잡한 모델
# 더 복잡한 데이터에서 사용 가능하지만 시간이 오래 걸리고 과대적합 위험이 있다.

# 신경망 층의 갯수는 2개 이상부터 딥러닝이 가능하고
# 2의 제곱수 : 2, 4, 8, 16, ... 가 컴퓨터가 읽어내기 좋다.

# 맨 마지막 층의 노드 수는 신경을 써야 한다.
    # 분류 : 클래스(분류해야하는 값)의 갯수 
            (MNIST 데이터는 9개의 손글씨를 분류해야하기 때문에 10개의 노드가 필요)
    # 회귀 : 1개 (집값 예측 > 1개가 맨 마지막에 출력되어야 한다.)

# Flatten : 납작하게 만들어주는 함수 > 이미지 데이터는 (가로 픽셀 X 세로 픽셀)의 2차원 형태
# 벡터로 1차원 형태로 만들기 위해 Flatten 사용
# input_shape : 맨 처음 층에서 반드시 사용해줘야 한다. 데이터의 shape 를 지정하는 부분

# activation function 이 중간중간 들어가야 복잡한 데이터를 처리할 수 있는 딥러닝이 될 수 있다.
# relu, 가장 많이 사용하는 activation function, 계산이 편하고 빠르고, 생물학적으로 뇌의 뉴런과 비슷
# softmax, 마지막에 분류인 경우에 사용 (A에 대해 몇 %, B에 대해 몇 % 인지 계산) / 회귀의 경우 넣지 않는다.

# optimizer : 경사하강법을 어떤 전략으로 수행할 것인지? 
              (SGD, Mini-batch 등 있지만, Adam이 가장 무난하고 많이 사용)

# loss : 분류는 cross entropy 를 사용하면 되는데 정답값이 원-핫 인코딩이면 'categorical_crossentropy', 
#        아니면 'sparse_categorical_crossentropy'
# loss : 회귀는 MSE (MAE, RMAE 등)

# metrics : 성능지표를 넣어주는 곳, (옵션사항) 넣어도 되고 생략해도 된다.

# epochs : 몇 번 학습할 지 정하는 곳, 많을수록 좋은 성능을 기대해볼 수 있으나, 오버피팅의 위험이 있다.

# validation data : 평가용 데이터를 튜플 형태로 넣어주면 된다.

.

loss의 변화를 보고 오버피팅(과대적합)인지 언더피팅(과소적합)인지 확인이 가능하다.

# 과대적합 : train 데이터는 loss가 잘 낮아지고 있는데, 
            언제부턴가 test_loss가 더 낮아지지 않는 경우
# 과소적합 : train, test_loss 둘 다 잘 낮아지지 않는 경우

- 과소적합 해결법 -> 모델을 복잡하게 만들어 준다.
- 과대적합 해결법 -> 많은 방법이 있지만 그 중 대표적인 방법 ; 
                   early stopping (일찍 멈추기)

.

# 딥러닝을 수행하기 위해 필요한 하드웨어
    # GPU (그래픽카드) ; 작업관리자에서 쉽게 확인 가능
# 딥러닝을 수행하기 위해 필요한 소프트웨어
    # CUDA ; 내 그래픽 카드랑 맞는 버전 설치
    # Cudnn ; CUDA 버전에 맞게 설치
    # Tensorflow or Pytorch (패키지) ; CUDA, Cudnn 버전에 맞게끔 설치
    # 버전이 맞아야 한다.
# 위 세팅이 힘들다면 코랩 사용
    # 코랩 > 런타임 > 런타임 유형변경 > GPU

#OUTRO

오늘의 한 줄.

지식의 홍수..
주말에 틈나는대로 정리해보자.

profile
커피 좋아하는 데이터 꿈나무

0개의 댓글