🤔이미지 데이터를 읽어오면 다차원 형태의 구조로 되어있는데 np.array 형태로 되어있음에도 왜 다시 np.array 로 만들어주었을까?
🤔accuracy와 val_accuracy 혹은 loss와 val_loss가 대략 어느정도 차이나면 오버피팅이라고 할 수 있을까?
🤔모델을 초기화해서 다시 학습하는 방법?
🤔early_stop 중 가장 좋은 성능으로 되돌리는 방법?
restore_best_weights=True
지정🤔실습 과정에서 왜 완전밀집연결층을 첫 레이어 부터 사용하지 않고 합성곱 연산을 했을까?
FC Layer는 flatten이 필요하기 때문에 지나치게 계산이 복잡해지고, 공간정보가 많이 손실됨(주변 이미지를 학습하지 못함)
합성곱, 풀링 연산으로 특징을 학습하고 출력층에서 flatten해서 완전연결밀집층에 주입해 주고 결과를 출력함
합성곱을 하면 3D => 2D 로 변경됨
합성곱은 1D, 2D, 3D 등의 기능을 제공함
텍스트 데이터는 1D로 넣어주고 주변 문맥을 학습하게 함
CNN
1) MNIST, FMNIST, cifar10, 말라리아 혈액도말 이미지, 날씨이미지 를 통해 이미지 분류 실습을 진행함.
2) CNN Explainer 를 통해 Conv, Pooling 과정을 이미지로 이해함.
3) 기존에 사용했던 DNN 에서 배웠던 개념을 확장해서 합성곱 이후 완전연결밀집층을 구성하는 형태로 진행해봄
4) 이미지 전처리 도구는 matplotlib.pyplot 의 imread 를 통해 array 로 읽어올 수도 있고, PIL, OpenCV를 사용할 수도 있음.
5) 이미지 증강 기법 등을 통해 이미지를 변환해서 사용할 수도 있음.
💡머신러닝을 활용한 자연어 분류 과정
정규표현식 => 문자, 숫자를 제외한 특수문자를 제외할 때 주로 사용. 특정 패턴으로 텍스트 전처리 시에도 사용함. 정규표현식은 그 자체로 프로그래밍 언어임
BagOfWords,TF-IDF => 단어를 숫자로 인코딩 하는 방법
토큰화 => 특정 문자(e.g. 띄어쓰기, 공백)으로 텍스트 데이터를 나눠주는 것
NLTK, Spacy 도 대표적인 텍스트 전처리 도구이며, 토큰화, steming, lematization, 불용어 등의 기능을 제공함. 하지만 한글을 지원하지 않음
🤔했다. 했어요. 했습니다. 했나요? 하다. => 하다로 통일해서 변형해 주면 어떤 효과가 있을까?
가장 간단하지만 효과적이라 널리쓰이는 방법
장, 문단, 문장, 서식과 같은 입력 텍스트의 구조를 제외하고 각 단어가 이 말뭉치에 얼마나 많이 나타나는지만 헤아림.
구조와 상관없이 단어의 출현횟수만 세기 때문에 텍스트를 담는 가방(bag)으로 생각할 수 있음.
BOW는 단어의 순서가 완전히 무시 된다는 단점이 있음.
sklearn.feature_extraction.text.CountVectorizer
텍스트 문서 모음을 토큰 수의 행렬로 변환.
단어들의 카운트(출현 빈도)로 여러 문서들을 벡터화
문서목록에서 각 문서의 feature(문장의 특징) 노출수를 가중치로 설정한 BOW 벡터를 생성함
카운트 행렬, 단어 문서 행렬 (Term-Document Matrix, TDM)
max_df, min_df 인수를 사용하여 문서에서 토큰이 나타난 횟수를 기준으로 단어장을 구성할 수도 있음
토큰의 빈도가 max_df로 지정한 값을 초과 하거나 min_df로 지정한 값보다 작은 경우에는 무시하며 인자 값은 정수인 경우 횟수, 부동소수점인 경우 비율을 의미
💡CountVectorizer 사용 시 fit, transform, fit_transfrom의 차이점
fit()
: 원시 문서에 있는 모든 토큰의 어휘 사전을 배움transform()
: 문서를 문서 용어 매트릭스로 변환함. transform 이후엔 매트릭스로 변환되어 숫자형태로 변경됨fit_transform()
: 어휘 사전을 배우고 문서 용어 매트릭스를 반환함. fit 다음에 변환이 오는 것과 동일하지만 더 효율적으로 구현됨🤔N-grams 은 왜 사용할까?
인자 값
💡min_df, max_df
기본값=1
int값은 빈도수, float값은 비율을 의미
min_df는 문서 빈도(문서의 %에 있음)가 지정된 임계값보다 엄격하게 낮은 용어를 무시함
max_df는 어휘를 작성할 때 주어진 임계값보다 문서 빈도가 엄격히 높은 용어는 무시
💡max_features
🤔너무 희귀한 단어를 제외하는 효과가 있는 것?
🤔너무 많이 등장하는 불용어를 제외하는 효과가 있는 것?
🤔BOW를 사용하다보면 앞뒤 맥락을 고려하지 않는 단점이 있음. 이것을 해결하기 위한 것?
🤔단어를 너무 많이 사용해서 dtm 가 너무 커지는 것을 방지하기 위해 최대 단어를 제한하는 것?