목록Python (173)
오답노트
EarlyStopping EarlyStopping은 모델이 학습하는 중에 모델이 더 이상 성능이 좋아지지 않는다고 판단될 때 학습을 멈추게 한다. from tensorflow.keras.callbacks import EarlyStopping es = EarlyStopping(monitor = 'val_loss', min_delta=0, patience=5, verbose=1, restore_best_weights=True) model.fit(train_x,train_y, verbose=1,epochs=10, callbacks=[es], #
Flatton Layer 모델링을 할 때 학습시킬 데이터를 전처리하는 경우 중, 데이터를 1차원 데이터로 만드는 경우가 존재한다. 이때 numpy를 활용하여 reshape 하는 과정을 거쳐서 차원을 변환 시킬수도 있다. 하지만 numpy를 활용하지 않고 Keras에 존재하는 Flatton Layer를 통해서 다차원 데이터를 1차원으로 바꿀 수 있다. 실습을 통해 reshape으로 차원을 변환하는 과정과 Flatton Layer를 통해 차원을 변환하는 과정을 알아보자. 라이브러리 및 데이터 불러오기 import tensorflow as tf from tensorflow import keras import numpy as np import pandas as pd import matplotlib.pyplot ..
ANN (Artificial neural network) 인공 신경망이라고도 부른다. 인간의 뇌에 있는 뉴런을 모방하여 만든 알고리즘이다. input layer 와 output layer 그리고 둘 사이에 hidden layer가 존재하는 모습이다. Hidden Layer (은닉층) hidden layer는 input layer 와 output layer 사이에 존재한다. hidden layer를 추가하면 모델 성능에 유용한 feature를 모델이 알아서 만들게 된다. 또 hidden layer의 노드 수 만큼 새로운 feature를 만들게 된다. 이것을 Feature Representation 이라고 한다. 즉, 연결된 것으로부터 기존에 없던 새로운 Feature를 추출하는 것이다. hidden lay..
MultiClass 로지스틱 회귀는 분류 모델로 0과 1로만 판단할 수 있다. 하지만 분류의 개수가 3개 이상이면 분류할 수 없게 된다. 그래서 로지스틱 회귀 결과에 *n 으로 분류의 개수를 늘린다는 아이디어는 존재했지만, 범주형 변수에 수학적인 계산은 의미가 없다. 그래서 등장한 개념이 one vs the others(one vs rest) 이다. 이 방식은 분류의 개수가 3개 이상일 경우, 분류 중 1개일 경우와 그 외일 경우를 3개로 나누어 생각하는 것이다. 하지만 이 방법으로 로지스틱 회귀를 3개를 만들면 확률로 계산되어 1을 넘어가버리게 된다. 이 확률을 노말라이즈 하여 확실하게 분류를 하는 것이 SoftMax이다. SoftMax One-Hot Encoding to_categorical 함수를 ..
Linear Regression Sequential은 add 함수를 통해 모델에 레이어를 쌓았다면, Functional은 레이어를 변수로 만들고, 레이어간 연결을 직접 정의할 수 있다. Dense에 대한 변수를 정의할 때를 잘 살펴보자. from sklearn.datasets import load_boston boston = load_boston() x = boston.data y = boston.target print(x.shape, y.shape) # (506, 13), (506,) #모델링 # 케라스 세션 클리어 keras.backend.clear_session() #레이어 선언 il = keras.layers.Input(shape=(1,)) ol = keras.layers.Dense(1)(il) ..
Keras 케라스는 원래 독자적인 딥러닝 라이브러리였다. 하지만 케라스의 창시자가 구글에 입사하게 되면서 텐서플로우에서 케라스 라이브러리를 제공하게 되었다. Sequential API & Functional API Sequential API는 레이어별로 모델을 만들 수 있고, 사용하기가 쉽다. 하지만, 레이어의 공유나 레이어의 분기는 불가능하다. 또한 여러 입력 또는 출력을 가질 수 없다. Functional API는 Sequential API보다 더 유연하게 사용할 수 있다. 계층의 분기 또는 공유가 허용된다. 또한 여러 입력 또는 출력을 가질 수 있다. 따라서 좀 더 복잡한 모델을 만드는데 도움이된다. Sequential API 실습 Linear Regressoin # 라이브러리 호출 import t..
CatBoostRegressor # pip install catboost import catboost as cbt model_cbt = cbt.CatBoostRegressor() params_cbt = {'depth' : [4,5,6,7,8,9, 10], 'learning_rate' : [0.01,0.02,0.03,0.04], 'iterations' : [10 ,30,50,70, 100] } model_cbt_g = GridSearchCV(model_cbt,params_cbt,cv=10,verbose=3) model_cbt_g.fit(x_train,y_train) pred_cbt = model_cbt_g.predict(x_val) ufs.Regressor_report(y_val,pred_cbt) pip ..
CatBoost CatBoost 알고리즘은 분류 모델을 만들 때 유용한 최근 알고리즘이다. 기존 Boosting 알고리즘의 문제점을 극복하는 알고리즘이다. 기존 Boosting의 한계 Prediction Shift train data에서의 조건부 확률과 test data에서 조건부 확률간 차이가 있다. Target Leakage target을 예측하기 위해 모델링을 할 떄, train data의 target이 모델에 영향을 준다. 하지만 실제 예측을 할 때는 target이 없는 모순이 존재하게 된다. 기존 Boosting 극복 Ordered Target Statistics 과 Ordered Boosting으로 위 한계를 극복하려고 한다. 두 개념은 학습에 사용될 객체들을 시계열 데이터가 아니더라도 가상의..
Shapley Additive Explanations (SHAP) Shapley Value Feature의 가능한 모든 조합에서 하나의 Feature에 대한 평균 기여도를 계산한 값을 Shapley Value라고 한다. 가중 평균을 통해 Feature의 기여도를 계산한다. 기여도 계산은 다음과 같다. (모든 Feature를 사용한 모델링의 예측 값) - ( 기여도를 알고 싶은 Feature가 존재하는 Feature들의 조합들 중 한 조합을 사용한 모델링의 예측 값) 수식은 내가 이해하지 못하므로 올리지 않겠다. https://arxiv.org/pdf/1705.07874.pdf 나중에 실력이 생기면 위 논문을 읽어보자 실습 (회귀 모델) !pip install shap from sklearn.ensembl..
Partial Dependence Plots 관심 Feature의 값이 변할때, 모델에 미치는 영향을 시각화한다. 데이터 셋의 모든 row에 관심 Feature 모든 값을 돌면서 하나로 통일하고 예측한다. 그 값들의 평균을 계산한다. from sklearn.inspection import plot_partial_dependence var = 'rm' plt.rcParams['figure.figsize'] = 12, 8 plot_partial_dependence(model, features = [var], X = x_train, kind = 'both') plt.grid() plt.show() 예측할 모델과 관심 Feature 그리고 데이터 셋을 입력해 Partial Dependence Plots를 출력한..