더북(TheBook)

훈련 결과 검증 데이터셋에 대한 정확도가 78%이지만 손실도 50%로 상당히 높습니다. 또한, 정확도가 거의 변화되지 않았는데 이것은 26 에포크가 진행되는 동안 모델의 학습이 진행되지 않았음을 의미합니다. 즉, 칼럼들이 비슷한 값의 범위를 갖지 않기 때문에 기울기가 앞뒤로 진동하거나 전역·지역 최솟값에 도달하기까지 오랜 시간이 걸립니다. 이러한 문제를 해결하려고 정규화를 진행합니다. 경사 하강법을 이용하여 빠르게 전역·지역 최소점을 찾기 위해 칼럼의 범위를 비슷한 값으로 취하도록 하는 방법입니다.

이번에는 정규화를 진행했을 때의 정확도에 대해 알아보겠습니다. 먼저 데이터에 대한 정규화를 진행합니다.

코드 9-30 데이터 정규화

from sklearn import preprocessing
df = pd.read_csv('../chap9/data/covtype.csv')
x = df[df.columns[:55]]
y = df.Cover_Type
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7,
                                                    random_state=90)

train_norm = x_train[x_train.columns[0:10]] ------ 훈련 데이터셋에서 정규화가 필요한 칼럼 선택
test_norm = x_test[x_test.columns[0:10]]  ------  검증 데이터셋에서 정규화가 필요한 칼럼 선택

std_scale = preprocessing.StandardScaler().fit(train_norm)  ------ ①
x_train_norm = std_scale.transform(train_norm)

training_norm_col = pd.DataFrame(x_train_norm, index=train_norm.index,
                                 columns=train_norm.columns) ------ 넘파이(numpy) 배열을 데이터프레임(DataFrame)으로 변환
x_train.update(training_norm_col)
print(x_train.head())

x_test_norm = std_scale.transform(test_norm)  ------ 검증 데이터셋 정규화
testing_norm_col = pd.DataFrame(x_test_norm, index=test_norm.index, 
                                columns=test_norm.columns)

x_test.update(testing_norm_col)
print(x_test.head())
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.