• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

타이타닉/예측ML관련 질문드립니다.

22.07.25 13:14 작성 조회수 118

0

안녕하세요, 선생님 수업 잘 듣고 있습니다. 앙상블까지 갔다가 복습겸 천천히 다시 보고 있는데, 타이타닉 관련해서 질문드립니다. 바쁘시겠지만 가능하시면 답변을 부탁드립니다..^^

 

제가 이해한 바로는, < 예측 ML 순서>가 아래와 같습니다.

  1. 전체 데이터를 feature / label로 나눈다. 타이타닉의 경우 Survive 칼럼만 label이 된다.

  2. 전체 데이터를 train / test로 쪼갠다. 이것 때문에 K-fold나 Stratified K-Fold가 있다.

  3. Name등 숫자가 아닌 데이터 컬럼들은 버린다(drop).

  4. "train feature" - "train label" 의 관계를 머신이 학습한다. 

  5. 머신이 "feature - train" 사이의 관계성을 유추한다. (사용자는 그 중간로직을 블랙박스처럼 알 수 없다.)

  6. 이제 "test feature"을 넣고 값이 뭐가 나오는 지 본다.

  7. 머신이 "유추한 test label"과 "진짜 test label"의 일치성을 확인해서, 머신의 유추로직이 정확한지 평가한다. (보통 이것은 accuracy 수치로 확인한다.)

질문의 요지는
        
1. 위의 프로세스가 맞을까요?

2. 위에서 머신의 추리를 쉽게하기 위해 (3) name 컬럼을 drop했습니다. 그 외에도 "데이터 전처리" 과정에서 불필요한 속성(정확히는 숫자가 아니어서 머신이 처리할 수 없는 속성)을 제거하게 되는데요, - 예측 ML을 돌린 후에, 저기 버렸던 속성들과 매칭해서 보려면 어떻게 해야할까요? (ex) 예측ML로 y_test(생존여부)를 추측한 뒤, 그들의 이름을 확인하고 싶습니다.

3. 애당초 저런 칼럼(name 등)들을 Drop하지 않고 ML에 넣을 수는 없을까요? train_test_split에 해당컬럼들을 제외하고 넣어보려했더니 에러가 발생합니다.

4. 저 예측 ML의 블랙박스와 같은 "중간 추론"을 알 수 있을까요? 예를들면, 좌석등급이 제일 유효했다거나, 성별이 제일 유효했다거나 하는 식으로 말입니다.

5. 저렇게 학습한 모델을 가지고, 답을 모르는 데이터셋에 집어넣어보려면 어떻게 해야할까요? (타이타닉으로 학습한 모델을, 생존여부를 모르는 "퀸엘리자베스호 승객" 데이터셋에 적용하고 싶다면요)

 

감사합니다. 좋은 하루 보내세요!


        

 

답변 2

·

답변을 작성해보세요.

0

 

 

1. 위의 프로세스가 맞을까요?

 

=> 위에 답변 참조 부탁드립니다. 

 

2. 위에서 머신의 추리를 쉽게하기 위해 (3) name 컬럼을 drop했습니다. 그 외에도 "데이터 전처리" 과정에서 불필요한 속성(정확히는 숫자가 아니어서 머신이 처리할 수 없는 속성)을 제거하게 되는데요, - 예측 ML을 돌린 후에, 저기 버렸던 속성들과 매칭해서 보려면 어떻게 해야할까요? (ex) 예측ML로 y_test(생존여부)를 추측한 뒤, 그들의 이름을 확인하고 싶습니다.

 

=> Pandas DataFrame을 원본 메모리 구조를 그대로 사용하여 다른 메모리 구조로 복사하는 형태입니다.  name 컬럼을 다른 DataFrame으로 복제하신 뒤 다시 옮기시면 됩니다. 예를 들어

 

# backup_df로 'Name' 컬럼값을 백업함. 

 

backup_df = new DataFrame()

 

backup_df['Name'] = titanic_df['Name']

 

titanic_df = titanic_df.drop('Name', axis=1)

 

# 머신러닝 작업 후에 다시 'Name' 컬럼을 복구함

 

titanic_df['Name'] = backup_df['Name']

 

3. 애당초 저런 칼럼(name 등)들을 Drop하지 않고 ML에 넣을 수는 없을까요? train_test_split에 해당컬럼들을 제외하고 넣어보려했더니 에러가 발생합니다.

 

=> ML 모델을 숫자값만 허용합니다. 넣을 수는 있는데, 레이블 인코딩을 하셔야 합니다. 하지만 이름과 같은 컬럼은 모델 성능에 방해만 되므로 넣지 않는 것이 좋습니다. 

 

4. 저 예측 ML의 블랙박스와 같은 "중간 추론"을 알 수 있을까요? 예를들면, 좌석등급이 제일 유효했다거나, 성별이 제일 유효했다거나 하는 식으로 말입니다.

 

=> 4장 분류에 보시면 트리 계열의 알고리즘은  '피처 중요도'라는 것을 가질 수 있습니다. 해당 피처가 모델에서 중요한지의 레벨을 어느정도까지는 알 수 있습니다. 

 

5. 저렇게 학습한 모델을 가지고, 답을 모르는 데이터셋에 집어넣어보려면 어떻게 해야할까요? (타이타닉으로 학습한 모델을, 생존여부를 모르는 "퀸엘리자베스호 승객" 데이터셋에 적용하고 싶다면요)

 

=> 학습과 테스트 데이터의 피처만 같다면 어느 데이터건 상관 없습니다. 퀸 엘리자베스호 승객 데이터를 타이타닉 데이터와 같은 피처로 변경해 주시면 됩니다. 다만 퀸 엘리자베스호 승객의 경우, 운항 경로, 사고 여부가 타이타닉과 다를 수 있기 때문에 좋은 모델이 되지 않을 수 있습니다. 

 

감사합니다. 

0

안녕하십니까, 

1. 전체 데이터를 feature / label로 나눈다. 타이타닉의 경우 Survive 칼럼만 label이 된다.
=> 맞습니다. 

2. 전체 데이터를 train / test로 쪼갠다. 이것 때문에 K-fold나 Stratified K-Fold가 있다.
=> K-Fold , Stratified K-Fold는 교차 검증을 위해 있습니다. 전체 데이터를 일정 수준 떼어내서 테스트 데이터를 만들 경우에는 train_test_split() 을 사용합니다. 

3. Name등 숫자가 아닌 데이터 컬럼들은 버린다(drop).
=> 숫자가 아닌 컬럼을 다 버리지 않습니다. 승객번호나 이름, 선실번호와 같이 학습에 사용할 필요가 없는 피처들은 삭제 합니다.  이름으로 사망/생존을 결정할수는 없을 것입니다.  숫자가 아닌 문자열 컬럼들 중에 선실등급, 성별등과 같은 카테고리 값등은 label encoding/one-hot encoding으로 encoding 합니다. 

4. "train feature" - "train label" 의 관계를 머신이 학습한다. 
=> 맞습니다.

5. 머신이 "feature - train" 사이의 관계성을 유추한다. (사용자는 그 중간로직을 블랙박스처럼 알 수 없다.)
=> 맞습니다

6. 이제 "test feature"을 넣고 값이 뭐가 나오는 지 본다.
=> 맞습니다. 

7. 머신이 "유추한 test label"과 "진짜 test label"의 일치성을 확인해서, 머신의 유추로직이 정확한지 평가한다. (보통 이것은 accuracy 수치로 확인한다.)

=> 맞습니다. 

 

답글이 길어지면 Q&A에 입력이 안되는 군요. 아래 추가 답글 참조해 주십시요.