다중 분류를 위한 데이터셋 살펴보기

DNN, CNN, RNN을 활용한 파이썬 딥러닝 실무 강좌의 맛보기 강의입니다.

강의 대본 보기

실습을 통해서 각각의 딥러닝의 종류 알고리즘들을 살펴볼 건데요. 먼저 딥러닝을 이용해서 회귀와 분류를 하도록 하겠습니다. 딥러닝을 위한 분류 예제 먼저 하죠. 데이터에 관한 설명을 잠깐 드리면 IRIS라는 데이터셋이 있어요. IRIS 데이터를 가지고 저희가 다중 분류 문제를 해결해 볼 건데요. IRIS 데이터셋은 주어진 데이터셋은 우리나라 말로 붓꽃이라는 꽃 이름을 갖고 있는 꽃인데요 종류가 품종이 세 가지 품종이 있어요 세토사라는 품종이 있고요 그 다음에 버시칼라, 버지니카 이렇게 해서 세 가지 종류로 나눌 수가 있습니다 꽃잎과 꽃 너비, 각각 저희가 말한 속성, 문제로 가지고 있는 게 뭐냐면 결론은 꽃의 종류를 결정하는 거죠 0번일지, 1번일지, 2번일지 이렇게 해서 세 개의 분류가 이진 분류가 되지 못하고 다중 분류 문제가 된 거고요. 그리고 그러면 어떤 거 보고 꽃이 세토사인지 버시칼라인지 그 다음에 버지니카인지 결정해야 되냐라고 한다면 공이 4개의 속성이 들어가요. 그래서 페탈, 꽃잎과 꽃받침이 있죠. 꽃잎과 꽃받침의 너비와 높이 각각 2개씩 페탈 랭스 위드 세팔 랭스 위드 총 4개의 속성이 주어진다고 보시면 되겠습니다 4개의 속성을 가지고 4개의 속성이 측정된 수치를 보고 세토사인지 버시칼라인지 버지니카인지 구분하는 다중 분류 문제를 갖고 있는 데이터셋이라고 보시면 되겠습니다 IRIS 데이터셋을 다시 데이터의 모양으로 한번 다시 보시면 X, Y가 이렇게 쪼개져야 되죠. 우리가 쪼갤 거고요. 데이터를 불러오면 여러분이 쪼개셔야죠. 그래서 X가 4개의 속성이 주어지는 거고요. 입력층으로, 그 다음에 출력층에 저희가 레이블을 넣어줘야 되는데 딥러닝 구성할 때 레이블의 정답으로 이렇게 데이터가 들어가 있어요. 그런데 기존하고 다르게 저희가 기존의 문제 봤을 땐 0, 1, 0 이런 식으로 돼 있었죠. 이거는 지금 문자열로 구성되어 있기 때문에 이런 데이터 전처리가 필요하죠 레이블에 대한 데이터 전처리가 0과 1로 이렇게 바꿔주는 데이터 전처리가 좀 필요하니까 이 부분도 같이 아울러서 실습을 통해서 해보도록 하겠습니다 어쨌든 X하고 Y를 나누시고요 X하고 Y를 나누고 할 건데 데이터를 잠깐 보시면 전체에서 총 150개의 관측치가 있어요 데이터가 있고요 속성은 4개, 레이블, 정답, 품종은 3종으로 구분되어 있습니다 첫번째 정보는 꽃받침의 길이, 세팔 랭스 두번째 정보는 세팔 위드, 꽃받침의 너비 이 두 가지는 꽃잎의 길이 너비 이렇게 되어 있는 데이터고요 그래서 이 데이터를 어떻게 하고 싶냐면 이 데이터셋은 이렇게 5.1, 3.5, 4.0, 0.2면 세토사 할 거야라고 이렇게 정답이 되는 거죠. 문제답, 문제답을 맞춰서 새로운 데이터 정보 4개 여기에 해당되는 1, 2, 3, 4가 새로운 데이터가 4개 이렇게 들어간 데이터 모델을 만든 다음에 이 데이터를 넣으면 이 데이터는 세 개의 품종 중에 어디에 해당되는 품종인지를 저희가 분류해내고 싶은 목적을 갖고 있다. 이렇게 보시면 되겠습니다. 현재 저희가 IRIS 데이터셋을 통해서 해야 되는 내용을 잠깐 살펴보시면 입력층에는 어떻게 쌓겠죠? 속성이 4개가 들어온다고 했으니까 4개를 쌓을 거고요. 히든 레이어는 아직 결정을 안 했어요 저희가. 그래서 이건 놔두고 출력층을 먼저 보셔야 될 것 같아요. 출력층이 노드 수가 3개죠. 왜냐하면 품종이 3개 중에 하나니까 3개로 결정될 거고 그 세 개를 가지고 저희가 세 개의 품종 중에 어느 품종인지를 결정하는 다중 분류 문제잖아요 다중 분류 문제에서는 당연히 활성함수로 저희가 뭘 쓴다고 했냐면 소프트맥스로 써야 된단 말이죠 소프트맥스 함수는 이게 보시면 입력이 들어오면 각각 입력에 대한 이 세 가지 노드에 대한 저희가 뭘 만드냐면 가중합을 만들 거예요 또 활성함수를 통해서 이렇게 출력을 하는 결과가 나오면 소프트맥스 함수를 써서 이 값들이 확률로 바꿔버리는 거예요 이 문제를 확률의 문제로 바꿔서 이 세 가지 품종 중에 대체 어느 품종이 가장 가까운지를 확률적으로 표현하는 게 바로 소프트맥스 함수라고 보시면 되겠고 그래서 이 가중치 합들을 소프트맥스를 거치고 나면 반드시 이 세 개의 값이 더해서 1이 되는 값으로 변하게 돼요 그게 확률인 거잖아요 모든 경우의 수를 합치면 100%가 되는 그래서 0.7, 예를 들어 0.2, 0.2 이런 식으로 소프트맥스가 바꿔줬다면 이것을 교차 엔트로피를 통해서 가장 큰 값을 더 크게 만들어서 1에 가깝게 만드는 거죠 그래서 가장 큰 값은 1으로 만들고 나머지는 0으로 만들어 버리는 거죠 교차 엔트로피를 통해서 그래서 마치 원핫 레이블이 되는 것처럼 1, 0, 0이 되는 것이기 때문에 아직 맨 앞에 세토사, 버시칼라, 버지니카였다면 얘의 품종은 뭐가 되는 거죠? 세토사가 된다고 보시면 되겠어요 여기서 우리가 뭘 주의 있게 보셔야 되냐면 출력층의 활성함수를 반드시 뭘 쓰셔야 된다? 소프트맥스라는 함수를 써야 된다 왜냐하면 저희는 다중 분류 문제에 봉착되어 있기 때문에 그렇다라고 생각하시면 좋겠습니다 그래서 소프트맥스에 대해서 다시 한번 살펴봤습니다 주어진 전체 데이터셋을 저희가 불러서 딥러닝을 하는 거기 때문에 학습과 검증과 테스트에 있어서 나눠서 진행할 거고요 방금 전에 봤던 그 상황 중에 원핫 인코딩이라는 게 있어요 그래서 이게 또 생소하실까 봐 하나 좀 설명해 드리면 원핫 인코딩은 하나의 클래스만이 1이고 나머지를 전부 0으로 인코딩하는 인코딩 방법을 원핫 인코딩이라고 얘기하고요. 분류 문제는 원핫 인코딩을 저희가 필수적으로 반드시 전처리를 좀 하고 가셔야 되는 부분이 좀 있죠. 그래서 범주형 데이터에 주로 사용하는 그러니까 분류 문제에서는 반드시 원핫 인코딩이 기본이 돼야 되고요. 기본적으로 품종이 이렇게 IRIS 세토사다 그러면 이게 칼럼이 원래 여기가 품종이라는 Y가 하나였잖아요. 칼럼이 하나였는데 이것들이 세 개로 늘어나는 거예요. 칼럼이 3개로 늘어나고 그리고 나서 이거를 IRIS 세토사에 체크하는 거죠 1로 원핫 1 하나를 전체 데이터를 원핫 1이 하나만 되게 해주는 게 원핫 인코딩이에요 원을 우리가 마치 이게 1이 1이고 나머지는 해당되지 않잖아요 그래서 1, 0, 0 만들어주는 거고 버시칼라면 버시칼라의 1이 체킹되어야 되겠죠 나머지는 0으로 하고 얘를 1로 이렇게 그래서 하나의 클래스만 1로 만들고 나머지를 0으로 만드는 이 인코딩 방법을 원핫 인코딩이라고 합니다 그래서 범주형 데이터를 쓸 때는 가장 많이 쓰는 방법이고 특히 이제 다항 분류를 할 때는 우리가 반드시 알고 계셔야 되는 부분이기 때문에 이 원핫 인코딩을 알고 계셔야 돼서 설명을 좀 드렸습니다

이 강좌의 맛보기 강의

DNN, CNN, RNN을 활용한 파이썬 딥러닝 실무
DNN, CNN, RNN을 활용한 파이썬 딥러닝 실무강좌 자세히 보기