데이터 사이언스(38)
-
설명가능한 머신러닝 (IML)
보통 intrinsic(model-specific)한 IML 방법은 그 자체가 예측 및 설명 모두를 위해 직접적으로 사용되는 경우는 드물며, 그 대신 신경망과 같이 복잡성이 높은 머신러닝 모델을 예측을 위해 먼저 사용한 뒤, 여기에 post-hoc(model-agnostic)한 IML 방법을 부가적으로 적용하는 방식이 많이 채택됨. 또, post-hoc한 IML 방법들 중 global한 것보다는 local에 가까운 방법들이 더 많이 보고되었는데, 이는 복잡성이 높은 머신러닝 모델에 대한 효과적인 설명을 위해 국소적으로나마 그럴싸한 설명을 제시할 수 있도록 하는 데 집중한 결과로 볼 수 있음 (참고 : https://www.cognex.com/ko-kr/blogs/deep-learning/research/..
2023.03.01 -
Optuna 파라미터 튜닝
import optuna from optuna.samplers import TPESampler def objective(trial): param = { "random_state":42, 'learning_rate' : trial.suggest_loguniform('learning_rate', 0.01, 0.2), 'bagging_fraction' :trial.suggest_float('bagging_fraction', 0.0, 1.0), "n_estimators":trial.suggest_int("n_estimators", 1, 1000), "max_depth":trial.suggest_int("max_depth", 1, 16), "num_leaves":trial.suggest_int("num_leave..
2021.12.13 -
class balanced weight (Cost-sensitive learning)
Cost sensitive learning은 데이터 자체를 생성하진 않는다. 다만 머신러닝을 학습할 때 소수의 클래스에 대한 cost값에 가중치를 더 많이 주어 균형 잡힌 학습이 가능하게 하는 방법이다. 이것저것 다 사용해본 결과 어떤 때는 Cost-sensitvie learning이 더 효과가 좋았고, 어떨 때는 알고리즘을 이용한 오버 샘플링이 좋았다. 둘 다 사용해보고 상황에 맞는 결정을 해야 할 듯하다. 아래와 같이 랜덤 포레스트를 실행해서 가중치를 준 것과 안 준 것을 비교해보자. 크지는 않지만 가중치를 주었을 때 정확도가 더 높다! 랜덤 포레스트도 뿐만 아니라 xgboost에서는 scale_pos_weight 나 weight 같은 파라미터로 지정해 줄 수 있다.
2021.12.13 -
중복 데이터 확인
print(set(x['주구매상품'].unique()) - set(validation['주구매상품'].unique())) print(set(validation['주구매상품'].unique()) - set(x['주구매상품'].unique())) * set을 통해 확인 가능
2021.12.04 -
Anomaly detection (IQR을 통한 이상치 처리)
특정 변수의 데이터 전체를 이상치 처리 하는 것 보다, 특정 레이블에 해당 될 때의 데이터를 삭제하는게 효과가 존재 def remove_outlier_test(d_cp,column): o_df = d_cp[column] quan_25 = np.percentile(o_df.values,25) quan_75 = np.percentile(o_df.values,75) iqr = quan_75 - quan_25 iqr = iqr * 1.5 lowest = quan_25 - iqr highest = quan_75 + iqr outlier_index = o_df[(o_df highest)].index d_cp = d_cp.drop(outlier_index, axis=0) return d_cp a1_out = remo..
2021.12.01 -
Min-Max Scaler
예시) from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df['song_count'] = scaler.fit_transform(df[['song_count']]) df.head() 숫자가 너무 불균형 할 시에 min-max scaler를 통해 값을 0~1 사이로 치환한 분포 확인 가능
2021.07.08