인공지능 개발일지

[머신러닝] fit(X,y)에서 변수 X,y의 의미와 지도학습의 흐름 및 머신러닝 용어정리 (data feature,data class) 본문

인공지능/머신러닝

[머신러닝] fit(X,y)에서 변수 X,y의 의미와 지도학습의 흐름 및 머신러닝 용어정리 (data feature,data class)

Prcnsi 2022. 4. 10. 12:00
728x90

안녕하십니까! 너무 오랜만에 글을 써서 조금 반성이 되네요.

이번 시간에는 머신러닝, 딥러닝을 코딩할 때 자꾸 나오는 이 변수 x와 Y가 어떤 의미인지 전달해 드리려고 합니다.

이는 제가 현재 진행 중인 머신러닝 스터디에서도 한 번 다뤘던 내용인데 블로그에도 올리면 좋을 것 같아 올립니다. 

 

 

제가 처음 머신러닝 코드를 접할 때 느낀 첫인상은 물음표였습니다. 아니 x는 뭐고 Y는 뭐지? 코드의 흐름이 잘 이해가 가지 않았습니다. 그런데 최근 들어 여러 이론을 다지다 보니 어느 순간 이해가 되어서 여러분도 꼭 이해가 되셨으면 좋겠습니다.

 

 

1. 머신러닝 용어정리

그래서 x, Y가 뭔데?라고 하시면 그전에 알아야 할 머신러닝의 전반적인 흐름과 용어를 먼저 정리해 보았습니다.

이 개념을 머릿속에 확실히 박아 놓으시면 앞으로 코드를 보는데 훨씬 편하실 겁니다.

 

보시면 Target과 Feature라는 말이 나옵니다. Target은 예측하려는 목표(정답)니다. 예를 들어 당뇨에 걸렸는지 여부를 참과 거짓으로 분류하는 아래와 같은 문제에서 당뇨 여부 칼럼이 Target이 됩니다.

 

그리고 이 Target은 Label, Class와 동의어입니다. 그러면 이제 Target이 정답 칼럼인 건 알았어요.

그러면 Feature는 뭐냐, Feature는 Target을 제외한 나머지 칼럼으로 데이터의 속성을 뜻해요.

(물론 정답이 있는 지도 학습 한정이긴 한데 대부분 통용되는 의미입니다) 

아래에서는 나이, 체중, 유전병 여부 등 정답에 영향을 끼치는 변수들을 Feature라고 한답니다.

 

그래서 이제 x랑 Y가 뭐냐면 관례적으로 머신러닝 코드에서는 x, Y를 많이 찾아볼 수 있는데 이것이 뜻하는 것은 각각 

Data의 Feature와 Class를 의미합니다. 그래서 보통 X라고 하면 정답을 제외한 나머지 특성을 뜻하고 Y라고 하면 이것들의 정답을 뜻합니다. 그리고 data라고 하면 보통 class(y)를 제외한 나머지 칼럼을 뜻해요.

 

Target(y) - 예측하려는 목표(class, label)

Feature(X) – 정답을 제외한 나머지 칼럼(data in model)

 

아래 당뇨병 환자를 예측하는 멀티 라벨 분류 문제 예시를 보시면 나이, 체중, 유전병 여부와 같은 특성(x)을 가지고 그 사람이 당뇨에 걸렸는지 여부(y)를 나타낸 행렬입니다. (멀티 라벨 분류 무시하셔도 됩니다. 밑에 바로 나와요)

당뇨병 예측

그래서 위 X, y에 대한 이해를 바탕으로 아래 선형 회귀 식을 보시면 데이터의 여러 특성(feature)을 고려해서 정답(Y)을 예측한다고 해석할 수 있겠네요.

Y=Wx+b

그래서 다시 한번 정리하면 머신러닝 모델을 돌리는 코드에서 변수 X는 feature를 뜻하고 y는 예측하려는 feature의 정답을 뜻합니다.

 

 

 

 

1.1 머신러닝 지도 학습의 분류 

 자 먼저 머신러닝 중 지도 학습은 아래와 같이 크게 분류 알고리즘과 회귀 알고리즘으로 나뉩니다. 분류 알고리즘은 클래스가 0,1,2와 같이 불연속적이면 분류이고 연속적인 정답이면 회귀로 나뉩니다. 

한마디로 객관식은 분류, 주관식은 회귀로도 볼 수 있겠네요.

 

분류에서는 이진 분류와 멀티 라벨 분류로 나누는데  이진분류는 2가지 중 하나를 선택하는 것이고(참/거짓) 멀티라벨 분류는 이름 그대로 라벨이 멀티일 때 즉, 여러 개 중 1개를 선택하는 것입니다.

 

회귀는 연속적인 데이터를 예측하다 보니 가장 정답을 잘 나타내는 선을 긋는 것이 목표입니다.

