이미지 데이터를 읽어오면 다차원 형태의 구조로 되어있는데 np.array 형태로 되어있음에도 왜 다시 np.array 로 만들어주었을까요?
=> train_test_split에 사용하기 위해, 계산의 편의를 위해 넘파이 형태로 변경해 주었습니다.
정답값을 균일하게 나누기 위해 사용하는 train_test_split 의 옵션은 무엇일까요?
=> stratify=y
accuracy와 val_accuracy 혹은 loss와 val_loss가 대략 어느정도 차이나면 오버피팅인지?
=> 시각화를 해보는게 좀 더 직관적으로 볼 수 있는데 더 이상 val_loss 값이 감소하지 않는데, loss 값은 줄어든다면 오버피팅 되었다고 판단하는게 나아보이며, 딱 수치가 얼마가 차이가 나면 오버피팅이다 이렇게 공식으로 얘기는 잘 하지 않는 편입니다
np.argmax 는 어떤 기능을 할까요?
=> 가장 큰 값을 가지는 index를 반환
맨 마지막 에포크 결과가 아닌, 성능이 가장 좋았을때의 모델을 사용하는 방법은 없을까요?
=> 초기화 해서 다시 학습해서 성능이 잘 나오는 곳까지 early stop 이나 epoch값을 조정해 주세요!
정규표현식 [0-9] 는 무엇을 의미할까요?
=> 모든 숫자를 가져온다
정규표현식 [^0-9] 는 무엇을 의미할까요?
=> 모든 숫자를 제외합니다
steming, lematization
=> 한국어 형태소 분석기에서 제공하는 것도 있고 안 하는 형태소 분석기도 있습니다. 실습 할 때 다시 예제와 함께 다뤄보겠습니다. 원형을 어떻게 추출할지에 대한 방법을 다루는 것입니다.
했다. 했어요. 했습니다. 했나요? 하다 => 하다로 통일해서 변형해 주면 어떤 효과가 있을까요?
=> 비슷한 의미의 단어를 하나로 전처리해서 나중에 벡터화(인코딩을) 했을 때 데이터의 용량을 줄이고 모델에게 힌트도 줄 수 있겠죠.
=> 실습에서는 KoNLPy 를 사용할 예정입니다. 지원하는 형태소 분석기도 있고 그렇지 않은 형태소 분석기도 있습니다.
=> KoNLPy 는 박사학위 논문으로 만들었던 도구 입니다. 자바, C, C++ 등으로 만들어진 형태소 분석기를 파이썬으로 사용할 수 있게 연결해 주는 도구입니다.
=> 파이썬은 접착제 언어이기 때문에 다른 언어로 만들어진 형태소 분석기를 파이썬으로 래핑해서 사용할 수 있게 해주는 도구 입니다
NLTK, Spacy 도 대표적인 텍스트 전처리 도구이며, 토큰화, steming, lematization, 불용어 등의 기능을 제공합니다. 하지만 저희는 실습에서 잘 사용하지 않을거에요. 왜 그럴까요?
=> 한글을 지원하지 않습니다.
N-grams 은 왜 사용할까요?
=> BOW 의 앞뒤 맥락을 고려하지 않는다는 단점을 해결하기 위해
it's bad, not good at all.
it's good, not bad at all.
=> 예시처럼 전혀 반대의 의미를 갖는 문장인데 BOW로 만들면 같은 형태가 됩니다. 그래서 묶어서 사용하게 되면 앞뒤 맥락을 고려할 수 있습니다.
min_df를 0.1, 0.2로 설정한다면 10%, 20% 보다 많이 나타나는 용어만 학습합니다. 너무 희귀한 단어를 제외하는 효과가 있는 것은 무엇을까요?
=> min_df
너무 많이 등장하는 불용어를 제외하는 효과가 있는 것은 무엇일까요?
=> max_df
BOW를 사용하다보면 앞뒤 맥락을 고려하지 않는 단점이 있습니다. 이것을 해결하기 위한 것은 무엇일까요?
=> ngram_range
단어를 너무 많이 사용해서 dtm 가 너무 커지는 것을 방지하기 위해 최대 단어를 제한하는 것은 무엇일까요?
=> max_features
영어나 다른 외국어는 불용어 사전을 NLTK, Spacy 등에서 제공합니다. 하지만 한국어는 불용어 사전이 따로 없습니다. 왜 그럴까요?
=> 정답이 따로 있지는 않습니다. 한국어는 맥락에 따라 복잡하고 다양한 의미를 갖고 또 도메인마다의 불용어가 다 다릅니다. 예를 들어 코로나 치료제 관련 논문을 연구 한다면 코로나 라는 단어는 불용어가 되겠죠. 예를 들어 파이썬 문서를 본다라고 했을 때 파이썬 문서에서도 파이썬이라는 단어는 불용어가 되겠죠.
1) Conv, Pooling Layer 의 층을 더 쌓는다든지 파라미터 값을 변경해서 개선해 보세요.
2) compile 설정을 변경해 보세요.
3) fit 의 설정 값도 변경해 보세요.
4) 물론 이미지 사이즈나 이미지 전처리를 하면 더 나은 성능을 내지만 fit(학습)속도를 빠르게 하기 위해 기존 사이즈로 진행하겠습니다.
1) MNIST, FMNIST, cifar10, 말라리아 혈액도말 이미지, 날씨이미지 를 통해 이미지 분류 실습을 알아보았습니다.
2) CNN Explainer 를 통해 Conv, Pooling 과정을 이미지로 이해해 봤습니다.
3) 왜 완전밀집연결층을 첫 레이어 부터 사용하지 않고 합성곱 연산을 했을까요?
=> 완전밀집연결층은 flatten해서 이미지를 입력해주는데 그러면 주변 이미지를 학습하지 못 하는 문제가 생깁니다.
=> 합성곱, 풀링 연산으로 특징을 학습하고 출력층에서 flatten해서 완전연결밀집층에 주입해 주고 결과를 출력합니다.
4) 기존에 사용했던 DNN 에서 배웠던 개념을 확장해서 합성곱 이후 완전연결밀집층을 구성하는 형태로 진행해 봤습니다.
5) 이미지 전처리 도구는 matplotlib.pyplot 의 imread 를 통해 array 로 읽어올 수도 있고, PIL, OpenCV를 사용할 수도 있습니다.
6) 이미지 증강 기법 등을 통해 이미지를 변환해서 사용할 수도 있습니다.
BagOfWords,TF-IDF => 단어를 숫자로 인코딩 하는 방법에 대해 알아보겠습니다.
토큰화 => 특정 문자(예. 띄어쓰기, 공백)으로 텍스트 데이터를 나눠주는 것
it's bad, not good at all.
it's good, not bad at all.
기본값=1
stop_words=["코로나", "문의입니다", '터미널','택시']
cvect = CountVectorizer(stop_words=stop_words)
display_transform_dtm(cvect,corpus)