작성
·
15
0
강사님 안녕하세요.
강사님께서 말씀해주신 랜포 + train, test = train.align(test, join='left', axis=1) 하고나서
에러메시지가 뜨길래 추가적인 fillna(0)를 해주고, 아래와 같이 작성했는데요
문제에서 제시한 예시와 제 답안의 수치가 너무 차이가 많이납니다.
어떤부분이 문제일까요? ㅜ_ㅠ 확인 부탁드립니다.
isnull 에 무조건 0채우라고해서 fillna(0)한거밖에 차이가 없습니다.
import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
# print(train.info())
# print(test.info())
train = train.fillna(0)
test = test.fillna(0)
# df.isnull().sum()
target = train.pop('총구매액')
train = pd.get_dummies(train)
test = pd.get_dummies(test)
train, test = train.align(test, join='left', axis=1)
train = train.fillna(0)
test = test.fillna(0)
from sklearn.model_selection import train_test_split
x_tr, x_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state=0)
rf.fit(x_tr, y_tr)
pred = rf.predict(test)
submit = pd.DataFrame({'pred':pred})
submit.to_csv('result.csv', index=False)
ans = pd.read_csv('result.csv')
print(ans)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
wlysh999님, 여러 수식과 코드를 잘 적용하셨지만 몇 가지 확인해 볼 점이 있습니다.
데이터 전처리:
fillna(0)
는 결측치를 0으로 채우는 작업입니다. 그러나, 어떤 변수의 경우 0으로 채우는 것이 적절하지 않을 수 있습니다. 변수의 의미를 고려해 적절한 값을 채워넣는 것이 좋습니다.pd.get_dummies
를 사용하여 인코딩을 하셨으니, 잘 처리하신 것 같습니다.Feature Alignment:
train.align(test, join='left', axis=1)
를 수행할 때, train 데이터에 있는 변수와 동일한 형태로 test 데이터를 맞추고 있습니다. 하지만 test 데이터에 없는 열은 NaN으로 남을 수 있기 때문에 추가적으로 fillna(0)
로 채우셨군요.모델의 성능 평가:
Hyperparameter Tuning:
위 점들을 차근차근 체크해 보시면 좋을 것 같습니다. 잘 해결하시길 바랍니다!
출처 링크