[AIFFEL] 22.Jan.18, Exploration_House_Price_Prediction

Deok Jong Moon·2022년 1월 18일
0
post-thumbnail

오늘의 학습 리스트

  • 1N(ytypr)2{\sqrt{ {1 \over N} \sum{(yt - y{pr})}^2}}
    :그냥 markdwon용으로 써지는지 체험해봤다.

  • 결측치(missing data) 만들어 보기

    • test_matrix = np.array([[1,2,3], [4, np.nan, 5], [5, np.nan, np.nan]]) missingno.matrix(test_matrix) 하니 오류가 뜬다.
    • 보니까 np.nan 으로 nan 값이 만들어지긴 한다.
    • 근데 missingno.matrix() 메소드가 numpy.ndarray' object has no attribute 'notnull'라며 오류를 낸다..
  • 판다스 인덱싱이 없다면 결측치를 찾기 위해 for loop을 해야 한다.(단편적인 판다스 데이터프레임의 편리성 의미)

  • np.log1p()의 리턴값은 log(1+x)란다.

    • 왜 굳이 log(x)가 아니라 log(1+x)인지 찾아봤더니

      method returns log(1+number), computed in a way that is accurate even when the value of number is close to zero.란다

    • 그리고 np.log1p()한 값을 다시 되돌리는 건 np.exp1m()이란다.
    • 약간 헷갈리지만, exp(x)하고 -1을 한다.
    • 이유는 수식적으로 생각해보면 된다.
    • 뭐가 됐건, log된 걸 다시 exp하면 log 하기 전 값이 고대로 돌아 온다.
    • 그리고 그건 x + 1이었으니 그 상태에서 -1을 한다는 것!
  • sns.kdeplot(data=)은 보니까 로 data 파라미터 하나만 줘도 되나 보다

    • 의미를 생각하면 히스토그램과 비슷한 것이므로 한 컬럼만 있어도 될 듯하다.
  • 로그 변환의 성질 이해

    • 0~1 사이의 작은 다수의 x는 그 variance를 좀 더 넓게 해주고
    • 1보다 큰 소수의 수는 좀 더 그 variance를 줄여준다.
    • 결과적으로 정규 분포와 비슷한 모양이 되게 된다.
  • 이미지, 영상, 음성 등의 비정형 데이터의 분류는 딥러닝이 뛰어난 성능을 보이고 있지만, 대부분의 정형 데이터 분류 시에는 앙상블이 뛰어난 성능을 보이고 있다...!

  • 블렌딩 등을 이용하여 성능을 높여가면 정확도는 높아지나, 해석이 어려워진다.
    : 과정(즉, 해석)보다 정확도(결과)가 중요한 의료 분야, competition에서는 이런 게 많이 쓰인단다.

  • 앙상블(ensemble) 기법은 두 가지로 나뉠 수 있단다.

    • 데이터셋 1개에 여러 알고리즘 사용
    • 데이터셋 여럿으로 분할하고 하나의 알고리즘 사용
  • cross_valdiation을 이용한 간단한 모델들의 성능 평가를 위한 코드

    • KFold()가 사용됐고,
    • cross_val_score()가 사용됐는데,
    • 구조 및 의미를 살펴보자
      def get_cv_score(models):
        kfold = KFold(n_splits=5).get_n_splits(x.values)
        for m in models:
            CV_score = np.mean(cross_val_score(m['model'], X=x.values, y=y, cv=kfold))
            print(f"Model: {m['name']}, CV score:{CV_score:.4f}")```
    • 의미들을 찾아보니까 더 헷갈린다...
    • 다시 보니 좀 알겠다. cross_val_score는 자체적으로 모델, 훈련데이터, 타겟데이터, 그리고 cv라는 파라미터를 갖는데
    • cv가 정수면 알아서 나눠주는 것 같고
    • KFold() 면 KFold() 객체 자체로 들어가나 보다
    • 근데 이 코드에서 kfold는 사실 int이다.
  • K-Fold-Cross-Validation에 대한 개념을 좀 잡고 가는 게 좋겠다.

    • 자꾸 헷갈린다..
    • 결과적으로 트레인셋을 K개로 나누고
    • 선택된 모델에서
    • 각각을 validation set으로 놓으면서 학습 및 예측, 평가를 진행해본다
    • 그리고 나온 값들의 평균을 취해서 알려준다.
    • 즉 cross-validation은 모델의 학습과 예측을 같이 해본다.
  • Rˆ2Rˆ2는 이 글이 좋은 것 같다.(https://ltlkodae.tistory.com/19)
    : 직관적으로는 예측값이 타겟의 ~~%를 설명해준다.

  • 하이퍼파라미터 찾기

    • GridSearchCV
      : 사람이 값 설정. 그 값 내의 모든 그리드 탐색
    • RandomSearchCV
      : 사람이 범위 설정. 거기서 알아서 찾아감
  • 함수 만들 때 나만의 파라미터를 만들고 그 파라미터가 있어도 되고 없어도 되면, 기본값으로 None 주면 되는 것 같다.
    : 예) def save_submit(... RMSLE=None)

미니프로젝트

캐글 참가해보기(House_Price_Prediction)

  • EDA를 혼자서 처음 해봤는데 재미있으면서 시간이 굉장히 많이 뺐겻다...

    • yr_renovated 컬럼에서 다중 조건으로 불린인덱싱 후 해당 값들만 쏙쏙 다른 값으로 바꾸는 것에 2~3시간 정도 헤맸다...
    • 헤맨 점을 살짝 요약하자면, apply() 함수를 쓰면 쏙쏙 해당 값들만 바뀔 줄 알았는데 Series 전체를 다 꺼내서 바꾸는 것이라 앞서 특정 조건의 행 값을 바꾼 것들이 다 NaN 값이 되었다...
    • 또 year로 쓰인 것 중에 float 형태가 있었는데, 이걸 바꾸는 방법을 찾다가 시간이 많이 쓰였다..
      • df_train['yr_renovated'].copy().astype(str).apply(lambda x: x[:4]).astype(int) 이렇게 하면 년도 4자리만 뜰 줄 알았는데 안되었다... 왜 그런지 나도 궁금하다
  • 모델을 여러개 선택하고, 모델별 최적의 하이퍼파라미터를 찾아서 결과를 내려 했으나,

  • 오늘의 시간은 거의 다 쓰게 되어 일단 이번 블로그는 여기서 마친다...

profile
'어떻게든 자야겠어'라는 저 아이를 닮고 싶습니다

0개의 댓글