🤔 정답값을 균일하게 나누기 위해 사용하는 train_test_split 의 옵션은 무엇일까요?
stratify=y
모델을 훈련하기 전에 필요한 몇 가지 설정이 모델 컴파일 단계에서 추가됩니다:
다중분류에서 손실함수는 훈련데이터의 라벨이 원핫벡터의 경우에는 categorical_crossentropy
라벨이 정수(int)의 형태인 경우에는 sparse_categorical_crossentropy를 사용해보실 수 있습니다
🤔 왜 완전밀집연결층을 첫 레이어 부터 사용하지 않고 합성곱 연산을 했을까요?
완전밀집연결층은 flatten해서 이미지를 입력해주는데 그러면 주변 이미지를 학습하지 못 하는 문제가 생깁니다. 합성곱, 풀링 연산으로 특징을 학습하고 출력층에서 flatten해서 완전연결밀집층에 주입해 주고 결과를 출력합니다.
1) MNIST, FMNIST, cifar10, 말라리아 혈액도말 이미지, 날씨이미지 를 통해 이미지 분류 실습을 알아보았습니다.
2) CNN Explainer 를 통해 Conv, Pooling 과정을 이미지로 이해해 봤습니다.
3) 기존에 사용했던 DNN 에서 배웠던 개념을 확장해서 합성곱 이후 완전연결밀집층을 구성하는 형태로 진행해 봤습니다.
4) 이미지 전처리 도구는 matplotlib.pyplot 의 imread 를 통해 array 로 읽어올 수도 있고, PIL, OpenCV를 사용할 수도 있습니다.
5) 이미지 증강 기법 등을 통해 이미지를 변환해서 사용할 수도 있습니다.
🤔 머신러닝에서 텍스트로 된 카테고리 범주 값을 어떻게 처리 했을까요?
인코딩
: 문자, 숫자를 제외한 특수문자를 제외할 때 주로 사용합니다. 특정 패턴으로 텍스트 전처리 시에도 사용합니다. 정규표현식은 그 자체로 프로그래밍 언어입니다.
🤔 정규표현식 [0-9] 는 무엇을 의미할까요?
모든 숫자를 의미
🤔 정규표현식 [^0-9] 는 무엇을 의미할까요?
모든 숫자를 제외
[정규 표현식] https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D
💡 1101 번의 실습 목표 : BagOfWords, TF-IDF (단어를 숫자로 인코딩 하는 방법)
토큰화 => 특정 문자(예. 띄어쓰기, 공백)로 텍스트 데이터를 나눠주는 것
NLTK, Spacy 도 대표적인 텍스트 전처리 도구이며, 토큰화, stemming, lematization 등의 기능을 제공합니다.
하지만 한글을 지원하지 않아서 실습에서 사용하지 않겠습니다. 실습에서는 KoNLPy 를 사용할 예정입니다. 지원하는 형태소 분석기도 있고 그렇지 않은 형태소 분석기도 있습니다.
KoNLPy 는 박사학위 논문으로 만들었던 도구 입니다. 자바, C, C++ 등으로 만들어진 형태소 분석기를 파이썬으로 사용할 수 있게 연결해 주는 도구입니다.
파이썬은 접착제 언어이기 때문에 다른 언어로 만들어진 형태소 분석기를 파이썬으로 래핑해서 사용할 수 있게 해주는 도구 입니다.
🤔 "했다." "했어요." "했습니다." "했나요?" "하다." 를 "하다."로 통일해서 변형해 주면 어떤 효과가 있을까요?
비슷한 의미의 단어를 하나로 전처리해서 나중에 벡터화(인코딩을) 했을 때 데이터의 용량을 줄이고 모델에게 힌트를 줄 수 있다
it's bad, not good at all.
it's good, not bad at all.
🤔 N-grams 은 왜 사용할까요?
BOW 의 앞뒤 맥락을 고려하지 않는다는 단점을 해결하기 위해
🤔 너무 희귀한 단어를 제외하는 효과가 있는 것은 무엇을까요?
min_df
🤔 너무 많이 등장하는 불용어를 제외하는 효과가 있는 것은 무엇일까요?
max_df
🤔 단어를 너무 많이 사용해서 dtm 가 너무 커지는 것을 방지하기 위해 최대 단어를 제한하는 것은 무엇일까요?
max_features
💡 TF-IDF 전체 문서에서는 자주 등장하지 않지만 특정 문서에서 자주 등장한다면 가중치 값이 높게 나오게 됩니다. 모든 문서에 자주 등장하는 값은 가중치가 낮게 나오게 됩니다.
Q: 이미지 데이터를 읽어오면 다차원 형태의 구조로 되어있는데 np.array 형태로 되어있음에도 왜 다시 np.array 로 만들어주었을까요?
A: 리스트 안에는 np.array 로 되어있더라도 여러 장의 이미지를 하나로 만들 때 파이썬 리스트에 작성해 주었습니다. 그래서 이미지 여러 장을 하나의 변수에 넣어주었을 때 해당 변수의 데이터 타입은 파이썬 리스트 구조입니다. train_test_split에 사용하기 위해, 계산의 편의를 위해 넘파이 형태로 변경해 주었습니다.
Q: 영어나 다른 외국어는 불용어 사전을 NLTK, Spacy 등에서 제공합니다. 하지만 한국어는 불용어 사전이 따로 없습니다. 왜 그럴까요?
A: 정답이 따로 있지는 않습니다. 한국어는 맥락에 따라 복잡하고 다양한 의미를 갖고 또 도메인마다의 불용어가 다 다릅니다. 예를 들어 코로나 치료제 관련 논문을 연구 한다면 코로나 라는 단어는 불용어가 되겠죠. 예를 들어 파이썬 문서를 본다라고 했을 때 파이썬 문서에서도 파이썬이라는 단어는 불용어가 되겠죠.
Q: accuracy와 val_accuracy 혹은 loss와 val_loss가 대략 어느정도 차이나면 오버피팅이라 하나요?
A: 시각화를 해보는게 좀 더 직관적으로 볼 수 있는데 더 이상 val_loss 값이 감소하지 않는데, loss 값은 줄어든다면 오버피팅 되었다고 판단하는게 나아보이며, 딱 수치가 얼마가 차이가 나면 오버피팅이다 이렇게 공식으로 얘기는 잘 하지 않는 편입니다. val_loss 값이 나아지지 않는데 loss 값만 나아진다면 확실하게 오버피팅이라고 볼 수 있을것 같습니다.