해결된 질문
작성
·
315
0
import pandas as pd
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
#print(train.shape)
cols = ['name','host_name', 'last_review', 'host_id']
for col in cols:
train = train.drop(col, axis =1)
test = test.drop(col, axis = 1)
#print(train.shape)
train = train.drop('id', axis = 1)
test_id = test.pop('id')
train['reviews_per_month'] = train['reviews_per_month'].fillna(0)
test['reviews_per_month'] = test['reviews_per_month'].fillna(0)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
cols = ['neighbourhood_group', 'neighbourhood','room_type']
for col in cols:
le = LabelEncoder()
train[col] = le.fit_transform(train[col])
test[col] = le.transform(test[col])
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(
train.drop('price', axis =1),
train['price'],
test_size = 0.15,
random_state = 2022
)
import numpy as np
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(random_state = 2023)
model.fit(X_tr, y_tr)
pred = model.predict(X_val)
print("r2 :", r2_score(y_val,pred))
print("MAE :",mean_absolute_error(y_val, pred))
print("MSE :", mean_squared_error(y_val, pred))
pred = model.predict(test)
print(pred)
submit = pd.DataFrame({
'id': test_id,
'price': pred
})
submit.to_csv("0000.csv", index = False)
pd.read_csv("0000.csv")
y_test = pd.read_csv("y_test.csv")
print(r2_score(y_test, pred))
위와 같이 직접 코딩하였는데 정상적으로 코드실행은 되나 값이 아래와 같이 나옵니다.
맨아래 평가 부분에서 r2-score가 너무 낮게 나와 하이퍼파라미터 튜닝 등의 작업을 진행해도 값이 눈에띄게 높아지지 않습니다. 만약 시험장에서 저정도의 값이 나오게 되어도 문제가 없는지...만약 문제가 있다면 randomforest 모델 사용시 어떻게 코드를 수정해야 좋을까요?
항상 좋은 강의와 질의응답 감사합니다. 덕분에 많이 배우고 있습니다.
r2 : 0.24135176879686082
MAE : 66.06702993637809
MSE : 37136.57052394958
[434.45 145.45 165.35 ... 138.18 162.28 205.64]
0.05889849774689748
답변 1
0
r2가 0.24면 상대적으로 잘 나왔네요!
다만 데이터에 따라 상대적이기에 잘 나왔다 못 나왔다를 말하긴 어려울 것 같아요!!
주최측에서 이 기준은 공개하지 않고 있어 누구도 말 못합니다. 고성능의 모델을 요구하진 않습니다.
태범님께서 처음 만든 베이스라인보다 미미하지만 좋은 점수가 나왔다면 그 정도면 충분하지 않을까 싶어요!