분석 Python/Data Preprocessing(22)
-
[변수 선택 및 생성]중요 변수 선택 및 파생 변수 만들기
광고 한번만 눌러주세요 블로그를 운영하는데 있어서 동기부여가 됩니다.:) 모델링하다 보면 변수가 너무 많아서 무엇을 뽑을지 모를 때가 있다. 이럴 때 간단히 할 수 있는 방법은 칼럼 별 분포를 타깃별로 보고 분포가 차이가 얼마나 나는 지 확인 후 선택하는 방법이 있다. 여기서 한 것은 분포간 거리를 재는 divergence 중에서 wasserstein distance를 사용해서 해봤다. 특정 threshold를 부여하여 그것보다 차이가 날 경우 뽑는 방식으로 선택했다. 그리고 분포간 스케일이 다를 수 있기 때문에 min-max 함수를 통해 (-1,1)로 통일하였다. 실제 여기서 좀 문제가 되는 점이라고 할 수 있는 점은 스케일링을 어떻게 하는지에 따라서 distance가 다르게 나왔다. import nu..
2020.01.08 -
[ Python ] Scikit-Learn, 변수 전처리 Pipeline Transformer 만들어보기
광고 한 번만 눌러주세요! 블로그 운영에 큰 힘이 됩니다 (Click my ADs) 파이썬을 하다보면 Scikit-learn에 있는 전처리 코드를 많이 사용하게 된다. 개별적으로 다 처리하거나 퉁쳐서 할 수도 있지만, 이것을 Pipeline을 이용해서 깔끔하게 Pipeline으로 구성할 수 있다! 해당 글에서는 수치형 변수와 범주형 변수를 나눠서 처리하면서 각각 전처리를 다른 방식으로 진행하고 바꾸는 것에 대해서 해본 것을 공유하려고 한다. import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns plt.style.use('ggplot') # load the dataset from sklearn...
2019.12.28 -
[ 변수 처리] 결측치 대체 알고리즘 MissForest Imputation 연습
MissForest로 결측치 대체를 하려고하는 것이 목적이다. 그래서 일단 임의의 데이터를 만들고 진행한다. from missingpy import MissForest import numpy as np import pandas as pd from sklearn.preprocessing import LabelEncoder tr1 = list("ABCD") tr2 = ['pooh', 'rabbit', 'piglet', 'Christopher'] va1 = list("ABCDE") va2 = ['pooh', 'rabbit', 'piglet', 'Christopher', "bird", "coco"] tr1_ = np.random.choice(tr1, 1000 , p=[0.5, 0.1, 0.1, 0.3]) va1..
2019.12.11 -
[변수 처리] 데이터에서 결측치 잘 만들어보기
테스트를 위한 missing data를 만들려고 할 때 수치형 변수는 상관이 없으나 category 변수 같은 경우에는 one hot했을 때도 mssing을 잘 주고 싶어서 시도를 하게 됐다. 지금 해보니 더 쉽게 하는 방법이 있는 것 같은데... 일단 진행을 했으니 공유 No , RAW_Dim = RAW.shape print(No, RAW_Dim) p_miss_vec = p_miss * np.ones((No,1)) Missing = np.zeros((No,RAW_Dim)) for i in range(RAW_Dim): A = np.random.uniform(0., 1., size = [No,]) B = A > p_miss_vec[i] Missing[:,i] = 1.*B missing_RAW = deepc..
2019.09.17 -
[변수 처리] Python에서 범주형 변수(Categorical) 다루기
http://contrib.scikit-learn.org/categorical-encoding/onehot.html One Hot — Category Encoders latest documentation options are ‘error’, ‘return_nan’, ‘value’, and ‘indicator’. The default is ‘value’. Warning: if indicator is used, an extra column will be added in if the transform matrix has unknown categories. This can cause unexpected changes in dimension in some case contrib.scikit-learn.org ##..
2019.09.13 -
[ 변수 처리] 파이썬 결측치 대체 알고리즘 비교 예시
Class로 만들어서 비교해보기 from autoimpute import imputations import impyute as impy import numpy as np from missingpy import MissForest from tqdm import tqdm_notebook n = 30 arr = np.random.uniform(high=6, size=(n, n)) arr[:,0:5] = arr[:,0:5].astype(int) true = arr.copy() arr.ravel()[np.random.choice(arr.size , 100 , replace = False )] = np.nan mask = np.isnan(arr) * 1 class Evaluate : """ X = missing d..
2019.09.10 -
[변수 처리] 011011 같은 값을 multiple label encoding 으로 만들어주기
예를 들어 사과 배 딸기 귤 바나나 1 0 1 1 1 같은 형태가 있을 때 이것을 다음과 같이 쪼개고 싶을 때가 있다. 사과 배 딸기 귤 바나나 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 그럴 때 고민을 하다가 다음과 같이 처리를 해주면 된다! 일단 위치 정보를 찾는다 np.where(train_label.values[0] == 1 )[0] ## array([141, 327, 406, 728]) 지금 141번 327번 406번 728번 쪽에 있다는 것이다. 이걸 하는 방법은 다음과 같이 했다 전체 코드 which = np.where(train_label.values[0] == 1 )[0] mat = np.zeros((4 , 884) ) for idx , row in enume..
2019.07.16 -
[변수 생성] AutoEncoder로 파생변수 만들기 -2 (모델링 파트) Catboost
https://data-newbie.tistory.com/163 AutoEncoder로 파생변수 만들기 데이터 분석을 하다보면, 새로운 파생변수를 만들어야 할 때가 있다. 개인적으로 나도 그러한 부분에 관심이 있어서 여래개로 포스팅을 했는데, 한번 보시면 도움이 될 것 같다. https://data-newbie.tistory.com/.. data-newbie.tistory.com ## 모델링 파트 이전에 AutoEncoder에서 얻은 Code값을 이용해서 모델링을 해봤습니다. 모델은 tree-based model 중에서 그나마 Parameter에 크게 의존하지 않는다는 catboost로 하였습니다. 궁금하신분은 https://data-newbie.tistory.com/131?category=750846 ..
2019.06.02 -
[변수 생성] AutoEncoder로 파생변수 만들기
데이터 분석을 하다보면, 새로운 파생변수를 만들어야 할 때가 있다. 개인적으로 나도 그러한 부분에 관심이 있어서 여래개로 포스팅을 했는데, 한번 보시면 도움이 될 것 같다. https://data-newbie.tistory.com/148?category=749566 https://data-newbie.tistory.com/93?category=749566 https://data-newbie.tistory.com/93?category=749566 그렇다면 결국 도메인이 중요한 것이고 즉 협엽이 잘 될 때 Feature Engineering도 빛을 발하게 되는데, 사실 현실은 그렇지 못하다. 만약 자기 데이터를 가지고 할 경우, 그러한 부분에 대해서 충분히 고려하고, 자주 데이터를 만질 수도 있지만, 만약 ..
2019.06.02 -
[ 변수 생성] pandas groupby 와 merge로 파생변수 넣기
인터넷에 R처럼 파이썬에서 Groupby후 컬럼을 바로 생성하는 게 잘 보이지 않아서 공유합니다. data[['Location','month' , 'Sunshine']].head() 이러한 변수가 있을 때, 해보고 싶은 것은 지역과 월을 이용하여서 평균 온도를 넣고 싶을 때가 있다. 그럴 때 다음과 같이 하면 된다. newdata = data.groupby(['Location','month'], group_keys=False).apply(lambda x: x.Sunshine.mean() ).reset_index() newdata.columns = ["Location", 'month', "Shunshine_mean"] data2 = pd.merge(data, newdata, how='left') 다음과 같..
2019.05.21