기계학습 모델과 성능 분석
Classification · Prediction · Regression · Evaluation
전처리한 데이터를 바탕으로 분류와 예측 모델을 실행하고, 모델이 만든 결과를 실제 데이터와 비교하여 해석하는 활동으로 확장하였다.
분류와 예측
| 활동 | 수업에서 본 관점 |
|---|---|
| 아이리스 분류 | 여러 속성을 이용해 품종을 구분하는 분류 문제 경험 |
| 예측 모델 | 입력 특성을 이용해 결과값을 예측하는 모델의 기본 흐름 확인 |
| 선형 회귀 | 독립변수와 종속변수의 관계를 선형 모델로 표현하고 예측값 생성 |
실습 1 · 아이리스 분류 모델
전처리된 아이리스 데이터를 이용해 품종 문자열을 숫자로 변환하고, 네 개의 특성을 입력값으로 사용하여 K-최근접 이웃 분류 모델을 학습하였다.
x = df[['SepalLengthCm', 'SepalWidthCm',
'PetalLengthCm', 'PetalWidthCm']]
y = df['Species']
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, random_state=10
)
model = KNeighborsClassifier()
model.fit(x_train, y_train)
Predicted = model.predict(x_test)
예측 결과와 실제값 일부를 직접 비교하고, confusion_matrix()와 accuracy_score()를 이용하여 분류 성능을 확인하였다.
실습 2 · 청년 인구 예측과 선형 회귀
문화시설 관련 데이터를 이용하여 두 개의 독립변수를 조합해 청년 인구를 예측하였다. 도서관·공연장, 도서관·박물관, 도서관·미술관 등 여러 조합을 바꾸어 보면서 결정계수가 어떻게 달라지는지 비교하였다.
x = df[['도서관', '공연장']]
y = df[['청년']]
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, random_state=0
)
model = LinearRegression()
model.fit(x_train, y_train)
Predicted = model.predict(x_test)
| 확인 요소 | 수업에서 본 의미 |
|---|---|
coef_, intercept_ | 학습된 선형 관계의 기울기와 절편 확인 |
| 평균제곱오차 | 실제값과 예측값 사이의 오차 크기를 수치로 확인 |
| 결정계수 | 선택한 독립변수 조합이 종속변수의 변화를 얼마나 설명하는지 비교 |
| 산점도 | 독립변수와 종속변수의 관계, 실제값과 예측값의 차이를 시각적으로 확인 |
실습 3 · 버섯 데이터 이진 분류 딥러닝
버섯 데이터를 이용해 범주형 속성을 숫자로 변환하고, 학습용·평가용 데이터를 나눈 뒤 완전연결 신경망으로 이진 분류를 수행하였다.
for column in df.columns:
df[column] = le.fit_transform(df[column])
x = df.iloc[:, 1:]
y = df.iloc[:, 0]
model = keras.Sequential()
model.add(keras.layers.Dense(64, activation='relu'))
model.add(keras.layers.Dense(8, activation='relu'))
model.add(keras.layers.Dense(1, activation='sigmoid'))
model.compile(
optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy']
)
은닉층에는 ReLU, 이진 분류 출력층에는 sigmoid를 사용하고, binary_crossentropy 손실 함수로 학습하였다. 학습 후에는 평가 데이터의 정확도를 확인하고 epoch에 따른 loss 변화를 그래프로 관찰하였다.
더 알아보기
추가 활동에서는 MinMaxScaler를 이용한 정규화 개념을 살펴보며, 입력 데이터의 스케일을 조정하는 전처리가 모델 학습과 어떤 관련이 있는지 확인하였다.
모델링을 위한 변수 선택
학생들은 데이터의 여러 속성 중 어떤 값을 종속변수로 둘 것인지 정하고, 어떤 독립변수가 그 값을 예측하는 데 관련이 있을지 설명하였다. 필요하면 학습에서 제외할 속성을 정하고 그 이유도 데이터와 문제 상황에 연결하였다.
성능 분석
모델 실행 이후에는 예측값만 확인하지 않고 실제값과 예측값을 비교하였다. 산점도로 두 값을 함께 나타내고, 실제값과 예측값이 같아지는 기준선을 함께 표시해 모델의 예측이 어느 정도 맞는지 시각적으로 해석하였다.
데이터 확인 → 독립변수와 종속변수 선택 → 학습용/평가용 데이터 구성 → 모델 학습 → 예측 → 실제값과 예측값 비교 → 성능과 한계 해석
이 영역에서는 fit()이나 predict()를 외워 작성하는 능력보다, 어떤 데이터를 사용해 무엇을 예측했고 결과가 어느 정도 타당한지 설명하는 능력을 중심으로 수업하였다.