3일차 복습
인공지능과 머신러닝, 지도학습 회귀·분류의 개념·실습·결과 해석 복습 28문항
퀴즈
- 총 28문항: 개념 확인·직접 실행·결과 해석을 섞은 기초 복습
- 범위: 인공지능과 머신러닝부터 로지스틱 회귀분석까지
- 코드를 직접 작성하거나 AI에 요청한 뒤 실행 결과를 확인해도 좋음
- 공통 준비 코드를 실행한 뒤 문제 순서대로 진행. 회귀 전처리는 5번, 분류 전처리는 21번에서 실행. 막히면 힌트의 코드 참고
- 수치 답은 계산 결과를 그대로 입력하거나 문제에 안내한 자리까지 입력
실습 준비
필요한 패키지가 없으면 먼저 설치. root_mean_squared_error()를 사용하는 scikit-learn 1.4 이상 기준.
pip install pandas openpyxl "scikit-learn>=1.4"
| 파일 | 입력 변수 | 예측할 타깃 |
|---|---|---|
housing.xlsx의 data 시트 |
commute: 통학 시간(분), rent: 월세(만원), noise: 소음 수준(1~5) |
score: 만족도(점) |
electronic_parts.xlsx |
exposure_hours: 습한 환경 노출 시간, humidity: 상대 습도, contamination_index: 표면 오염 지수 |
defective: 정상 0, 불량 1 |
- 주거 자료: 회귀나무·선형 회귀의 학습과 예측, 테스트 RMSE 계산
- 부품 자료: 분류나무·로지스틱 회귀의 정확도 확인, 클래스와 확률 예측의 구분
- 주거·부품 자료는 학습·검증·테스트를 60%·20%·20%로 분할
- 회귀 데이터 준비는 5번 문제에서 진행. 변수에는
house를 붙여 분류 데이터와 구분 - 분류 데이터 준비는 21번 문제에서 진행. 수업과 같은
X_train,X_valid,X_test,y_train,y_valid,y_test사용 - 마지막 로지스틱 회귀 실습의
model,X_test,y_test,y_pred를 그대로 두면 혼동행렬 실습으로 이어서 진행 가능
import pandas as pd
from sklearn.model_selection import train_test_split
【개념: 인공지능】인공지능·머신러닝·딥러닝의 관계로 알맞은 것은 무엇인가요? (A ⊃ B는 A가 B를 포함한다는 뜻)
- ○인공지능 ⊃ 머신러닝 ⊃ 딥러닝
- ○인공지능 ⊃ 딥러닝 ⊃ 머신러닝
- ○머신러닝 ⊃ 인공지능 ⊃ 딥러닝
- ○딥러닝 ⊃ 머신러닝 ⊃ 인공지능
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.
【개념: 인공지능】인공지능·머신러닝·딥러닝의 관계로 알맞은 것은 무엇인가요? (A ⊃ B는 A가 B를 포함한다는 뜻)
데이터에서 배우는 방법이 머신러닝이고, 그중 다층 신경망을 사용하는 방법이 딥러닝입니다.
【개념: 학습의 종류】정답 없이 비슷한 보관 조건의 부품끼리 묶는 작업은 어떤 학습인가요?
정답과 비교하거나 보상을 받기보다, 자료 안의 유사성을 찾는 작업입니다.
【개념: 지도학습】과거 주거 조건으로 만족도 예측 규칙을 학습하려면 어떤 자료가 필요한가요?
입력을 보고 예측한 값이 맞는지 비교할 정답도 필요합니다.
【개념: 입력과 타깃】통학 시간·월세·소음 수준으로 만족도를 예측할 때 타깃은 무엇인가요?
타깃은 모델이 맞히려는 결과입니다.
score통학 시간 commute월세 rent소음 수준 noisescore【실습: 선형 회귀 테스트 RMSE】아래 코드로 주거 자료를 불러오고 입력·타깃을 나눈 뒤 학습·검증·테스트 데이터를 준비하세요. 이후 회귀 문제에서도 이 변수를 사용합니다.
from sklearn.tree import DecisionTreeRegressor
from sklearn.linear_model import LinearRegression
from sklearn.metrics import root_mean_squared_error
house_df = pd.read_excel("housing.xlsx", sheet_name="data")
house_features = ["commute", "rent", "noise"]
X_house = house_df[house_features]
y_house = house_df["score"]
X_house_train_val, X_house_test, y_house_train_val, y_house_test = \
train_test_split(
X_house, y_house, test_size=0.2, random_state=42, # 테스트 20% 분리
)
X_house_train, X_house_val, y_house_train, y_house_val = \
train_test_split(
X_house_train_val, y_house_train_val, test_size=0.25, random_state=42, # 남은 80%의 25%: 전체의 20%
)
학습 데이터 X_house_train, y_house_train으로 선형 회귀를 학습하세요. 테스트 데이터 X_house_test, y_house_test에서 RMSE를 구해 점 단위로 입력하세요. 소수 둘째 자리까지 입력해도 좋습니다.
학습 데이터로 fit()을 실행하고, 테스트 입력의 예측값을 테스트 정답과 비교하세요.
house_linear = LinearRegression()
house_linear.fit(X_house_train, y_house_train)
linear_test_pred = house_linear.predict(X_house_test)
root_mean_squared_error(y_house_test, linear_test_pred)
【실습: 새 사례 예측】위 선형 회귀로 통학 시간 30분, 월세 80만원, 소음 수준 3인 사람의 만족도를 예측하세요. 단위는 점이며 소수 둘째 자리까지 입력해도 좋습니다.
학습할 때와 같은 입력 열 이름과 순서로 새 사례를 만드세요.
new_house = pd.DataFrame({"commute": [30], "rent": [80], "noise": [3]})
house_linear.predict(new_house)[0]
【개념: 회귀와 분류】주거 만족도를 0~100점의 수치로 예측하는 문제는 무엇인가요?
어떤 종류에 속하는지보다 점수의 크기를 예측합니다.
【해석: 회귀나무】월세가 다른 두 사람이 회귀나무의 같은 잎에 도착했습니다. 두 사람의 예측 만족도는 어떻게 되나요?
회귀나무는 도착한 잎에 모인 학습 사례의 타깃 평균으로 예측합니다.
【실습: 회귀나무 테스트 RMSE】학습 데이터 X_house_train, y_house_train으로 깊이 3, 잎의 최소 사례 수 12인 회귀나무를 학습하세요. 테스트 데이터 X_house_test, y_house_test에서 RMSE를 구해 점 단위로 입력하세요. 소수 둘째 자리까지 입력해도 좋습니다.
학습 데이터로 나무를 학습하고, 테스트 입력의 예측값을 테스트 정답과 비교하세요.
house_tree = DecisionTreeRegressor(
max_depth=3, min_samples_leaf=12, random_state=42, # 깊이와 잎의 크기 제한
)
house_tree.fit(X_house_train, y_house_train)
tree_test_pred = house_tree.predict(X_house_test)
root_mean_squared_error(y_house_test, tree_test_pred)
【해석: 결정계수】회귀 모형의 결정계수 R²가 0.6입니다. 평가에 사용한 자료에 대한 해석으로 알맞은 것은 무엇인가요?
결정계수는 타깃의 변동을 얼마나 설명하는지 나타내며, 분류 정확도와는 다릅니다.
【개념: 모델의 예측 방식】선형 회귀와 회귀나무의 예측 방식으로 알맞은 설명은 무엇인가요?
하나는 가중합으로 예측값을 계산하고, 다른 하나는 분기 조건을 따라 잎에 도착합니다.
【해석: 선형 회귀계수】어떤 선형 회귀 모형에서 통학 시간의 계수가 약 -0.457입니다. 알맞은 해석은 무엇인가요?
다른 입력이 같은 조건에서, 부호와 입력·타깃의 단위를 함께 확인하세요.
【개념: MAE】평균 절대 오차(MAE)는 무엇을 요약하나요?
양의 오차와 음의 오차가 서로 상쇄되지 않도록 차이의 크기를 사용합니다.
【해석: RMSE】큰 예측 오차가 몇 개 있을 때 RMSE가 크게 영향을 받는 이유는 무엇인가요?
RMSE는 오차를 제곱하고 평균한 뒤 제곱근을 취하는 순서로 계산합니다.
【개념: 하이퍼파라미터】회귀나무의 max_depth는 어떤 종류의 값인가요?
데이터에서 배우는 값과 사람이 학습 전에 지정하는 설정을 구분하세요.
【개념: 검증 데이터】나무의 깊이를 3과 6 중에서 고르려고 합니다. 무엇을 기준으로 선택해야 하나요?
학습에 쓰지 않은 자료로 설정을 비교하고, 최종 평가용 자료는 남겨 둡니다.
【개념: 일반화】모델의 일반화 능력이 좋다는 것은 어떤 뜻인가요?
모델을 만드는 목적은 아직 정답을 모르는 사례에 적용하는 것입니다.
【해석: 과대적합】나무를 깊게 만들자 학습 RMSE는 20에서 5로 줄고, 검증 RMSE는 25에서 40으로 늘었습니다. 어떤 현상을 의심할 수 있나요?
학습한 자료에서는 좋아졌지만 학습하지 않은 자료에서는 나빠졌습니다.
【개념: 테스트 데이터】모델의 학습과 나무 깊이 선택을 모두 마쳤습니다. 따로 남겨 둔 테스트 데이터로 RMSE를 계산하는 목적은 무엇인가요?
테스트 데이터는 학습이나 설정 선택에 사용하지 않고 마지막 성능 평가를 위해 남겨 둔 자료입니다.
【개념: 분류】정상은 0, 불량은 1로 표시했습니다. 불량 여부 예측이 분류인 이유는 무엇인가요?
타깃 숫자가 측정한 크기인지, 종류를 표시한 것인지 구분하세요.
【실습: 분류나무 테스트 정확도】아래 코드로 부품 자료를 불러오고 학습·검증·테스트 데이터를 준비하세요. 이후 분류 문제에서도 이 변수를 사용합니다.
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
df = pd.read_excel("electronic_parts.xlsx")
features = ["exposure_hours", "humidity", "contamination_index"]
X = df[features]
y = df["defective"]
X_train_valid, X_test, y_train_valid, y_test = train_test_split(
X, y, test_size=0.2, random_state=42,
stratify=y, # 정상·불량의 비율 유지
)
X_train, X_valid, y_train, y_valid = train_test_split(
X_train_valid, y_train_valid, test_size=0.25, random_state=42,
stratify=y_train_valid, # 남은 자료에서도 정상·불량의 비율 유지
)
학습 데이터 X_train, y_train으로 깊이 4, 잎의 최소 사례 수 50인 분류나무를 학습하세요. 테스트 데이터 X_test, y_test에서 정확도를 구해 0~1 사이의 값으로 입력하세요. 예: 74%이면 0.74 입력.
학습 데이터로 나무를 학습한 뒤 테스트 자료의 예측 클래스와 실제 클래스를 비교하세요.
parts_tree = DecisionTreeClassifier(
max_depth=4, min_samples_leaf=50, random_state=42, # 깊이와 잎의 크기 제한
)
parts_tree.fit(X_train, y_train)
tree_pred = parts_tree.predict(X_test)
accuracy_score(y_test, tree_pred)
【해석: 양성 클래스】부품 검사에서 불량을 양성 클래스로 정했습니다. 여기서 양성은 무엇을 뜻하나요?
양성은 좋고 나쁨이 아니라 검사에서 어떤 결과를 찾아내는지와 관련됩니다.
【개념: predict】학습한 분류나무에서 parts_tree.predict(X_test)는 각 부품에 대해 무엇을 반환하나요?
입력에는 부품의 특성만 있고 실제 정답은 없습니다. 반환값은 각 부품의 최종 분류 결과입니다.
【개념: predict_proba】학습한 분류나무에서 parts_tree.predict_proba(X_test)는 각 부품에 대해 무엇을 반환하나요?
클래스별로 하나씩 값을 반환하며, 한 부품에 대한 두 값의 합은 1입니다.
【해석: 클래스별 확률】classes_가 [0, 1]이고 한 부품의 predict_proba() 결과가 [0.3, 0.7]입니다. 알맞은 해석은 무엇인가요?
확률 열의 순서는 classes_의 순서와 같습니다.
【개념: 로지스틱 함수】로지스틱 회귀에서 로지스틱 함수의 역할은 무엇인가요?
확률을 계산하는 단계와 최종 클래스를 정하는 단계를 구분하세요.
【실습: 로지스틱 회귀 테스트 정확도】힌트의 설정으로 학습 데이터 X_train, y_train을 사용해 로지스틱 회귀를 학습하세요. 테스트 데이터 X_test의 클래스를 예측하고 실제 정답 y_test와 비교해 정확도를 구하세요. 결과는 0~1 사이의 값으로 입력하세요. 예: 74%이면 0.74 입력.
정확도는 테스트 부품 전체에서 예측 클래스가 실제 클래스와 일치한 비율입니다.
model = LogisticRegression(
solver="liblinear", max_iter=1000, random_state=42, # 수업과 같은 학습 설정
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy_score(y_test, y_pred)
【해석: 로지스틱 회귀계수】불량을 1로 학습한 로지스틱 회귀에서 습도 계수가 양수입니다. 다른 입력이 같을 때 알맞은 해석은 무엇인가요?
계수는 확률로 바꾸기 전 점수에 적용됩니다. 확률의 변화량 자체는 아닙니다.