자격증/AICE

AICE ex2

vy00 2024. 7. 12. 18:11

https://velog.io/@harii-in/KT-AIVLE-4%EA%B8%B0-AICE-%EB%8C%80%EB%B9%84

https://dhan-description.tistory.com/241

[AICE] Associate 샘플문항 정답 .. : 네이버블로그 (naver.com)

https://velog.io/@junseyeon/AICE-associate-%EC%83%98%ED%94%8C%EB%AC%B8%ED%95%AD-%ED%92%80%EC%9D%B4

 

countplot 설명

https://yenpa.tistory.com/46

https://steadiness-193.tistory.com/192#google_vignette

 

1. scikit-learn를 별칭(alias) sk로 임포트하는 코드를 작성하고 실행하세요.

import sklearn as sk

 

2. pandas를 사용할 수 있도록 별칭(alias)을 pd로 해서 불러오세요.

import pandas as pd

 

3.모델링을 위해 분석 및 처리할 데이터 파일을 읽어오려고 한다.

pandas 함수로 2개 데이터 파일을 읽고 합쳐서 1개의 데이터 프레임 df에 할당하는 코드 작성.

 

  • A0007IT.json 파일을 읽어 데이터 프레임 변수명 df_a에 할당
  • signal.csv 파일을 읽어 데이터 프레임 변수명 df_b에 할당
  • df_a와 df_b 데이터프레임을 판다스의 merge 함수를 활용하여 합쳐 데이터 프레임 변수명 df에 저장(합칠  사용하는 키(on):"RID", 합치는 방법(how):"inner")

df_a = pd.read_json("A0007IT.json")

df_b = pd.read_csv("signal.csv")

df = pd.merge(df_a, df_b, on="RID", how="inner")

 

4. Address1에 대해서 countplot그래프 만들기

  • 첫 번째, Address1에 대해서 분포를 보여주는 countplot 그래프 그리기
  • 두 번째, 지역명이 없는 '-'에 해당하는 row(행)을 삭제

!pip install seaborn

import seaborn as sns

 

sns.countplot(data=df, x=df['Address1'])

df=df.drop(df[df['Address1'] == '-'].index)

plt.show

 

답안04=3

 

5. Time_Driving와 Speed_Per_Hout을 jointplot 그래프로 만들기

  • seaborn을 활용하기
  • X축에는 TIme Driving을 표시하고, Y축에는 Speed_Per_Hour를 표

sns.jointplot(x='Time_Driving', y='Speed_Per_Hour', data=df)

 

6. joinplot 그래프에서 시속 300이 넘는 이상치 발견

  • 대상 데이터프레임: df
  • jointplot 그래프를 보고 시속 300이상되는 이상치를 찾아 해당 행(row)을 삭제
  • 불필요한 RID 컬럼 삭제
  • 전처리 반영 후에 새로운 데이터프레임 변수명 df_temp에 저장

idx_out = df.loc[df['Speed_Per_Hout'] > 300].index

df.drop(idx_out, inplace = True)

df.drop(columns=['RID'], inplace=True)

df_temp = df.copy()

 

7. 모델링 성능을 제대로 얻기 위해서 결측치 처리는 필수이다.

아래 가이드를 따라 결측치 처리하기

  • 대상 데이터프레이: df_temp
  • 결측치를 확인하는 코드 작성
  • 결측치가 있는 행 삭제
  • 전처리 반영된 결과를 새로운 데이터프레임 변수명 df_na에 저장

df_temp.isna().sum()

missing_df = df_temp.isnull().sum()

df_na = df_temp.dropna(axis=0)

print("답안07= ", missing_df)

답안07=0

 

8. 모델링 성능을 제대로 얻기 위해서 불필요한 변수는 삭제해야한다.

  • 대상 데이터프레임: df_na
  • 'Time_Departure', 'Time_Arrival' 2개 컬럼을 삭제
  • 전처리 반영된 결과를 새로운 데이터프레임 변수명 df_del에 저

df_del = df_na.drop(['Time_Departure', 'Time_Arrival'], axis=1)

 

9. 원-핫 인코딩(One-hoe encoding)은 범주형 변수를 1과 0의 이진형 벡터로 변환하기 위하여 사용하는 방법이다.

원-핫 인코딩으로 아래 조건에 해당하는 컬럼 데이터를 변환

  • 대상 데이터프레임: df_del
  • 원-핫 인코딩 대상: object 타입의 전체 컬럼
  • 활용 함수: Pandas의 get_dummies
  • 해당 전처리가 반영된 결과를 데이터프레임 변수 df_preset에 저

df_del.info()

object_cols = df_del.select_dtypes(include='object').columns

df_preset = pd.get_dummies(df_del, columns=object_cols)

 

 

10. 훈련과 검증 각각에 사용할 데이터셋을 분리

Time Driving 컬럼을 label값을 y로, 나머지 컬럼을 feature 값 X로 할당한 후 훈련데이터셋과 검증데이터셋으로 분리하세요.

추가로 가이드 따라서 훈련데이터셋과 검증데이터셋에 스케일링을 수행하세요.

  • 대상 데이터프레임 : df_preset
  • 훈련과 검증 데이터셋 분리
    • 훈련데이터셋label : y_train, 훈련 데이터셋Feature: X_train
    • 검증데이터셋label : y_valid, 검증 데이터셋Feature: X_valid
    • 훈련 데이터셋과 검증데이터셋 비율은 80:20
    • random_state: 42
    • Scikit-learn의 train_test_split 함수를 활용
  • RobustScaler 스케일링 수행
    • sklearn.preprocessing의 RobustScaler 함수 사용
    • 훈련데이터셋의 Feature는 RobustScaler의 fit_transform 함수를 활용하여 X_train변수로 할당
    • 검증데이터셋의 Feature는 RobustScaler의 transform함수를 활용하여 X_test변수로 할당

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import RobustScaler

 

