AICE 자격증 준비하면서 배운점과 기본 문법을 사용해 데이터 분석, 학습하는 과정을 기록하며 공부합니다.
환경 : jupyter notebook
언어 : python3
1. scikit-learn import, alias sk
import sklearn as sk
2. 판다스 라이브러리 pd로 불러오기
import pandas as pd
3. pd로 데이터 불러오기
df = pd.read_csv('nav_data.csv', encoding='cp949')
→ 한글로된 csv를 인코딩 할 때 utf-8, cp949 등을 encoding으로 사용해야함.
4. jointplot을 활용해 ['Time_Driving'] 과 ['Speed_Per_Hour']를 살펴보기
!pip install seaborn
import matplotlib.pyplot as plt
import seaborn as sns
sns.jointplot(x=df['Time_Driving'], y=df['Speed_Per_Hour'], data=df)

→ seaborn을 사용하기 위해서는 seaborn을 install 해야 한다.
5. 데이터 간 상관계수로 heatmap 그리기
sns.heatmap(df.corr(), annot=True, cmap='Blues')

6. 필요 없는 데이터 삭제 ['Time_Departure']
df_temp = df.drop(['Time_Departure'], axis = 1)
7. sklearn 에서 주소 컬럼을 Encoder로 변경
from sklearn.preprocessing import LabelEncoder
Le = LabelEncoder()
df_temp['Address1']=Le.fit_transform(df_temp['Address1'])
df_temp['Address2']=Le.fit_transform(df_temp['Address2'])
→ LabelEncoder는 원핫인코딩이 아닌 범주→ 숫자 인코딩임
8. pd를 사용해서 원핫 인코딩 진행
df_temp = pd.get_dummies(data=df_temp, columns=['Address1','Address2', 'Weekday','Hour','Day'], drop_first=True)
9. sklearn에 있는 train, test set 분리를 사용해서 x, y 학습, 테스트 데이터셋 나누기
from sklearn.model_selection import train_test_split
x = df_temp.drop(['Time_Driving', 'Time_Arrival'], axis=1) #time_arrival도 제외
y = df['Time_Driving'].values
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=1)
→ y 지정할 때 valuse 쓰는거 잊지 않기!, Time_Arrival을 문자열이라 삭제 진행
10. StandardScaler로 학습, 테스트셋 정규화
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)
11. Decision Tree로 학습. max_depth = 5
from sklearn.tree import DecisionTreeRegressor
D_tree = DecisionTreeRegressor(max_depth=5)
D_tree.fit(x_train, y_train)
12. R2, MSE 값을 계산해서 scatter plot 그려보기. x=실제값, y=예측값
from sklearn.metrics import r2_score, mean_squared_error
y_pred = D_tree.predict(x_test)
rmse = mean_squared_error(y_test, y_pred)**0.5
r2 = r2_score(y_test, y_pred)
print(f'RMSE : {rmse}, R-squaured : {r2}')
sns.scatterplot(x=y_test, y=y_pred)
→ RMSE 함수는 없기 때문에 mse를 계산해서 루트로 계산.

13. 딥러닝을 사용해 학습. Early Stopping, ModelCheckpoint 사용. 'best_model.h5'로 가장 좋은 모델 저장
clear_session()
model = Sequential()
model.add(Input(shape=(117,)))
model.add(Dense(128, activation='relu'))
model.add(Dense(1))
model.compile(loss='mse',optimizer='adam', metrics='mae')
es = EarlyStopping(monitor = 'val_loss', min_delta=0, verbose=1, patience = 5, restore_best_weights=True)
mc = ModelCheckpoint('best_model.h5', monitor = 'val_loss', save_best_only=True)
history = model.fit(x_train, y_train, validation_split=0.2, callbacks=[es, mc], epochs=10, verbose = 1)
→ loss로 mae를 줘도 되고, mse를 줘도 된다.
MAE : Mean Absolute Error
MSE : Mean Squared Error
→ history로 저장해야 나중에 loss 함수를 그릴 수 있음! 까먹지 않기
14. MAE와 Val_mae를 그래프 하나에서 비교. 범례 추가
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title("Training mae")
plt.xlabel('Epochs')
plt.ylabel('mae')
plt.legend(['mae','val_mae'])
plt.show()

→ legend로 범례를 추가해도 되고 plot(x, label = 'mae') 후 legend(loc='best')로 사용해도 된다.
배운점
AICE 공부하면서 복습도 하고, 데이터로 머신러닝, 딥러닝 하며 학습하는 능력도 기를 수 있었다.
팀별로 이야기를 하면서 서로 효율적인 코드를 알려주고, 궁금한점, 공부하는 법에 대해 공유하는 시간도 가졌다.
AICE 시험 백점 맞자! 아자아자!
'KT AIVLE SCHOOL' 카테고리의 다른 글
| [KT AIVLE] 세미나 특강- AI 자연어 트렌드 (0) | 2023.04.21 |
|---|---|
| [KT AIVLE] 미니프로젝트 5차 - 인간 행동 인식 분류 (0) | 2023.04.14 |
| [KT AIVLE] 미니프로젝트2 kaggle 참가 (0) | 2023.03.29 |
| [KT AIVLE] 미니프로젝트2 미세먼지 농도 예측 (0) | 2023.03.29 |
| [KT AIVLE] GITHUB 사용법 (1) | 2023.03.03 |
댓글