[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI 99

[scikit-learn 라이브러리] AdaBoostClassifier (Adaptive Boosting)

AdaBoost (Adaptive Boosting) GradientBoosting 처럼 내부에 약한 성능의 분류기를 가지는 앙상블 모델이다. GradientBoosting이 이전 분류기가 만든 잔여 오차에 대해 새로운 분류기를 만들었다면, AdaBoost는 이전의 분류기가 잘못 분류한 샘플에 대해서 가중치를 높여서 다음 모델을 훈련시킨다. 반복마다 샘플에 대한 가중치를 수정하는 것이다. 훈련된 각 분류기는 성능에 따라 가중치가 부여되고, 예측에서 각 분류기가 예측한 레이블을 기준으로 가중치까지 적용해 가장 높은 값을 가진 레이블을 선택한다. 순차적 학습을 해야하는 만큼 병령수행은 불가능하다. AdaBoostClassifier() base_estimator : 앙상블에 포함될 기본 분류기종류, 기본값으로 ..

[scikit-learn 라이브러리] GradientBoosting

Boosting 하나의 앙상블에 포함된 여러 개의 분류기가 순차적으로 학습을 수행하되, 앞에서 학습한 분류기가 예측이 틀린 데이터에 대해서 올바르게 예측할 수 있도록 다음 분류기에게 가중치(weight)를 부여하면서 학습과 예측을 진행 주로 분류기에 약한 학습기를 사용 (약한 학습기 : 예측 성능이 상대적으로 떨어지는 학습 알고리즘, 대표적으로 결정트리) GradientBoosting 여러 개의 결정 트리를 묶어 부스팅하는 앙상블 기법 회귀와 분류 모두에 사용 가능 랜덤하게 트리를 생성한 랜덤 포레스트와는 달리 그래디언트 부스팅은 이전 트리의 오차를 보완하는 방식으로 순차적으로 트리를 만듬 (무작위성이 없음) 보통 다섯 개 이하 깊이의 트리를 사용하므로 메모리를 적게 사용하고 예측도 빠르다. 각각의 트리..

Attention 기초 (리뷰 요약하기 예제)

Attention 기존 seq2seq(https://inuplace.tistory.com/580)에서%EC%97%90%EC%84%9C) 발생하던 정보 손실 문제를 대처하기 위한 기법이다. 단순히 인코더에서 상태값을 넘겨받고 그를 기반으로 연산을 진행하는 것으로는 정보가 부족하다. (쩡확한 연산진행이 어렵다.) 연산을 진행하면서 계속해서 인코더의 상태를 참조하면서 그를 활용한다. 인코더의 각 시점의 은닉상태값과 디코더의 은닉상태값을 dot_procut(혹은 다른연산)하고, 그를 softmax함수에 통과시켜 확률값을 얻어낸다. 그리고 그렇게 나온 확률값을 다시 인코더의 각 시점의 은닉상태값들에 곱해 최종적인 'Attention Value'를 얻어낸다. 그렇게 얻어진 Attention Value를 디코더의 은..

Seq2Seq 기초 (챗봇 데이터 활용 예제)

Seq2Seq 문장을 입력받아 문장을 출력한다. 인코더와 디코더로 이루어져 있다. 인코더에서는 전체 입력정보를 순환적으로 처리하여(RNN, LSTM 사용) 히든 스테이트와 셀 스테이트, 즉 상태값으로 저장한다. 디코더에서는 해당 정보를 기반으로 OUTPUT을 하나씩 출력한다. 처음엔 인코더로부터 받은 상태값들을 기반으로 을 디코더 첫입력값으로 입력한다. (물론 가 아니어도 상관없다. 시작을 알리기에 보편적으로 사용할 수 있는, 일반적이지 않아 다른 문자열과 혼동될 문제가 없는 문자열이면 충분하다.) 그리고 디코더에서도 상태값들(히든 스테이트, 셀 스테이트)를 출력하게 된다. 와 인코더 상태값을 입력했을 때 출력된 출력값을 다시 입력으로 사용한다. 그리고 이전 상태의 상태값들을 기반으로 다시 신경망을 통과..

함수형 케라스와 모델 합성(앙상블)

함수형 케라스 inputs = Input(shape=(25,)) embed = Embedding(10000, 32)(inputs) drop = Dropout(0.3)(embed) 케라스 각 레이어를 함수처럼 선언하여 활용할 수도 있다. 각 아웃풋이 다음 레이어의 인풋이 되는 형태이다. 모델 합성 (앙상블) inputs = Input(shape=(25,)) concat_layers = [] conv = Conv1D(32, 1, padding='same', activation='relu')(drop) pool = GlobalMaxPooling1D()(conv) flat = Flatten()(pool) concat_layers.append(flat) conv = Conv1D(32, 2, padding='sam..

뉴스 헤드라인 기반 카테고리 분류하기

데이터 전처리 import pandas as pd # json 읽어오기 news_data = pd.read_json('../data/News_Category_Dataset_v2.json', lines=True) news_data = news_data.loc[:, ["category", "headline"]] # 카테고리 정수 인코딩 category_list = pd.factorize(news_data['category'])[1] news_data['category'] = pd.factorize(news_data['category'])[0] # 정규표현식 사용 news_data['headline'] = news_data['headline'].str.replace("[^\w]", " ") 뉴스 카테고리 데이..

텐서플로우 허브

딥러닝이 발전하면서 다양한 신경망이 개발되었다. 하지만 신경망이 복잡해짐에 따라 시스템에 요구되는 사양, 학습시간 등도 늘어났다. 훈련된 모델을 그대로 불러와 활용하는 방법이 보편화되었다. 그 중 텐서플로우에서 제공하는 서비스가 텐서플로우 허브이다. 텐서플로우 허브 https://tfhub.dev/ 검색창에 원하는 모델을 검색하거나, 왼쪽 사이드바에서 필요한 모델의 주제 등을 정해 카테고리별로 나눠 찾을 수 있다. 모델마다 조금씩 다른듯하지만 보편적으로 url / 직접다운, colab open을 제공한다. (위 파일엔 colab open이 제공되지 않았다.) mobile_net_url="https://tfhub.dev/google/tf2-preview/mobilenet_v2/classification/2..

이미지 보강 (ImageDataGenerator)

간혹 데이터의 보강을 위해 이미지를 변형시켜 추가사용하는 경우가 있다. 그럴 때 사용되는 것이 ImageDataGenerator이다. 다양한 데이터가 활용되어야 학습에 용이하기 때문에 자주 할용된다. from tensorflow.keras.preprocessing.image import ImageDataGenerator import numpy as np image_generator = ImageDataGenerator(rotation_range=10, zoom_range=0.10, shear_range=0.5, width_shift_range=0.10, height_shift_range=0.10, horizontal_flip=True, vertical_flip=False) rotation_range : ..

합성곱 신경망(CNN) - 기본구조 구현

모델이 복잡해짐에 따라 텐서플로우를 사용함 본 문서는 개인적 학습을 위해 작성된 문서임 데이터셋 불러오기 import tensorflow as tf print(tf.__version__) fashion_mnist=tf.keras.datasets.fashion_mnist (train_X,train_Y),(test_X,test_Y)=fashion_mnist.load_data() # fashion_mnist-의류이미지/10개의범주/단일채널/28*28 print(len(train_X),len(test_X)) # 데이터의수확인하기(학습데이터수6만개/ 테스트데이터수1만개)60000 10000 구현에 사용될 데이터셋을 불러온다. 데이터 정규화 train_X = train_X/255.0 test_X = test_X/2..

[scikit-learn 라이브러리] BaggingClassifier (배깅분류기)

배깅 중복을 허용한 랜덤 샘플링으로 만든 훈련 세트(부트스트랩)를 사용하여 각 내부 모델을 다르게 학습시킴 분류기가 predict_proba() 메소드를 지원하는 경우 확률값을 평균하여 예측을 수행한다. (소프트보팅 차용) 없는 경우 가장 빈도가 높은 클래스 레이블이 예측 결과가 된다. (하드보팅 차용) 사용예제 from sklearn.model_selection import train_test_split from sklearn.datasets import load_breast_cancer # 데이터 로드 cancer = load_breast_cancer() X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, ra..