X = df_preset.drop('Time_Driving', axis=1)

y = df_preset['Time_Driving']

 

X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.2, random_state=42)

 

robustScaler = RobustScaler()

X_train_robust = robustScaler.fit_transform(X_train)

X_vaild_robust = robustScaler.transform(X_valid)

 

 

11. Time_Driving을 예측하는 머신러닝 모델을 만들고자한다.

의사결정나무(decision tree)와 랜덤포레스트(RandomForest)는 여러가지 규칙을 순차적으로 적용하면서 독립변수 공간을 분할하는 모형으로 분류와 회귀 분석에 모두 사용될 수 있다.

아래 가이드에 따라 의사결정나무와 랜던 포레스트 모델을 만들고 학습을 진행하세요.

  • 의사결정나무
    • 트리의 최대 깊이: 5로 설정
    • 노드를 분할하기 위한 최소한의 샘플 데이터수(min_samples_split) 3로 설정
    • random_state: 120설정
    • 의사결정나무 모델을 dt변수에 저장
  • 랜덤포레스트
    • 트리의 최대 깊이: 5로 설정
    • 노드를 분할하기 위한 최소한의 샘플 데이터수(min_samples_split) 3로 설정
    • random_state 120설정
    • 랜덤포레스트 모델을 rf변수에 저장
  • 위의 2개의 모델에 대해 fit을 활용해 모델을 학습해주세요.학습시 훈련데이터 셋을 활용해주세요

 

from sklearn.tree import DecisionTreeRegressor

from sklearn.enseble import RandomForestRegressor

 

dt = DecisionTreeRegressor(max_depth=5, min_samples_split=3, random_state=120)

dt.fit(X_train, y_train)

 

rf = RandomForestRegressor(max_depth=5, min_samples_split=3, random_state=120)

rf.fit(X_train, y_train)

 

 

12. 위 의사결정나무와 랜덤포레스트 모델의 성능을 평가한다.

아래 가이드에 따라 예측 결과 mae(Mean Absolute Error)를 구하고 평가

  • 성능 평가는 검증 데이터셋을 활용
  • 11번 문제에서의 만든 의사결정나무모델로 y값을 예측하여 y_pred_dt에 저장
  • 검증 정답(y_valid)과 예측값(y_pred_dt)의 mae를 구하고 dt_mae 변수에 저장
  • 11번 문제에서 만든 랜덤포레스트 모델로 y값을 예측하여 y_pred_rf에 저장
  • 검증 정답(y_valid)과 예측값(y_pred_rf)의 mae를 구하고 rf_mae변수에 저장

from sklearn.metrics import mean_absolute_error

y_pred_dt = dt.predcit(X_valid)

dt_mae = mean_absolute_error(y_valid, y_pred_dt)

 

y_pred_rf = rf.predict(X_valid)

rf_mae = mean_absolute_error(y_valid, y_pred_rf)

 

13. Time_Driving을 예측하는 딥러닝 모델을 만들려고 한다.

  • Tensorflow framework를 사용하여 딥러닝 모델을 만드세요
  • 히든레이어(hidden layer) 2개이상으로 모델을 구성하세요.
  • dropout 비율 0.2fh dropout 레이어 1개를 추가해주세요
  • 손실함수는 mse를 사용하세요
  • 하이퍼파라미터 epoches:30, batch_size:16으로 설정해주세요.
  • 각 에포크마다 loss와 metrics 평가하기 위한 데이터로 x_valid, y_valid 사용해주세요
  • 학습정보는 history변수에 저장
from sklearn.metrics import mean_squared_error

model = Sequential([
    Dense(64, activation='relu',
          input_shape=(X_train.shape[1],)), #input_shape는 첫 번째 레이어에서 입력데이터 형태 => (X_train.shape[1],)은 입력 데이터의 각 샘플이 가지는 특성(feature)의 수를 의미
    BatchNormalization(),
    Dropout(0.2),

    Dense(32, activation='relu'),
    BatchNormalization(),
    Dropout(0.2),

    Dense(16, activation='relu'),
    BatchNormalization(),
    Dropout(0.2),

    Dense(1)
])

model.compile(optimizer = 'adam',
              loss = 'mean_squared_error')

history = model.fit(X_train, y_train,
                    batch_size = 16,
                    epochs = 30,
                    validation_data=(X_valid, y_valid))

 

14. 딥러닝 모델의 성능을 평가

Matplotlib 라이브러리 활용하여 학습 mse와 검증mse를 그래프로 표시

  • 1개의 그래프에 학습 mse와 검증 mse 2가지 표시
  • 위 2가지 각각의 범례를 'mse', 'val_mse'로 표시
  • 그래프 타이틀은 'Model MSE'로 표시
  • x축에는 'epoches'라고 표시하고 y축에는 'mse'라고 표시
mse = history.history['loss']  #학습 손실 값
val_mse = history.history['val_loss'] #검증 손실값

epochs = range(1, len(mse) + 1)

plt.plot(epochs, mse, 'b', label='mse')
plt.plot(epochs, val_mse, 'r', label='val_mse')

plt.title('Model MSE')
plt.xlabel('Epochs')
plt.ylabel('MSE')
plt.legend()
plt.show()

'자격증 > AICE' 카테고리의 다른 글

AICE ex3  (1) 2024.07.12
AICE ex  (3) 2024.07.11
AICE Associate 정리  (0) 2024.07.10