로이터 데이터셋 : 로이터에서 공개한 짧은 뉴스 기사와 토픽의 집합
from keras.datasets import reuters
(train_data, train_labels),(test_data, test_labels) = reuters.load_data(num_words = 10000)
train_data , test_data : 뉴스 기사의 단어 인덱스 리스트
train_labels, train_labels : 46개의 토픽 중 뉴스 기사의 토픽 하나
⇒ 단일 레이블 다중 분류 : 데이터의 포인트가 정확히 하나의 범주로 분류
import numpy as np
def vectorize_sequences(sequences, dimension=10000):
result = np.zeros((len(sequences),dimension))
for i, sequence in enumerate(sequences):
result[i, sequence]=1
return result
x_train = vectorize_sequences(train_data)
x_test = vectorize_sequences(test_data)
이진 분류에서 했던 것처럼 원-핫 인코딩하여 0과 1의 벡터로 변환
레이블 → 벡터로 변환
✔️ 원-핫 인코딩 ( 범주형 인코딩 ) 사용 → categorical_crossentropy 손실 함수로 사용
def to_one_hot(labels, dimension=46):
result = np.zeros((len(labels),dimension))
for i, label in enumerate(labels):
result[i,labels]=1
return result
y_train = to_one_hot(train_labels)
y_test = to_one_hot(test_labels)
이렇게 케라스의 내장 함수 to_categorical 를 이용해 원-핫 인코딩을 해도 된다!
from tensorflow.keras.utils import to_categorical
y_train = to_categorical(train_labels)
y_test = to_categorical(test_labels)