1. 지도 학습(Supervised Learning)
지도 학습의 훈련 데이터는 문제지를 연상케 한다. 지도 학습의훈련 데이터는 정답이 무엇인지 맞춰 하는 '문제'에 해당되는 데이터와 레이블이라고 부르는 '정답'이 적혀있는 데이터로 구성되어 있다.게 비유하면, 기계는 정답이 적혀져 있는 문제지를 문제와 정답을 함께 보면서 열심히 공부하고, 향후에 정답이 없는 문제에 대해서도 정답을 예측해서 대답하게 되는 메커니즘이다다.
이해를 쉽게 하기위해서 우리는 기계를 지도하는 선생님의 입장이 되어볼것이다. 기계를 가르치기 위해서 데이터를 총 4개로 나눈다. 우선 메일의 내용이 담긴 첫번째 열을 X에 저장합니다. 그리고 메일이 스팸인지 정상인지 정답이 적혀있는 두번째 열을 y에 저장한다. 이제 문제지에 해당되는 20,000개의 X와 정답지에 해당되는 20,000개의 y가 생긴다.
그리고 이제 이 X와 y에 대해서 일부 데이터를 또 다시 분리해준다. 이는 문제지를 다 공부하고나서 실력을 평가하기 위해서 시험(Test)용으로 일부로 일부 문제와 정답지를 빼놓는 것이다. 여기서는 2,000개를 분리한다고 가정하겠다. 이 때, 분리시에는 여전히 X와 y의 맵핑 관계를 유지해야 한다. 어떤 X(문제)에 대한 어떤 y(정답)인지 바로 찾을 수 있어야 한다. 이렇게 되면 문제지에 해당되는 18,000개의 X, y의 쌍(pair)과 정답지에 해당되는 2000개의 X, y의 쌍(pair)이 생긴다.
<훈련 데이터>
X_train : 문제지 데이터
y_train : 문제지에 대한 정답 데이터.
<테스트 데이터>
X_test : 시험지 데이터.
y_test : 시험지에 대한 정답 데이터.
기계는 이제부터 X_train과 y_train에 대해서 학습을 한다. 기계는 현 상태에서는 정답지인 y_train을 볼 수 있기 때문에 18,000개의 문제지 X_train을 보면서 어떤 메일 내용일 때 정상 메일인지 스팸 메일인지를 열심히 규칙을 도출해나가면서 정리해나간다. 그리고 학습을 다 한 기계에게 y_test는 보여주지 않고, X_test에 대해서 정답을 예측하게 한다. 그리고 기계가 예측한 답과 실제 정답인 y_test를 비교하면서 기계가 정답을 얼마나 맞췄는지를 평가합니다. 이 수치가 기계의 정확도(Accuracy)가 된다.
2. X와 y분리하기
zip()함수는 동일한 개수를 가지는 시퀀스 자료형에서 각 순서에 등장하는 원소들끼리 묶어주는 역할을 한다.
X,y = zip(['a', 1], ['b', 2], ['c', 3])
print(X)
print(y)
('a', 'b', 'c')
(1, 2, 3)
첫번째로 등장한 원소들끼리 묶이고, 두번째로 등장한 원소들끼리 묶인 것을 볼 수 있다
sequences=[['a', 1], ['b', 2], ['c', 3]] # 리스트의 리스트 또는 행렬 또는 뒤에서 배울 개념인 2D 텐서.
X,y = zip(*sequences) # *를 추가
print(X)
print(y)
('a', 'b', 'c')
(1, 2, 3)
2) 데이터프레임을 이용하여 분리하기
import pandas as pd
values = [['당신에게 드리는 마지막 혜택!', 1],
['내일 뵐 수 있을지 확인 부탁드...', 0],
['도연씨. 잘 지내시죠? 오랜만입...', 0],
['(광고) AI로 주가를 예측할 수 있다!', 1]]
columns = ['메일 본문', '스팸 메일 유무']
df = pd.DataFrame(values, columns=columns)
df

데이터프레임은 열의 이름으로 각 열에 접근이 가능하므로, 이를 이용하면 손쉽게 X 데이터와 y 데이터를 분리할 수 있습니다.
print(X)
0 당신에게 드리는 마지막 혜택!
1 내일 뵐 수 있을지 확인 부탁드...
2 도연씨. 잘 지내시죠? 오랜만입...
3 (광고) AI로 주가를 예측할 수 있다!
Name: 메일 본문, dtype: object
print(y)
0 1
1 0
2 0
3 1
Name: 스팸 메일 유무, dtype: int64
3) Numpy를 이용하여 분리하기
import numpy as np
ar = np.arange(0,16).reshape((4,4))
print(ar)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
X=ar[:, :3]
print(X)
[[ 0 1 2]
[ 4 5 6]
[ 8 9 10]
[12 13 14]]
y=ar[:,3]
print(y
[ 3 7 11 15]
'머신러닝 > 딥러닝을 이용한 자연어처리 입문' 카테고리의 다른 글
원-핫 인코딩(One-hot encoding) (0) | 2020.03.30 |
---|---|
RNN(Recurrent Neural Network) (0) | 2020.01.02 |
불용어(Stopword) (0) | 2019.11.11 |
어간 추출(Stemming) and 표제어 추출(Lemmatization) (0) | 2019.11.01 |
정제(Cleaning) 과 정규화(Normalization) (0) | 2019.11.01 |