Python(212)
-
Scipy에서 제공하는 분포간 거리 함수(Statistical Distance)와 차이점.
우연히 유튜브에서 추천해준 2018 Detecting Anomalies Using Statistical Distances 이 내가 관심이 있는 Anomaly detection과 Statistica Distance라서 듣게 되었고, 좋은 것을 많이 얻어서 공유합니다. 그렇다면 Quantile로 하면 되지 않느냐? 이렇게 간단한 통계량 값만 이용해서는 충분하지 못하다. 그러므로 이런 통계량 값들을 결합해서 사용하거나, 통계적 거리를 사용해야 한다. Statistical Distance Kolmogorov-Smirnov Distance 하지만 약간 기존 family가 아닌 쌍봉 같은 경우가 나오는 경우 KS로 거리를 재게 되면, 다음과 같은 문제가 생긴다. 멀리 떨어져있어도 거의 같은 값으로 표현이 된다. 그..
2019.06.08 -
[변수 생성] 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 -
[ Python ] Python에서도 R처럼 data.table을 사용할 수 있어요.
Python에서 대부분의 데이터를 읽을 때 주로 Pandas를 사용하지만, 작은 데이터를 읽을 때는 상관이 없다. 하지만 최근에 34GB짜리를 읽어보려고 했는데, 시간을 많이 잡아먹어서 스트레스를 너무 많이 받았다. 머 Spark나 이런 걸 사용하면 된다고 하지만, 전처리를 좀 하고 싶었던 게 있었는데, 아직 내가 Spark 같은 것을 잘 사용하지 못해서 결국 Pandas로 하였다. data.table은 알려진 바로는 단일 머신으로 했을 때 가장 빠르게 데이터 핸들링을 할 수 있는 도구다. 이 글에서는 100GB까지 된다고 하니, 잘 사용할 줄 알아야겠다. ## 리눅스 버전 # If you have Python 3.5 pip install https://s3.amazonaws.com/h2o-release..
2019.06.02 -
[Python] Lightgbm Bayesian Optimization
이전에는 catboost였지만, 여기선 Lightgbm을 Bayesian Optimization을 해봤다. 일단 성능은 둘 다 잘 나오는데, 개인적으로 쭉 살펴보면 오히려 lightgbm 알고리즘이 f1 score가 더 잘 나온다. 암튼 둘 다 좋은 알고리즘이니 파리 미터 튜닝을 자주 할 테니 이렇게 베이지안 최적화를 연습해본다. from bayes_opt import BayesianOptimization def learning_rate_005_decay_power_099(current_iter): base_learning_rate = 0.05 lr = base_learning_rate * np.power(.99, current_iter) return lr if lr > 1e-3 else 1e-3 def..
2019.06.01 -
[Python] Catboost Bayesian Optimization
최근에 Tree based 모델을 좀 보고 있는데, Python에서 categorical 변수를 One-hot을 하지 않고 하는 알고리즘은 현재, lightgbm과 catboost인 것 같다. 개인적으로 원핫을 안 좋아해서 인지, xgboost는 별로 하기가 싫다. 물론 tree-based model이라서 다차원으로 갔을 때의 고민이 좀 없겠지만, 현재 데이터중에 날짜 데이터도 있는데.. 이것을 onehot 하면 너무 Sparse하지 않겠는가............... 그래서 나는 여기선 catboost를 parameter tuning을 해보려고 한다. https://data-newbie.tistory.com/131 이전에 간략하게 논문리뷰를 해봤다. CatBoost란? unbiased boosting ..
2019.06.01 -
[ 변수 생성] 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 -
[ Python ] 이미지를 gif로 바꾸는 방법
Python 안에서 사진을 gif로 만들고 싶을 때가 있다. 나도 그 부분에 대해서 하고 싶었지만 알지 못했는데, 오늘 다른 코드를 보다가 방법을 알게되서 공유하려고 한다. os.system('convert -delay 15 -loop 0 {0}/posterior_predictive_map_frame*png {0}/posterior_predictive.gif' .format(logdir)) 이런식으로 특정 dir에서 원하는 것만 posterior_predictive_map_frame*png 같이 조건을 줘서 만들어줄 수 있다. Loop에 간단하게 쓸 수 있는 구조라서 좋은 것 같다. 이만!
2019.05.11 -
Anomaly Detection Using VAE
일단 neural network 기반으로 하는 것이 아닌 일반적인(?) ML로 Anomaly Detection을 해주는 패키지부터 소개해드리겠습니다. 종류는 엄청나게 많습니다. https://pyod.readthedocs.io/en/latest/ Welcome to PyOD documentation! — pyod 0.7.0 documentation [AJHuszarPvdH12]JHM Janssens, Ferenc Huszár, EO Postma, and HJ van den Herik. Stochastic outlier selection. Technical Report, Technical report TiCC TR 2012-001, Tilburg University, Tilburg Center for Co..
2019.05.11 -
Overfit? or dissimilar train and test? (medium 번역 및 생각)
https://towardsdatascience.com/how-dis-similar-are-my-train-and-test-data-56af3923de9b How (dis)similar are my train and test data? Understanding a scenario where your machine learning model can fail towardsdatascience.com 해당 내용이 굉장히 흥미로워서 공유를 하면서 나도 연습을 해보려고 작성했다. 흥미로운 이유는 만약 train으로 함수를 추정하고 test로 평가했을 때 성능이 안좋은 이유는 우리는 보통 overfitting이 발생했다고 한다. 하지만 이 글에서는 그 문제일수도 있지만, 새로운 문제를 제기한다. 실제 train 분..
2019.05.08 -
multiprocessing으로 pandas replace 하면 더 빠를까?
피드백을 좋아합니다! 머신러닝을 할 때 category 형식은 숫자 형식으로 바꿔줘야 한다. 이럴 때 가장 쉬운 방법은 cat.codes를 사용하면 빠르게 바꿀 수 있다. category["nameDest"].cat.codes 하지만 가끔 이렇게 바꾼 코드를 다시 바꿔서 사용해야 할 때가 있다. 저런 식으로 5개짜리 category랑 2722362 같이 엄청나게 많은 숫자가 나오는 것을 알 수 있다. 실제로 여러가지 multiprocessing으로도 테스트를 해보고 그냥 해본 것도 해보니 결론적으로 그냥 한 개씩 하는 것이 내가 했을 때는 빨랐다... 왜 그럴까?.... ㅠㅠㅠ 암튼 다음과 같이 결과물을 공유하려 한다. 버전 1 partition을 나눠서 했을 경우 column 별로 multiproces..
2019.05.08 -
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 -
[변수 생성] 시간 데이터에서 어떤 변수를 새로 만들 수 있을까?
현재 이런 식으로 시간이 관련된 정보가 있다고 하자. 이러한 시간을 다룰 때 나는 아직 경험이 부족해서 막막하게 느껴진다. 머 두시간의 차이를 빼거나 아니면 사람별로 시간을 한개씩 shift(-1) (pandas)를 이용해서 빼서 이동 할 때 시간을 측정해본다던지, 여러가지로 시간을 잘 쓸 수 있을 것 같은데 아직 내공이 부족함을 느낀다. ## 기본적으로 뽑을 수 있는 정보들! * year: 연도 * month: 월 * day: 일 * hour: 시 * minute: 분 * second: 초 * microsecond: 마이크로초(micro seconds, 백만분의 일초) * weekday(): 요일 반환 (0:월, 1:화, 2:수, 3:목, 4:금, 5:토, 6:일) * strftime(): 문자열 반환..
2019.05.06