이때 곡선이면 로지스틱 회귀 직선으로 나타내면 선형 회귀예요. 쉽죠?

 

 

2. 머신러닝의 큰 흐름

기본적인 머신러닝의 프로세스는 다음과 같습니다.

1번 과정은 경우에 따라 생략될 수 있지만 보통 데이터를 학습용 검증용으로 분리하고 다음으로 모델을 학습하고 예측하고 이에 대한 정확도를 예측하는 게 전체적인 프로세스예요. 그럼 아래 프로세스를 그림으로 한 번 확인해 봅시다.

 

   1.데이터 세트 분리

 

   2.모델 학습(fit)
   3.테스트 데이터 예측(predict)
   4.정확도 평가

 

 

2.1 데이터 세트 분리 예시

데이터를 분리하는 것은 학습 데이터(train data)의 feature와 target, 검증 데이터(test data)의 feature와 target으로 분리하는 것을 의미합니다.

 

아래 꽃받침 길이/너비 꽃잎 길이의 특징과 해당 붓꽃 데이터의 품종이 나와있는 예시가 있습니다.

이 문제는 품종을 예측하는 게 목표니까 품종 칼럼이 Target(class, label)이겠네요.

 

 

여기서 train_test_split함수로 위 내용과 같이 데이터를 분리해 봅시다.

 train_test_split(X, y, test_size=0.3)

 

그러면  먼저 test 데이터와 train 데이터를 분리하겠죠? 이때 test데이터의 비율이(test_size) 0.3이라고 했으니 30%는 test data로 분리합니다. 

 

 

다음으로 위 데이터를 다시 feature와 label로 분리합니다. 위에 적어놨듯이 꽃의 특징을 보고 품종을 예측하는 게 목표니까 품종이 target이고 y라고 불리겠네요. 그러면 나머지 칼럼은 정답을 제외한 나머지 칼럼이니까 feature고 X라고 불겠네요. 여기까지 자연스럽게 이해되시죠? 

 

그럼 정리하면 아래와 같습니다. 보시면 학습 데이터의 feature(Train X)와 정답(Train y) 테스트 데이터의 feature(test X)와 정답(test y)으로 나뉩니다. 다시 말하지만 X는 feature이고 y는 정답 label이고 이제는 Train X, Train y, Test X, Test y라 칭하겠습니다.

 

 

 

2.2 모델 학습과 예측 예시

자 그러면 이제 다음은 어떻게 되냐 하면 위 그림에서 Train X의 정답이 Train인 y라고 모델에 학습을 시킵니다.

즉 이런 특징을 가진 것들은 이런 품종이 더라 하고 데이터와 그에 대한 정답을 줘서 학습을 시킵니다.

 

그래서 Train X와 Train y를 모델에 학습시키는 것을 모의고사에 비유하곤 합니다.

 

 

다음으로 본시험인 Test X를 학습한 모델에 인자로 줘서 정답을 예측하게 합니다.

그래서 아까 위의 위 그림에서 Test데이터만 보면 정답을 가리고 예측해보라고 시킵니다.

 

 

그런 다음 예측한 정답을 실제 정답과 비교해서 정확도를 측정합니다. 너무 쉽지 않나요?

그래서 Test X는 실제 시험 Test y는 정답지라고도 합니다.

 

 

 

 

 

 

3. X, y의 실제 활용 예시

위 과정을 다 이해하고 아래 코드를 보면 쉽게 이해되실 거에요. 이 예제는 사이킷런 내장 데이터인 붓꽃 데이터의 품종을 예측하는 예시입니다.
 

1번째 줄을 보시면 엄청 익숙한 문구가 나왔죠? 어떤 실습 책을 사든 데이터를 분리하는 코드는 보통 관례적으로 저렇게 X_train,~ 로 나눕니다. 이제 뭔 뜻인지 아시겠죠?  train_test_split 함수에서 위에서 말한 4개의 데이터로 나눠줍니다.

그리고 이것을 3번째 줄에서 모델에 train 데이터의 feature와 정답만 학습을 시키죠?(X_train, y_train)
(참고로 fit메서드는 학습을 시킨다는 뜻입니다) 
그런 다음 4번째 줄에서 X_test라고 테스트 데이터의 feature를 줘서 정답을 예측하게 합니다.
그리고 마지막 줄에서 예측한 정답 predict_lebel과 실제 정답 y_test를 비교해서 정확도를 측정합니다. 
그럼 아래 예제문제 같은 경우는 정확도가 매우 높게 나왔네요.

 

 

그럼 여기까지 전체 지도 학습의 flow를 이해하셨길 바랍니다. 혹시 질문 있으면 댓글 달아주세요.

엄청 간단한 개념이지만 위에 적어놓은 것만 이해하셔도 앞으로 코드를 보기 훨씬 수월하실 거예요.

긴 글 읽어주셔서 감사합니다.

 

728x90