본문 바로가기

ML36

DataFrame 열 또는 행별 최빈값 확인 - df.mode() df1=df.mode() print(df1) # 최빈값 = 가장 자주 나오는 값 # 인자로는 # axis = 0('index')과 1('columns'), 0은 열이고 1은 행에서 기본값은 0이다. # numeric_only = bool, 기본값은 False로 True인 경우 숫자열이나 행에만 적용됨. # dropna : bool, 기본값은 True. NaN/NaT를 고려하지 않는다. # ~.mode(axis=0, numeric_only=False, dropna=True) 2021. 10. 9.
GBM(Gradient Boosting Model) GBM은 Gradient Boosting Model로 머신러닝 앙상블 기법 중 하나인 부스팅에서 나온 것이다. 다른 배깅과 랜덤포레스트 같은 경우, 모든 데이터가 순차적이지 않고 병렬적으로 뽑아서 예측하는 것에 반해 부스팅은 순차적으로 모델이 데이터에서 학습한 결과를 가지고 다른 모델이 input으로 쓴다. 즉 모델의 output을 다른 모델이 input으로 받아 진행하는 앙상블 기법이다. 보통 회귀문제에선 loss function은 MSE로 사용한다. MSE로 나온 잔차(residual)를 이용해서 다음 모델을 순차적으로 만들어 나간다는 뜻이다. 즉 negative gradient를 이용해서 다음 모델을 만든다는 것을 의미한다. 그렇기 때문에 gradient로 부스팅을 해서 Gradient Boosti.. 2021. 10. 8.
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.
random_state=1 scikit learn에서 사용하는 random_state인자는 수행시마다 동일한 결과를 얻기 위해 사용한다. 즉 seed를 설정한 것이다. 보통 랜덤으로 먼가를 추출하거나 split 할 때 설정하는데 이렇게 해놓으면 random_state 번호가 같은 것끼리는 그대로 사용이 가능하다. 즉 기냥 고유 번호를 설정해준 것과 같은 의미 2021. 9. 29.
랜덤포레스트(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.