결측치는 아래 두가지 방법으로 진행
- 삭제 (다른 데이터에 영향 없을때 가능)
- 대체
isna() 함수로 결측치냐? 결측치 있으면 True, 없으면 False를 반환함
파이썬은 boolean 값을 연산이 가능함
False —> 0 , True —> 1이기 때문.
결측치가 있으면 훈련이 제대로 안된다.
머신러닝 성능
- 머신러닝 80% 괜찮다
- 90% 좋다
- 95% 무지 좋다
- LMS URL : http://www.digital-itsa.or.kr
- 교육 게시판
- 메모장, 소스 등록
- 교재 등록
- ㅇㅇㅇ
- 자연어
- 시계열 데이터
- 순서가 있는 데이터
Ch7. 순환 신경망 1
- 언어를 분석하는 RNN (Recurrent Neural Network)
- 텍스트를 분류
- 뉴런의 상태를 저장하고 이를 다음 스텝에서의 입력으로 사용함
- 긴 순서열에 대해서도 예측 가능
- 문장이나 시계열 데이터와 같은 순서열을 예측
- 예측하고자 하는 값이 더 오랜 과거의 데이터에 의존하게 해야함
- 10000개의 단어로 구성된 단어장을 사용하는 언어 모형에서 과거 100개 단어의 순서열에 대해 출력을 예측하려면 1,000,000 차원의 입력 벡터가 필요
2. 순차 데이터
- 지금까지 인공신경망에 사용한 데이터셋은 각 샘플이 독립적이라고 가정하고, 에포크마다 전체 샘플을 섞은 후에 모델 훈련을 진행하였다.
- 완전 연결 신경망이나 합성곱 신경망은 이전의 샘플에 대한 정보를 유지하지 않는다.
- 현재의 샘플을 처리할 때 이전에 어떤 샘플이 주입되었는지도 고려하지 않는다.
- 데이터 중에는 독립적이지 않고 각 샘플이 서로 연관되어 있는 경우도 있다.
(1) 순차 데이터
- 시계열(time series) 데이터 : 일정 시간 간격으로 배치된 데이터
- 예) 날씨 정보 : 3시 정보는 2시 정보와 연관이 있다.
- 순차 데이터(sequential data) : 샘플에 순서가 있는 데이터
- 예) 시계열 데이터
- 예) 텍스트 : 글을 구성하는 글자와 단어들의 순서가 맞아야 의미가 제대로 전달된다.
(2) 타임 스텝(time step)
- 모델에서 순차 데이터를 처리하는 각 단계
- 예) 3개의 단어로 이루어진 순차 데이터 (Hello Deep Learning)
-> 처리 단위가 단어라면 총 타임
- 파이썬 대량의 데이터 저장
- 리스트. [1, 2, 3]
- 튜플. (1, 2, 3) -> 특징: 데이터 수정이 안됨
- 딕셔너리 {‘one’ : 1, ‘two’: 2, ‘three’ : 3}
- 세트. {1, 2, 3} -> 특징: 데이터의 중복 허용하지 않음, 데이터를 불러오기 어려움, 리스트에 있는 중복 데이터 제거할때 자주 사용함.
# 참고예제1. 딕셔너리 key, value 교환하기
word_to_index = {'fawn': 34701, 'tsukino': 52006, 'nunnery':52007, 'sonja':16816,
'vani':63951}
print(word_to_index)
print('-' * 20)
for k in word_to_index :
print(word_to_index[k], k)
print('-' * 20)
# 내포 : 리스트나 딕셔너리를 for문을 이용해서 한꺼번에 만드는 방법
# 1) 리스트 내포 (리스트 뿐만 아니라 딕셔너리도 사용 가능)
lst1 = [i for i in range(50)]
print(lst1)
print('-' * 20)
# 딕셔너리의 key와 value 값을 바꾼 딕셔너리 만들기
index_to_word = {word_to_index[k]: k for k in word_to_index}
print(index_to_word)
print('-' * 20)
Ch7. 순환 신경망 1
- 언어를 분석하는 RNN (Recurrent Neural Network)
- 텍스트를 분류
- 뉴런의 상태를 저장하고 이를 다음 스텝에서의 입력으로 사용함
- 긴 순서열에 대해서도 예측 가능
- 문장이나 시계열 데이터와 같은 순서열을 예측
- 예측하고자 하는 값이 더 오랜 과거의 데이터에 의존하게 해야함
- 10000개의 단어로 구성된 단어장을 사용하는 언어 모형에서 과거 100개 단어의 순서열에 대해 출력을 예측하려면 1,000,000 차원의 입력 벡터가 필요
- 텍스트 데이터 세트 준비
(1) IMDB (Internet Movie Database)
- 서양의 영화 정보 모음 사이트이다.
- Https://www.imdb.com/
- 데이터셋은 훈련셋 25000 , 테스트셋 25000
예제1. 테너플로의 IMDB 데이터세트 구조 확인하기
- 왠만한 모든 데이터는 500개 데이터 안에 포함되어있음
- Box plot과 픽스토그램으로 확인
- 세로축은 numpy 배열의 갯수이다.
- 머신러닝의 입력 데이터는 모두 숫자로 이루어져야 한다.
- Imdb 데이터셋의 구조
- 아래와 같이 0,1,2가 특수한 문자로 나타냄
숫자 0 : 패딩을 나타냄
숫자 1 : 글의 시작을 나타냄
숫자 2 : 어휘 사전에 없는 단어
=> 데이터셋에서 3을 빼야지만 정확한 단어를 나타냄
- Imdb 데이터셋 확인
- 0, 1, 2 숫자 제거
- 데이터셋에서 3을 빼야함
- 이렇게 해야 정확한 데이터를 볼 수 있음
150개 데이터셋을 200개 데이터셋으로 만들고자 할때
0으로 채우는 작업을 ‘패딩’이라고 한다.
Q1. 어휘 사전에 없는 단어를 왜 넣는걸까요 ?
고유명사 같은 경우 어휘 사전에 없는 단어로 빼버린다.
딱 안에 있는 단어들로만 어휘 사전을 만든 것이다.
5만개 => 8만개
어휘 사전에 없을 수도 있지만 하나의 규칙이다.
특히 자연어로 데이터를 만들때
- 0, 1, 2 숫자 제거
- 데이터셋에서 3을 빼야함
- 이렇게 해야 정확한 데이터를 볼 수 있음
이러한 규칙대로 데이터셋을 만들기도 한다.
- 샘플의 길이 맞추기
(1) 샘플의 구조
- 각 리뷰들의 길이가 달라 샘플의 길이가 다르다.
- 샘플의 길이가 다르면 모델을 제대로 훈련시킬 수 없다. => 같은 길이로 맞추어야 한다.
- 잘라버리거나 0으로 채운다
(2) 텐서플로로 샘플의 길이 맞추기
- 문장의 길이를 maxlen 인자로 맞춰준다.
- 모델의 입력으로 사용하려면 고정된 길이로 만들어야 하므로 ~~
예제3. 텐서플로의 IMDB 데이터세트 샘플이 길이 맞추기
- 샘플을 원-핫 인코딩하기
- 데이터를 준비하는 마지막 단계는 정수 데이터를 원-핫 인코딩하는 것이다. 가장 큰 단어를 1로 바꾼다.
- 20000개의 샘플이 100차원으로 원-핫 인코딩 되었다.
- 텐서플로의 to_categorical() 함수를 사용한다.
- 샘플을 100개의 단어로 제안했지만, x_train_onehot의 크기를 확인해보면760MB 정도가 된다.
- 훈련에 사용할 단어의 개수가 늘어나면 컴퓨터의 메모리가 더 필요하다.
- 순환신경망
참고예제2. 배열의 축 변환 : numpy.swapaxes()
예제5. 순환 신경망을 만들고 텍스트를 분류
'자연어 처리' 카테고리의 다른 글
Cohen's kappa와 Quadratic Weighted Kappa의 차이점 (0) | 2023.08.02 |
---|---|
문장(시계열수치) 입력 다중 클래스 분류 모델(23.07.18수업) (0) | 2023.07.18 |
공적말하기 실습 및 평가 데이터 구축 과제 - 23년 7월 18일 기록 (0) | 2023.07.18 |
상태유지 LSTM 모델 (0) | 2023.07.12 |
순환 신경망 2 (0) | 2023.07.11 |