목록전체 글 (413)
오답노트
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를 출력한..

Permutation Feature Importance SVM 과 KNN 같은 알고리즘은 Feature Importance를 알 방법이 없다. 하지만 Permutation Feature Importance를 활용하면 알고리즘의 상관없이 변수 중요도를 파악할 수 있다. Feature 하나의 데이터를 무작위로 섞고 예측했을 때, model의 Score가 섞기 전과 섞은 후 얼마나 감소되는지 계산하는 방식이다. 특정 Feature에 대해서, 여러 번 시도해서 나온 Score의 평균 계산하여 그것을 원래 model 의 Score와 빼 변수 중요도를 판별하는 방법이다. 하지만 다중 공성성이 있는 변수가 존재할 때, 관련된 변수는 그대로 존재하므로 Score가 줄어들지 않을 수 있다. from sklearn.ins..

모델에 대한 설명 모델을 통해 예측하고 예측한 결과를 통해 비즈니스 문제를 해결한다. 하지만 인공지능이 예측한 결과라는 근거는 아무런 설득이 되지 않는다. 그 인공지능이 예측을 할 때, 어떤 변수를 고려하여 예측했는지가 중요하다. 이 모델들은 설명하기 쉬울 수록 White Box Model, 설명하기 어려울수록 Black Box Model 이라고 한다. 경향을 봤을 땐 White Box Model에 가까울 수록 성능이 낮다고 볼 수 있다. Tree 기반 모델의 변수 중요도 Tree 기반의 모델들은 feature importance라는 변수에 해당 모델의 변수 중요도가 입력되어 있다. 이 feature importance는 어느 한 노드에서 정하는 것이 아닌 모델 전체에 노드에서 봤을 때, 평균적으로 가장..

미니프로젝트 2차 미니프로젝트 2차는 데이터의 전처리에서 모델링까지 개인 실습후 동일한 내용을 가지고 캐글에서 자신의 모델에 대한 성능을 평가하여 등수를 매기는 경쟁 구도 였다. 사실 전부터 캐글이 정확히 어떻게 하는 곳인지 몰랐는데. 이렇게 미니프로젝트로 기회가 생겨서 너무 좋았다. 그런데 실제 데이터는 결측치가 너무 많았다. 그러나 이 결측치들의 행을 없애면 안됐고, 열을 날리면 모델링의 학습을 다시 해야 했는데, 이 때 분반의 어떤 구원자께서 knnimputer 라는 것을 알려주셨고, 덕분에 나는 좋은 성과를 거두게 되었다. 그리고 이번 팀 프로젝트는 미세먼지 농도 예측이였는데, 처음으로 시계열 데이터를 모델링하는 것이라 기대됐다. 교안에서는 선형회귀나 앙상블을 사용하고 나머지는 자유롭게 알고리즘을..

머신러닝 드디어 내가 제일 관심있던 머신러닝을 배우게 되었다! 사실 배우기전에 조금 걱정되었던 부분은 수학이였다. 알고리즘은 수학적으로 설명 가능한 것들을 프로그램으로 만드는 것인데, 강의를 들어보니, 강사님 께서는 최대한 수학적인 내용을 배제하고 그림으로 설명하려고 노력해주셨다. 그리고 왜 파이썬으로 인공지능 분야를 해야하는지도 코딩을 하면서 깨닫게 되었다. 아직 많은 라이브러리를 사용해본것은 아니지만, 내 예상보다 더 잘 되어 있다. 선언하고 객체에 함수를 호출하고 그러면 예측하고 심지어 모델을 평가할 때도 수학적으로 좀 귀찮은 과정을 거쳐야 하는데, 전부 함수로 이미 구현되어 있다. 강의는 마치 내가 머신런닝에 재능이 있는거 아닐까? 라는 착각할 정도로 이해를 너무 잘되게 설명해주셨다. 최대한 그림..