Loading...
2021. 10. 16. 22:30

밑바닥부터 시작하는 딥러닝 - 자연어(1)

이번 글부터는 자연어 처리에 대해 기초적인 것들을 알아볼 것이다. 한국어와 영어 등 우리가 평소에 쓰는 말을 자연어(Natural Language)라고 한다. 자연어 처리(Natural Language Processing)를 문자 그대로 해석하면 '자연어를 처리하는 분야'이고 '우리의 말을 컴퓨터에게 이해시키기 위한 기술'이라고 볼 수 있다. 그래서 자연어 처리가 추구하는 목표는 사람의 말을 컴퓨터가 이해하도록 만들어서, 컴퓨터가 우리에게 도움이 되는 일을 수행하게 하는 것이다. 단어의 의미 단어는 의미의 최소 단위이다. 자연어를 컴퓨터에게 이해시키는 데는 무엇보다 '단어의 의미'를 이해시키는 게 중요하다. 컴퓨터의 단어의 의미를 잘 파악하는 표현 방법에는 세 가지가 있다. 시소러스를 활용한 기법 통계 ..

2021. 10. 15. 21:29

밑바닥부터 시작하는 딥러닝 - 신경망(4)

저번 글까지 신경망의 대해 알아보았다. 이번 글에서는 준비된 데이터셋으로 신경망을 학습시켜 볼 것이다. 스파이럴 데이터셋 Spiral(나선형) 데이터를 불러오는 클래스를 구현한다. import sys sys.path.append('..') from dataset import spiral import matplotlib.pyplot as plt x, t = spiral.load_data() print('x', x.shape) print('t', t.shape) spiral.py 파일을 임포트 하여 이용한다. 그 후 spiral.load_data()로 데이터를 읽어 온다. 이때, x가 입력 데이터이고, t가 정답 레이블이다. x와 t의 형상을 출력해보면 각각 300개의 샘플 데이터를 담고 있으며, x는 2차..

2021. 10. 14. 22:40

밑바닥부터 시작하는 딥러닝 - 신경망(3)

신경망의 학습 손실 함수 신경망 학습에는 학습이 얼마나 잘 되고 있는지를 알기 위한 '척도'가 필요하다. 일반적으로 학습 단계의 특정 시점에서 신경망의 성능을 나타내는 척도로 '손실'을 사용한다. 손실은 학습 데이터(학습 시 주어진 정답 데이터)와 신경망이 예측한 결과를 비교하여 예측이 얼마나 나쁜가를 산출한 단일 값(스칼라)이다. 신경망의 손실은 손실 함수를 사용해 구한다. 다중 클래스 분류 신경망에서는 손실 함수로 흔히 교차 엔트로피 오차를 이용한다. 교차 엔트로피 오차는 신경망이 출력하는 각 클래스의 '확률'과 '정답 레이블'을 이용해 구할 수 있다. 앞에서 구현한 신경망에 Softmax 계층과 Cross Entropy Error 계층을 새로 추가한다. x는 입력 데이터, t는 정답 레이블, L은 ..

2021. 10. 13. 23:01

밑바닥부터 시작하는 딥러닝 - 신경망(2)

지난 글에 이어 신경망에 대해 알아볼 것이다. 신경망에서 수행하는 작업은 크게 두 단계로 나눌 수 있다. '학습'과 '추론'이다. 이번 글에서는 '추론'에 대해 알아볼 것이다. 신경망의 추론 신경망 추론 그림 입력층에는 뉴런 2개, 출력층에는 뉴런 3개를 각각 준비한다. 그리고 은닉층에도 적당한 수의 뉴런을 배치한다. 여기서는 4개의 뉴런을 두기로 한다. 위의 그림의 신경망은 인접하는 층의 모든 뉴런과 연결되어 있다는 뜻에서 완전연결계층이라고 한다. x는 입력, h는 은닉층의 뉴런, W는 가중치, b는 편향을 뜻한다. 이 기호 각각은 모두 행렬이다. # 완전연결계층에 의한 변환의 미니배치 버전 구현 import numpy as np W1 = np.random.randn(2, 4) b1 = np.rando..

2021. 10. 12. 22:34

밑바닥부터 시작하는 딥러닝 - 신경망(1)

