분석 Python/Data Preprocessing(22)
-
[머신러닝][전처리] 변수 이산화(Discretization) 방법
이산화(Discretization)란 이산화에서는 전체 변수 값 범위에 걸쳐 있는 연속 간격 모음을 생성하여 연속 변수를 이산 기능으로 변환합니다. 이러한 불연속 값은 범주형 데이터로 처리됩니다. 이산화의 첼린지는 연속된 값이 정렬될 간격을 정의하는 임계값 또는 한계를 식별하는 것이다. 이를 위해 우리가 사용할 수 있는 다양한 이산화 방법이 있는데, 각각 장단점이 있다. 필요한 이유 의사 결정 트리(decision treeo) 및 Naive Bayes와 같은 여러 회귀 및 분류 모델은 이산 값에서 더 나은 성능을 보입니다. 의사 결정 트리는 속성의 이산적 분할(discrete partitions)에 기초하여 결정을 내린다. 의사 결정 트리는 이상적인 절단점을 결정하기 위해 훈련하는 동안 모든 featur..
2022.07.09 -
[Survey] Feature Engineering in AutoML 리뷰
AutoML에서 자동 피처 엔지니어링에 대해서 관심이 많다. 보통 우리가 딥러닝을 쓰는 것도 사람들이 알 수 없는 패턴을 딥러닝이 학습(Representation Learning)을 기대하는 것인데, 이것이 현재는 비정형 데이터에서는 많이 사용하고 있으나, 여전히 정형 데이터에는 사람의 손이 타는 것 같다. 그래서 보통 어떤 알고리즘에서는 이미지를 통해서 전처리 단계를 비정형데이터로 만드는 방법이 있는가 하면, 아니면 먼가 복잡하게 내부적으로 처리하게 해서 자동으로 처리하는 경우를 본 것 같다. 여기서는 그러한 방법들 말고, 그냥 정형 데이터가 있다고 했을 때, 처리하는 방법 중에서 PCA를 활용한 AutoML에 대한 자료가 있어서 살펴본다. 아시다시피 정형 데이터는 아주 크게 보면, 연속형 변수와 범주..
2020.11.07 -
Target Encoding을 사용하여 범주형 변수 표현하기
좋은 자료가 있어서 일단 공유! brendanhasz.github.io/2019/03/04/target-encoding Representing Categorical Data with Target Encoding Representing categorical variables with high cardinality using target encoding, and mitigating overfitting often seen with target encoding by using cross-fold and leave-one-out schemes. brendanhasz.github.io https://zzsza.github.io/data/2018/09/08/feature-engineering/ Advanced Fe..
2020.09.01 -
sklearn ColumnsTransformer 및 변수별로 전처리 적용하는 예시
광고 한 번씩 눌러주세요! 블로그 운영에 큰 힘이 됩니다 :) 예시 3개를 소개함 변수 그룹별로 나눠서 전처리 해보기 Pipeline을 내부적으로 만들어서 해보기 Custom Class를 이용해서 해보기 변수 그룹별로 나눠서 전처리 해보기 from sklearn.compose import ColumnTransformer from sklearn.pipeline import FeatureUnion, Pipeline num_var1 = num_var[5:] num_var2 = num_var[:5] print(num_var1, num_var2) pipe = ColumnTransformer(transformers=[ ("num1", MinMaxScaler(), num_var1), ("num2", StandardS..
2020.05.02 -
[변수 선택] Boruta 와 Lightgbm(rf)을 사용
광고 한 번씩 눌러주세요! 블로그 운영에 큰 힘이 됩니다 :) Boruta는 RandomForest를 사용하여 변수 선택을 하는 함수이다. 하지만 파이썬에서 흔히 알고 있는 sklearn에서는 범주형에 대한 처리를 해주지 않는다. 그래서 Lightgbm은 범주형 변수를 처리할 수 있고 boosting_type을 rf로 하면 가능하다고 생각하여 시작하였다. 하지만 지금 현재 Python 버전의 Boruta는 sklearn에 굉장히 특화돼서 만들어졌다. 그래서 실제로 연속형 변수만 있으면 sklearn에 있는 패키지를 사용하면 되지만, 만약 범주형 변수를 쓴다고 하면 별로 안 좋을 것 같다. 일단 간략하게 Boruta의 큰 아이디어는 2가지다. The first idea: shadow features 일단 ..
2020.04.24 -
Data Preprocessing 잡생각
데이터 분석시 전처리에 대해서 어떻게 하는지 좋을지가 헷갈린다. 흔히 하는 말로 Garbage in Garbage out 라고 해서 참 중요하다고 한다. 하지만 딥러닝에서는 대충 처리하면 안에서 data representation까지 해준다라는 느낌이 강한 것 같다. 위의 그림처럼 대충 크게 이상하지 않은 것을 넣으면, 알아서 학습하면서 좋은 feature를 만들어주는 것인지... 하지만 대충 넣으면 train와 test 간에 overfitting 문제도 발생시키는 것 같다. 일단 주로 딥러닝 기반으로 필자는 자주 하기 때문에 딥러닝 기반에서 어떻게 전처리를 하면 좋을지를 중점적으로 잡생각들을 써보려고 한다. tree 기반 알고리즘 분기점을 나누는 방식이기 때문에 정규화가 딱히 필요없음. CART, Ra..
2020.04.19 -
텐서플로우에서 범주형 데이터 다루기
광고 한 번씩 눌러주세요! 블로그 운영에 큰 힘이 됩니다 :) 보통 딥러닝 프레임워크로 모델을 만드는 경우, 데이터를 다 준비하고 넣는 경우가 가장 쉽다. 그래서 범주형 데이터를 처리하게 되면, 보통 원핫 인코딩을 통해 sparse data를 만든다. 이게 보통 적은 데이터에서는 전혀 문제가 되지 않지만, 만약 데이터가 커지면 커질수록 모델 분석보다, 전처리하는데 많은 시간이 소요하게 된다. 뿐만 아니라 sparse data를 만들게 되면, 그만큼 메모리도 많이 잡아먹기 때문에, 범주에 따른 메모리 변동량이 커지게 된다. data Preprocessing time memory issue 그래서 필자는 이러한 부분에 대해서 해소해보고자 텐서플로우 그래프에서 처리하는 방법으로 해봤다. 아무래도 텐서플로우에서..
2020.04.05 -
[변수 선택] Chi-Square 독립성 검정으로 범주형 변수 선택하기
광고 한번만 눌러주세요 ㅎㅎ 블로그 운영에 큰 힘이 됩니다. 실제 분석 시에 정형 데이터의 범주형 데이터 처리가 골치가 아픕니다. 범주형 데이터는 보통 one-hot을 통해, 데이터를 굉장히 희소하게(sparse)하게 만들기 때문입니다. 보통 이렇게 차원이 커지게 되면, 차원의 저주에 빠질 수 있으면서, 학습도 굉장히 잘 안됩니다. 그래서 저는 보통 차원이 커질 경우 보통 embedding을 시키거나, 아니면 요즘은 catboost encoder나, target encoder 같은 방법을 써보려고 합니다. 이번에는 좀 더 변수 선택 차원으로 이야기해보고자 Chi-square 독립 검정을 통해 변수 선택을 하는 것을 보게 되어, 해보면서 공유합니다. Chi-Square Test of Independence..
2020.03.28 -
[변수 선택] Python에서 변수 전처리 및 변형 해주는 Xverse 패키지 소개
광고 한번만 눌러주세요 ㅎㅎ 블로그 운영에 큰 힘이 됩니다. Xverse는 X Universe를 줄인 말로, 특징 변환과 특징 선택을 통해 데이터 과학자를 지원하기 위한 기계 학습을 위한 Python 패키지입니다. 일단 필요성에 대해서 말하고자 한다고 합니다. Background 대부분의 데이터 분석가는 80%는 분석 전처리에 쓰고 있다고 한다. Earlier works for this package https://medium.com/@sundarstyles89/weight-of-evidence-and-information-value-using-python-6f05072e83eb Weight of evidence and Information Value using Python Weight of eviden..
2020.03.22 -
[실험] 정형데이터에서 연속형 변수 전처리에 따른 Network 성능 차이는 얼마나 날까?
개인적으로 분석을 하면서, 항상 궁금한 점이 있었다. 과연 전처리에 따른 성능 차이는 얼마나 날까? 개인적으로는 많이 날 것이라고 생각하면서도 기본적으로 Neural Network은 결국 내부에서 알아서 Representation이 된다고 생각하기 때문에 크게 나지 않는다는 2가지 생각이 공존했다. 그래서 개인적으로는 차이가 나는 것을 기대하면서, 더 나은 방법을 찾기 위해서 아주 간단한 실험을 진행했다. 물론 이 실험은 한 데이터셋에서만 실험을 하고, 많은 실험을 하지는 않았을 뿐만 아니라, 각 데이터 변수마다 동일한 처리 기법을 사용해서 정확하지 않을 수 있다. 일단 결론부터 말하자면, 전처리 기법들에 따른 모델 성능은 큰 차이가 나지 없었다. 필자는 동일한 후보들(10가지)를 한 5번 돌려본 것 같..
2020.03.21 -
[변수 선택] sklearn에 있는 mutual_info_classif , mutual_info_regression를 활용하여 변수 선택하기 (feature selection)
sklearn.feature_selection.mutual_info_classif Mutual Information은 두 random variable들이 얼마나 mutual dependence 한 지를 measure 하는 방법을 의미한다. Mutual information - Wikipedia In probability theory and information theory, the mutual information (MI) of two random variables is a measure of the mutual dependence between the two variables. More specifically, it quantifies the "amount of information" (in units..
2020.03.09 -
[변수 선택 및 생성]중요 변수 선택 및 파생 변수 만들기-2
이전 글 https://data-newbie.tistory.com/382 저번 글에서 피드백을 받은 PolynomialFeatures와 추가적인 2가지 변수가 아닌 중요 변수 조합을 시각화하는 그림을 만들어봤다. 대신 polynomial은 곱하기 연산으로만 이루어져서, 나누기라던지, 빼기는 표현이 되지 않지만, 쉽게 쓸 수 있다는 장점이 있어서 좋은 것 같다. import matplotlib.pyplot as plt import numpy as np import pandasa as pd import saeborn as sns from scipy.stats import wasserstein_distance as wd , ks_2samp as ks , energy_distance as ed 일단 중요 변수는..
2020.01.09