import sklearn as sk
Pandas를 사용할 수 있도록 별칭 (alias)을 pd로 해서 불러오세요
import pandas as pd
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')
import seaborn as sns
sns.countplot(data = df , x = 'Address1')
df = df[df['Address1'] !='-']
plt.show()
Time_Driving(실주행시간)과 Speed_Per_Hour(평균시속)을 jointplot그래프로 만드세요
sns.jointplot(data= df, x = 'Time_Driving', y= 'Speed_Per_Hour')
plt.show()
df=df[df['Speed_Per_Hour']<300]
df_temp = df = df.drop(columns = 'RID')
df_temp.isna().sum()
df_na = df_temp.dropna(axis= 0)
df_del = df_na.drop(['Time_Departure','Time_Arrival'], axis = 1)
원-핫 인코딩으로 아래 조건에 해당하는 컬럼 데이터를 변환하세요
cols = df_del.select_dtypes('object').columns
df_preset = pd.get_dummies(data = df_del, columns = cols)
Time_Driving(실주행시간)컬럼을 label값 y로, 나머지 컬럼을 feature값 x로 할당한 후 훈련데이터셋과 검증데이터셋으로 분리
from sklearn.model_selection import train_test_split
x = df_preset.drop('Time_Driving', axis = 1)
y = df_preset['Time_Driving']
x_train, x_test, y_train, y_test = train_test_split( x, y , test_size = 0.2, random_state =42)
# 스케일링 수행
scaler = RobustScaler()
X_train = scaler.fit_transform(X_train)
X_valid = scaler.transform(X_valid)
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
dt = DecisionTreeRegressor(max_depth=5, min_samples_split=3, random_state = 120)
dt.fit(x_train, y_train)
rt = RandomForestRegressor(max_depth = 5, min_samples_split = 3, random_state=120)
rt.fit(x_train, y_train)
# 예측 수행
y_pred_dt = dt.predict(x_test)
y_pred_rt = rt.predict(x_test)
# 결과 출력
print("Decision Tree Predictions:", y_pred_dt)
print("Random Forest Predictions:", y_pred_rt)
두 모델의 평균 제곱 오차(MSE) 값을 비교한 결과:
의사결정나무(Decision Tree)의 MSE: 573
랜덤포레스트(Random Forest)의 MSE: 548
MSE 값은 낮을수록 모델의 예측 성능이 좋음을 나타냅니다. 따라서, 랜덤포레스트(Random Forest) 모델이 더 낮은 MSE 값을 가지므로 의사결정나무(Decision Tree) 모델보다 더 좋은 성능을 보이는 것으로 판단할 수 있습니다.
결론적으로, 주어진 결과에서 랜덤포레스트(Random Forest) 모델이 더 좋은 성능을 보입니다.
12. 위 의사결정나무와 랜덤포레스트 모델의 성능평가. 아래 가이드에 따라 예측결과의 mae(Mean Absolute Error)를 구하고 평가
성능 평가는 검증 데이터셋을 활용
11번 문제에서 만든 의사결정나무 (decision tree)모델로 y값을 예측(predict)하여 y_pred_dt에 저장
검증 정답(y_vaild)과 예측값(y_pred_dt)의 mae(Mean Absolute Error)를 구하고 dt_mae변수에 저장
11번 문제에서 만든 랜덤포레스트 모델로 y값을 예측 (predict)하여 y_pred_rd에 저장
검증 정답(y_valid)과 예측값(y_pred_rf)의 mae(Mean Absolute Error)를 구하고 rf_mae 변수에 저장
from sklearn.metrics import mean_absolute_error
dt_mae = mean_absolute_error(y_test, y_pred_dt)
rf_mae = mean_absolute_error(y_test, y_pred_rf)
print("Decision Tree - Mean Absolute Error:", dt_mae)
print("Random Forest - Mean Absolute Error:", rt_mae)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.losses import MeanSquareError
model = Sequential([
Dense(64, activation='relu', input_shape = (x_train.shape[1],)),
Dense(32, acitivatio='relu'),
Dense(16, activation='relu'),
Dense(1)
])
model.complie(optimizer=Adam(), loss= MeanSquaredError(), metrics=['mae'])
history = model.fit(
x_train, y_train,
epochs = 30,
batch_size=16,
validation_data=(x_valid, y_valid)
)
import matplotlib.pyplot as plt
mse = history.history['loss']
val_mse = history.history['val_loss']
epochs = range(1, len(mse)+1)
plt.figure(figsize=(10,6))
plt.plot(epochs,mse,'ro-', label='val_mse')
plt.title('Model MSE')
plt.xlabel('Epochs')
plt.ylabel('MSE')
plt.legend()
plt.grid(True)
plt.show()