벡터와 행렬 벡터 : 크기와 방향을 가진 양 숫자가 일렬로 늘어선 집합 1차원 배열로 취급 행렬 : 숫자가 2차원 형태로 늘어선 것 벡터와 행렬은 np.array() 메서드로 생성 가능 넘파이의 다차원 배열 클래스인 np.ndarray 클래스를 생성 ndim : 차원 수 W : 2차원 배열, 2 X 3 행렬 행렬의 원소별 연산 피연산자인 다차원 배열들에서 서로 대응하는 원소끼리 연산이 이뤄짐 브로드캐스트 넘파이의 다차원 배열에서는 형상이 다른 배열끼리도 연산 가능 스칼라 값 10이 2 X 2 행렬로 확장된 후에 원소별 연산을 수행 벡터의 내적과 행렬의 곱 왼쪽 행렬의 행벡터(가로 방향)와 오른쪽 행렬의 열벡터(세로 방향)의 내적(원소별 곱의 합)으로 계산 벡터의 내적과 행렬의 곱 모두에 np.dot()을..

2021. 10. 10. 13:22

스태킹, 블렌딩 기법(Stacking or Blending Methods)

스태킹은 Stacked Generalizaion의 줄임말로, 여러 가지 머신러닝 기법으로 만들어진 예측기들의 예측을 취합하는 방법이다. 보팅처럼 간단한 함수를 사용하는 대신 이러한 여러 예측기의 예측을 입력으로 받아들여 이들을 취합하는 모델을 훈련하는 것이 기본적인 아이디어이다. 이전 레이어의 모델에서 만들어진 결과가 다음 레이어의 모델을 훈련하는 데이터로 사용되도록 여러 레이어로 만들어진 앙상블 기법이라서 쌓는다는 의미의 스태킹이라는 이름이 붙은 것이다. 이전 레이어 모델이 만든 결과들을 훈련 데이터로 입력받아 만들어진 모델은 메타 러너(Meta Learner) 또는 블렌더(Blender)라고 불린다. 이전 레이어의 결과들을 뒤섞는다는 의미에서 붙여진 이름이다. 넷플릭스 대회에서 수상한 벨코어 프래그매..

2021. 10. 9. 14:07

Boosting 알고리즘

부스팅 기법이란 여러 개의 약한 머신러닝 기법을 차례대로 학습하는 과정에서 오류를 개선해 가면서 최종 성능을 높여 가는 앙상블 기법이다. 부스팅 기법은 여러 나무를 병렬 방식으로 학습하는 랜덤 포레스트 등의 방식보다는 느릴 수밖에 없다. 그 이유는 여러 나무 또는 머신러닝 기법들을 직렬 방식으로 순차적으로 학습하기 때문이다. 그래서 속도의 문제를 해결하기 위해 새로운 부스팅 모델들이 개발되는데, 그것이 바로 XGBoost, LightGBM, CatBoost이다. 이번 글에서는 위의 세 가지 부스팅 기법이 속도의 문제와 더불어 과적합의 문제를 어떻게 해결하는지에 대해서 알아볼 것이다. XGBOOST 캐글 경연 대회에서 두각을 나타내면서 널리 알려져 각광을 받은 알고리즘으로, 특히 분류에서 뛰어난 예측 성능..

2021. 10. 6. 17:55

[샌프란시스코 범죄 분류] - 2

지난 글에서 위경도에 따른 분포를 산점도 그래프를 통해 시각화해보았다. 마지막으로 Dates 칼럼을 확인해보고 피처 엔지니어링, 모델 구축까지 진행해볼 것이다. EDA 날짜 데이터를 다룰 때는 데이터의 유형을 반드시 파악해야 한다. # Dates 확인 train_df['Dates'].dtypes 데이터 타입에서 O는 Object를 의미하며, 문자열 데이터로 저장된 것을 확인할 수 있다. 이러한 데이터를 다룰 때는 문자열을 날짜 데이터로 변환해야 한다. # 날짜 데이터로 변환 train_df['Dates'] = pd.to_datetime(train_df['Dates']) train_df['Dates'].sample(1) 데이터를 변환한 뒤 샘플로 1개의 데이터를 출력해 보면 날짜 데이터로 변환된 것을 확인..