ml10 Hold-out, 교차검증(K-Flod), Stratified K-fold 먼저 Hold out에 대해 알아보자. Hold-out 전체(train) 데이터를 훈련과 검증 데이터로 나뉘는 것을 말한다.(여기서 전체 데이터셋은 train과 test 데이터 중 train만 말함. - 즉 데이터가 train=(훈련, 검증), test=(테스트)로 나뉜다는 뜻) 기본적으로 8:2, 7:3으로 나눠 훈련(train)데이터는 모델을 훈련 시킬 때, 검증(valid) 데이터는 모델이 얼마나 잘 훈련되었는지 확인할 때 쓴다. 이렇게 하면 모델의 예측성능을 측정할 수 있다.이 모델이 과대적합이 일어났는지 제대로 훈련되고 좋은 성과를 냈는지 test 데이터를 넣기 전에 알 수 있기 때문에 나뉜다. 하지만 이 Hold-out방식은 데이터 자원을 낭비한다는 문제가 있다. 왜냐면 검증으로 쓸 데이터는 .. 2021. 12. 9. 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. 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. 결측값 전처리 결측치 확인 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. inplace=True Pandas dataframe에서 inplace 인자가 있다. 보통 default값으로 False가 들어있고 생략되어 있는 경우가 많다. 이런 경우 새로운 df 변수에다가 이 수정된 df을 넣어줘야지 수정된 df의 정보를 쓸 수가 있다. 하지만 굳이 이렇게 새로운 변수말고 기존 변수에다가 수정된 변수를 쓰는 방법이 없을까? 경우는 두가지가 있다. 1. origin_df=origin_df.drop('컬럼명', axis=1) #axis=1은 열을 뜻함. 2. origin_df.drop('컬럼명', axis=1,inplace=True) 첫번쨰는 기냥 새로운 변수대신 원래 변수를 넣어준것. 두번쨰는 inplace 인자를 True로 바꿔주는 방법이다. 이러면 기존 df에 수정된 것이 다시 적용된 것을 볼 수 있다. 2021. 9. 29. 이전 1 2 다음