분석 Python/Scikit Learn (싸이킷런)(22)
-
[ Python ] class weight 쉽게 구하는 법
도움이 되셨다면, 광고 한번만 눌러주세요. 블로그 관리에 큰 힘이 됩니다 ^^ 기존에 내가 하던 방식은 일일히 계산을 하였지만, 역시 찾아보면 다 있는 것 같다. from sklearn.utils.class_weight import compute_class_weight label = [0] * 100 + [1] * 50 + [2] * 5 compute_class_weight(class_weight = "balanced" , classes=np.unique(label), y = label) 보통 이걸 쓰는 이유는 class 의 imbalance할 때 class에 따른 가중치를 부여하고 싶을 때 사용한다. from sklearn.linear_model import LogisticRegression clf =..
2019.11.24 -
[ Python ] Cross Validation 병렬로 돌리고 BoxPlot 시각화
(상황) 여러 가지 테이블들이 있고 각각을 GBM으로 모델링을 하고 CrossValidation을 하고 나서 결과값을 box plot으로 시각화하고 싶다. Result라는 dictionary에 총 8개의 방법론을 사용해서 Imputation 된 값들이 들어가 있다. 이것들을 모델은 Gradient Boosting Machine 이용하고 CrossValidation을 진행하고 Boxplot을 그릴 것다. 시간이 오래 걸릴 것 같아서 joblib을 사용하여 Parallel 하게 돌리도록 했다. 모델링 ㄱㄱ! from joblib import Parallel, delayed from sklearn.model_selection import KFold from sklearn.ensemble import Gradi..
2019.11.07 -
[ Python ] scikitplot 다양한 metric plot 제공
분석을 하다 보면 여러 Metric Plot을 그려야 하는 경우가 많다. 그래서 R에서는 제공하는게 많지만, 은근히 파이썬에서는 사람이 그려야 하는 게 많았다. 이번에는 ScikitPlot 라는 패키지를 소개하려고 한다. 여기서는 여러 가지 Plot을 제시해준다. 나중에 쓸 수도 있으니 간단한 사용법을 미리 정리! ## Multiclass ROC CURVE Confusion Matrx Plot silhouette precision_recall ## Binary lift_curve cumulative_gain ks_statistic calibration_curve ## Kmeans elbow curve (optimal cluster) ## PCA pca component variance import mat..
2019.10.19 -
[ Python ]sklearn Pipeline으로 전처리하고 dict에 저장 후 재사용
내가 모델링을 할 때 다음과 같은 실수를 한 적이 있다. 예를 들어 어떤 데이터를 열심히 전처리를 하고 나서, 모델링을 한다고 했을 때, 보통 모델만 저장하고 전 처리할 때 값을 저장을 안 한 경우가 있다. 그래서 다른 새로운 데이터가 들어왔을 때 다시 전처리 함수를 적용하는 경우가 있는데, 이러면 train과 test로 학습시킨 게 어긋나기 때문에 문제가 생긴다. 그리고 만약 어떤 칼럼에서 특정 값이 train에는 없는데, test에만 있어도 문제가 발생할 것이다. 하지만 이때 test에 있는 것을 가져와야 하는지... 어차피 다 0으로 처리되니까 상관없을 것 같기도 하지만 고민이 되는 사항이다. 아무튼 이번 포스팅은 전처리를 하고 나서 저장해서 어떻게 쓸 수 있을지에 대해 고민해본 것을 써보려고 한다..
2019.08.06 -
sklearn Pipeline을 이용해 다양한 Regression모델 모델링하기
이번에는 여러 가지 Regression 모델을 비교하는 모델을 코드를 만들어봤다. Pipeline을 쓸 기회가 없어서 잘 몰랐는데, 참 편리한 것 같다! from sklearn.linear_model import LinearRegression, Ridge, Lasso, ElasticNet from sklearn.linear_model import LassoCV , ElasticNetCV , RidgeCV from sklearn.preprocessing import PolynomialFeatures from sklearn.decomposition import PCA from sklearn.metrics import mean_squared_error as mse from sklearn.metrics impo..
2019.06.15 -
sklearn Pipeline을 이용해 다양한 Classification모델들 모델링하기
sklearn을 사용해서 sklearn에서 제공하는 다양한 분류 모델들을 비교하는 코드를 만들려고 한다. 원래는 한 Pipeline에 다 하려고 했는데, 먼가 자꾸 꼬여서 그냥 여러 개를 만드는 방향으로 바꿨다. from sklearn.model_selection import GridSearchCV from sklearn.pipeline import Pipeline , make_pipeline from sklearn.preprocessing import StandardScaler ,OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.multiclass import OneVsRestClassifier from sklearn.im..
2019.06.15 -
Sklearn SVM + OneVsRestClassifer Gridsearch
SVM Pipe Line & Grid Search & N-fold sklearn에서 poepline을 이용하면 쉽게 모델링과 GridSearch가 가능하다. 하지만 OneVsRestClassifer를 추가하려니 다음과 같은 문제가 있어서, 이것을 해결해서 공유한다. OneVsOneClassifier 도 가능할 것이다. svm = Pipeline([('scl', StandardScaler()) , ("clf", SVC(random_state=1 , probability = True))]) pipe_svc = Pipeline([('ova', OneVsRestClassifier(svm))]) cv = ShuffleSplit(n_splits=5, test_size=0.3, random_state=0) param..
2019.06.15 -
[ Python ] Scikit-Learn, Numeric 표준화 / Category Onehot 하는 Pipeline 및 모델링하는 코드
numeric_features = ['age', 'fare'] numeric_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())]) ## category 있는 경우 categorical_features = ['embarked', 'sex', 'pclass'] categorical_transformer = Pipeline(steps=[ ('imputer', SimpleImputer(strategy='constant', fill_value='missing')), ('onehot', OneHotEncoder(handle_unknown='ignore'))]) preproce..
2019.06.15 -
Lasso coordinate Descent 방식으로 최적의 Coef 구하기
전제를 두고 한다. lambda 는 lassocv를 이용해서 지정한다. tolerance 를 줘서 loop를 빠져나가게 한다. x와 y 는 임의로 줬다고 하자 그다음에 soft-thresholding에 다른 모습을 이용해서 coordinate Descent 하는 것을 보이겠다. 다음 과 같이 정리할 수 있다. 구체적인 식은 나중에 잘 써서 올리겠다. 결국 오른쪽의 하단의 식을 계속 업데이트 해나가면서, 점점 최적화를 진행하면 된다. np.random.seed(19510) reg = LassoCV(cv=5, random_state=0).fit(train_x , train_y ) best_alpha = reg.alpha_ x_corr = pd.DataFrame(train_x).corr().values pri..
2019.05.12 -
Ridge, Lasso, ElasticNet / train, test, coef 값 내뱉는 multiprocessing 함수 만들기
피드백은 항상 좋아합니다. https://github.com/sungreong/TIL/blob/master/Machine_Learning/Ridge%20%26%20Lasso%20%26%20Elastic%20Multiprocessing.ipynb 숙제로 제출해야 하는 게 있어서 만들어 봤습니다. 기본적으로 loop로 해야 하는 구조여서 적어도 모델 만들어지는 것은 multiprocessing으로 하려고 했는데 오히려 느리게 됐다는... 3가지 버전을 보여주려고 합니다. 1. Loop , 2, 잘못된 버전 3. 잘된 버전 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression, Rid..
2019.05.06