분석 Python/Scikit Learn (싸이킷런)(22)
-
개선된 OneHotEncoder 알아보기(v1.1 이후)
이번에 scikit-learn에서 버전을 업데이트하면서 OneHotEncoder가 수정이 됐는데, 일반적으로 카테고리 처리하는 데 고민이 되던 부분을 많이 개선해서 올려준 것 같다. 기존에는 하려면, 복잡하게 짜서 해야하지만 이제는 그러지 않아도 돼서 좋은 것 같다 ㅎㅎ https://scikit-learn.org/stable/modules/preprocessing.html#one-hot-encoder-infrequent-categories 6.3. Preprocessing data The sklearn.preprocessing package provides several common utility functions and transformer classes to change raw feature vec..
2022.05.25 -
[TIP / Sklearn ] Custom Estimator (Ex : Combined Regressor)
sklearn을 사용하여 estimator를 만들 때, 참고하기 좋은 자료가 있어서 공유한다.이 자료는 Combined Regreesor라는 Estimator를 쓸 때 만든 자료인 것 같은데, Custom Estimator로 Grid Search도 돌리는 것을 보고 관심이 가게 되서 일단 저장해둔다. custom estimator를 만들어야하는 분이라면 참고하면 좋을 것 같다. Sklearn compatibilityIf we want to achieve full sklearn compatiblity (model selection, pipelines, etc.) and also use sklearn’s onboard testing utilities we have to do some modifications..
2020.10.27 -
[sklearn] TSNE, MDS, SpectralEmbedding Estimator를 Pipeline 에 적용 시키는 방법
파이썬에서 Sklearn Pipeline 같은 경우 여러 개의 조합을 파이프라인을 만들어서 쉽게 돌릴 수가 있다. 그러나 돌릴 수 있는 것들은 그 모듈의 아규먼트 중에서 fit, transform을 가지고 있는 경우만 가능하다. 차원 축소 방법으로 TSNE, MDS, SpectralEmbedding을 적용하고자 했을 때 아쉽게도 Method가 transform이 없어서 적용할 수가 없다. 그래서 Sklearn estimator를 새로 만들어서 돌아갈 수는 있게 만든 것을 공유한다. 아래처럼 BaseEstimator와 TransformerMixin을 상속해주면(?) 가능하다 그리고 transform 에는 fit_transform을 써주면 된다. from sklearn.manifold import ( Loc..
2020.08.23 -
scikit-learn 파이프라인 시각화 기능 사용 및 재사용 (pipeline visualization)
scikit-learn이 0.23이 되면서 가장 와 닿은 것인 pipeline을 시각화해주는 것이었다. 이번 글에서는 파이프라인 시각화하는 것과 실제로 아직 저장하는 것을 제공하지 않지만 재사용할 수 있는 방법에 대해서 고민해봤다. import pandas as pd import numpy as np import seaborn as sns import sklearn from sklearn.model_selection import train_test_split from sklearn.pipeline import make_pipeline from sklearn.preprocessing import OneHotEncoder from sklearn.linear_model import LogisticRegress..
2020.05.15 -
scikit-learn 0.23 이 되면서 변한 점
최근에 scikit-learn이 0.23으로 버전이 업데이트 됐다! 업데이트된 점에 정리해준 글이 있어 공유한다. 1. Python 3.6 or newer only 🐍 python 3.6 이상만 사용 가능하다! 2. Interactive pipeline graphics ⬇ pipeline을 시각화해주는 기능이 생겼다!! 저 시각화해주는 것은 html로 되어있는데 참 좋았다. 3. Poisson and gamma GLMs have arrived 🎉 linear_model.PoissonRegressor and linear_model.GammaRegressor 이 새로 나와서 이제 scipy를 쓸 필요가 없다 4. Calling fit() doesn’t show you everything 🚫 The fit()..
2020.05.15 -
Scikit-learn Custom Pipeline Save & Reload (저장 및 재사용)
필자는 scikit-learn으로 preprocessing custom class들을 만든 후 Pipeline을 활용해 한꺼번에 묶어서 사용하고자 했다. Pipeline으로 구축하게 되면 개인적으로 생각하는 점은 자신의 새로운 class와 더불어서 scikit-learn에 많은 패키지들과 호환돼서 확장성을 가질 수 있을 것이라고 생각했다. 기존에 단순히 Class로 된 것에 대한 아쉬움을 느껴서, 확장하기에는 custom 해야하는 것이 많다. 그래서 Scikit-Learn Pipeline과 호환이 된다면, 더 많은 것을 쉽게 할 수 있을 거라 생각해서, 진행해봤다. 기존에 Pipeline으로만 하는 것은 자주 해서 어려운 부분이 아니였지만, 저장해서 사용하려니 이슈가 생겼고, 해결한 방법에 대해서 관련된..
2020.02.28 -
sklearn을 활용한 Custom Outlier Transformer 만들어보기
광고 한 번씩 눌러주세요. 블로그 운영에 큰 힘이 됩니다 :) 특정 모델을 열심히 돌려보는데, Train data은 AUC가 100%를 찍지만, Test Data는 77%를 찍고 더 이상의 성능 향상이 되지 않았다. 이러한 점을 해결하기 위해서Weight으 정규화를 하던지, 전처리 방식을 바꿔봤지만, 동일한 성능이 계속 나왔다. 그래서 남은 방법은 머 많이 있겠지만, 그중에서 Outlier 부분을 고려해보기로 하였다. 하지만 실제로 적용하였지만, 오히려 더 overfitting을 시키는 것 같다 ㅎㅎㅎ 그래도 이왕 Outlier Transformer를 만들었으니, 공개함. Outlier 체크하는 부분은 일반적으로 통계에서 사용하는 IQR 방식을 적용하기로 하였다. IQR이란 Quantile(0.75) -..
2020.02.24 -
[ Python ] sklearn_pandas 로 정형데이터 전처리하기(Preprocessing)
광고 한 번만 눌러주세요 블로그 운영을 하는 데 있어서 큰 힘이 됩니다. : ) 파이썬으로 분석을 하다 보면 sklearn과 pandas는 정형 데이터에서 자주 사용하는 패키지일 것이다. 정형 데이터에서 보통 범주형 데이터와 수치형 변수를 나눠서 전처리를 할 때 2개를 같이 쓰게 된다. 하지만 각각의 변수별로 처리를 하게 된다면 보통 다음과 같이 진행할 것이다. from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline from sklearn.impute import SimpleImputer from sklearn.preprocessing import StandardScaler, OneHotEncoder imp =..
2020.01.19 -
LabelEncoder new class 대처하기
labelencoder를 사용하다 보면, new class에 대체하는 방법이 필요하다. 추가적인 클래스로 학습하기 어려운 이유는 뉴럴 네트워크 아키텍처를 학습시킬 때 추가 클래스 없을 때의 인코딩 값이 변하기 때문이다. 그러므로 여기서 대처 방법은 새로운 클래스 같은 경우 적은 클래스일 수 있으니 결측 클래스로 넣는 방법으로 진행한다. (만약 많다면, 다시 학습을 해야 할 필요성이 있을 것이다.) from sklearn.preprocessing import LabelEncoder import numpy as np le = LabelEncoder() a = ["paris", "paris", "tokyo", "amsterdam"] + [np.nan] le.fit(a) le.classes_ 여기에 새로운 클래..
2020.01.04 -
[ Python ] Scikit-Learn Pipeline + RandomizedSearchCV + shap,eli5
광고 한 번만 눌러주세요! 블로그 운영에 큰 힘이 됩니다 ( Click my ADs! ) 이번 글에서는 전체 모델링을 하고 나서 모델 해석을 위해 eli5 , shap을 사용하려고 한다. 핵심 포인트는 Pipeline과 Shap , Eli5를 보시면 될 것 같다. 모델 해석으로는 lime, shap, eli5가 있는데, 다 좋지만 개인적으로 shap가 선호하므로, 좀 더 잘 알기 위해서 추후에 정리해보려고 한다. import numpy as np import pandas as pd import matplotlib.pyplot as plt import eli5 import shap import seaborn as sns plt.style.use('ggplot') # load the dataset from ..
2019.12.28 -
[ Python ] scikit-learn RandomTreesEmbedding
이것도 우연히 다른거 찾다가... 일단 임베딩 관련해서 찾다보니 다음과 같이 나왔다. 현재 아래있는 Manifold Learning은 numerical multidimensional matrix에서 하는 방법론들인 것 같다.(아닐수도 있다...) 일단 저건 그랬고 이번에는 그것보다는 다른 걸 찾아사 말하고자 한다. 이번에 찾은 것은 high dimensional sparse representation으로 표현을 하는데, 음 이것을 소개하는 이유는 다음과 같다. ensemble tree 모델을 이용하다보니, one hot encoding 모아 놓은 것에 대해서 sparse matrix를 만들어준다. 즉 이것을 사용하면 결측치가 들어있는 데이터에 대해서 유익한 정보로 sparse한 dimensional ma..
2019.12.21 -
[ Python ] scikit-learn feature selection Tool
도움이 되셨다면, 광고 한번만 눌러주세요. 블로그 관리에 큰 힘이 됩니다. https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html sklearn.feature_selection.SelectFromModel — scikit-learn 0.22 documentation scikit-learn.org 우연히 다른 걸 찾아보다가 알게 되었다. 원래는 threshold를 자동으로 찾아주는 것이 있나 싶어서 찾다가 더 오히려 알고 싶었던 것이 나왔다. 보통 만약에 scikit-learn 패키지 자체를 이용해서 하려면 transform을 사용해서 축약된 feature를 가져오면 되고, 만약 다른 것에..
2019.12.21