본문 바로가기

ML/ML-Kaggle, 데이콘19

EDA plt.plot() and plt.hist() from matplotlib.pyplot as plt # or from matplotlib import pyplot as plt # 가장 기본적인 선그래프 plt.plot(x,y) plt.show() # 가장 기본적인 히스토그램 plt.hist(x,y) # y가 없는 경우, plt.hist(x) x의 요소들을 카운트한 값을 y에 넣어준다 plt.show() sns.distplot() # 주의 : python 3.7이후 부터 sns.distplot이 sns.histplot이나 sns.displot으로 대체됨 # 더 이상 distplot을 쓰지 않는다. import seaborn as sns # seaborn라이브러리의 막대그래프 그리는 함수 displot() .. 2021. 10. 8.
OneHot 인코딩-OneHotEncoder(), pd.get_dummies() 원핫인코딩은 컴퓨터가 사람의 언어를 이해하지 못할 때 쓴다. 보통 과일 컬럼 안에 사과, 배 , 딸기가 있다 한다면 컴퓨터는 이 것이 뭔소린가 할것이다. 그럴때 컴퓨터도 이해할 수 있게 바꿔주는 것이 인코딩인데 그 중 onehot 인코딩은 컬럼안에 과일의 갯수만큼 컬럼을 만들어 그 컬럼중 자신이 속한 과일에 1을 표시하고 나머지는 0을 표시하는 방법이다. 쉽게 말해 과일 사과 사과 배 딸기 를 사과 배 딸기 1 0 0 1 0 0 0 1 0 0 0 1 이런 식으로 바꿔준다. 또 그러면 의문점이 생긴다. 하나의 컬럼 안에 사과=1, 배=2, 딸기=3로 해주면 안될까?? 이렇게 생긴 컬럼을 머신러닝 알고리즘에 그대로 넣어 데이터를 예측 하라고 지시한다면 컴퓨터가 이들 값의 관계를 예상과 다르게 형성할 가능성이.. 2021. 10. 8.
수치형 데이터 정규화 회귀식을 만들 때, 각 컬럼의 단위가 다르면 큰 문제가 발생할 수 있다. A컬럼이 단위가 1000이고 B컬럼이 0.01단위라면 회귀식이 y=1000*x1 + 0.01*x2 식이 될 수 있는데 이는 x1에 영향이 너무 커진다. 그러므로 데이터의 정규화를 통해 x1과 x2의 단위를 같게 해야 이 문제를 해소시킬 수 있다. 다양한 scaler가 있다. StandardScaler, RobustScaler, MinMaxScaler, Normalizer 등등 그중 Min Max Scailing 기법은 상당히 간단하다. 0~1사이의 값들로 바꿔주는 방법으로 0과1사이에서만 분포하게 할 수 있다. 하지만 이는 이상치에 굉장히 민감하다. 왜냐면 최댓값을 1로 보고 최솟값은 0으로 보는데 데이터의 분포에 맞지 않는 이상치.. 2021. 10. 8.
이상치(Outlier) 일반적인 데이터 패턴과 매우 다른 패턴을 갖는 데이터는 이상치라 여긴다. 이상치(Outlier)를 찾고자 할 때는 boxplot이 매우 유용하다. 각각의 선들이 의미하는 바를 살펴보겠습니다. 10~8 사이의 실선 : 3분위수 + 1.5 * IQR 파란색 박스의 위쪽 실선 : 3분위수 (75%) 파란색 박스의 중앙 실선 : 2분위수 (중앙값) 파란색 박스의 아래 실선 : 1분위수 (25%) 4~6 사이의 실선 : 1분위수 - 1.5 * IQR 파란색 박스의 길이 : 3분위수 - 1분위수 = IQR import seaborn as sns import numpy as np sns.boxplot(data=df['이상치를 볼 컬럼']) # 신기하게도 data=을 넣어주면 위의 그림처럼 나오지만 # 기냥 sns.b.. 2021. 10. 8.
랜덤포레스트(RandomForestRegressor) 앙상블 기법 - 배깅, 부스팅, 랜덤포레스트 등의 기법 중 랜덤포레스트에 대해 알아보자. 랜덤포레스트는 의사결정나무를 여러개를 모아다 합쳐놓은 것이다. 일종의 배깅인데, 각 의사결정나무에 여러개의 샘플 데이터를 추출하여 추론한 후 회귀이면 의사결정나무들의 결과의 평균을 구하고, 분류이면 투표를 통해 최종적으로 값을 구한다. 각 의사결정나무들은 기존 데이터에서 랜덤하게 표본을 추출하고 각자 독립적으로 계산한다. 랜덤포레스트 모듈의 옵션 중에 criterion옵션을 통해 어떤 평가지표를 기준으로 훈련할 것인지 정할 수 있다. 평가 지표 중엔 회귀에 RMSE, MAPE 등이 있고 분류엔 Confusion Matrix정도가 있다. 여기서 RMSE를 인자로 써본다. (보통 RMSE =MSE를 제일 많이 쓰긴 한다.. 2021. 9. 29.
결측값 전처리 결측치 확인 df_name.info() 결측값 전처리 # 방법 1 - NaN이 있는 행이나 열 버리기 # axis=0 : NaN이 있는 행을 버리기, axis=1 : NaN이 있는 열을 버리기 # 기본 default값으로 axis=0으로 되어있다. df_name.dropna(inplace=True) # 방법 2 - 채워넣기 # 2.1 - 0으로 채워넣기 df_name.fillna(0, inplace=True) # 2.2 - 각 열의 평균값으로 채워넣기 df_name.fillna(df_name.mean, inplace=True) # 2.3 - 각 열의 평균값 따로따로 채워넣기 df_name.fillna({'열 이름' : int(df_name['열 이름'].mean())}, inplace=True) # 방법.. 2021. 9. 29.
의사결정나무 (의사결정나무 복습) 의사결정나무란 의사결정 규칙들이 트리 구조로 도식화된 것이다. 일종의 스무고개라고도 할 수 있다. 의사결정나무는 두가지 데이터 유형으로 나뉘는데, 범주형의 데이터인 경우 분류나무(Classification Tree), 연속형 데이터인 경우 회귀나무(Regressiong Tree)로 나뉜다. 보통 범주형 데이터의 경우에 의사결정나무를 사용한다. 회귀모델의 경우 정확도가 낮기 떄문이다. 구성요소 뿌리노드 - 최초로 시작되는 노드(전체 데이터가 포함되어 있다) 부모노드 - 자식노드의 상위 노드 자식노드 - 부모노드에서 분류된 노드 중간노드 - 부모, 자식노드가 있는 노드 최종노드 - 자식 노드가 없는 노드 가지 - 뿌리노드로부터 끝노드까지 연결된 노드들 깊이 - 중간노드들의 수 모형 구축.. 2021. 9. 28.
당뇨병성 망막병 검출(Diabetic Retinopathy Detection) 1.전이학습(transfer learning)을 이용한 안저영상 기반 classification 안저영상 데이터셋을 다운로드하는 사이트: https://www.kaggle.com/c/diabetic-retinopathy-detection 데이터셋의 크기가 82GB이라서 매우 큼. 학습할 때는 데이터셋의 일부만 사용하면 됨. 전이학습을 이용하여 데이터셋의 일부만 사용하더라도 성능이 나올 수 있도록 이런 과제를 부여받았다. 먼저 데이터셋을 다운받을려고 하니깐 82GB다. 내 노트북엔 30GB의 여유밖에 없었고, colab도 들어갈 수가 없으니 다른 어찌할까 하다가 어떤 분의 코드를 보고 이미 재업로드된 7GB의 영상 데이터셋이 있는 것을 확인했다. 또한 이 분의 코드를 공부한다는 관점으로 하나씩 실행해보았다.. 2021. 8. 11.
kaggle에서 colab으로 데이터 가져오기 1. 캐글 계정에서 api token을 다운받는다. - 나의 계정 -> account -> 밑으로 내리다 보면 create New API Token 클릭 2. colab으로 가서 코드를 복사한다. !pip install kaggle from google.colab import files files.upload() 3. choose files에 들어가서 아까 받았던 kaggle.json을 업로드 4. 파일이 업로드 되었는지 확인 ls -1ha kaggle.json 5. 파일을 옮겨준다는데,,.. 아직은 잘 모르겠다;; !mkdir -p ~/.kaggle !cp kaggle.json ~/.kaggle/ # Permission Warning 이 일어나지 않도록 !chmod 600 ~/.kaggle/kaggle.. 2021. 8. 11.