작성
·
65
0
라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv('https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p2/ch4/train.csv')
test = pd.read_csv('https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p2/ch4/test.csv')
# test.isnull().sum() #결측치 처리 필요함 Item_Weight//// Outlet_Size
target=train.pop('Item_Outlet_Sales')
# 결측치 처리
train['Item_Weight'] = train['Item_Weight'].fillna(train['Item_Weight'].mean())
train['Outlet_Size'] = train['Outlet_Size'].fillna(train['Outlet_Size'].mode()[0])
test['Item_Weight'] = test['Item_Weight'].fillna(train['Item_Weight'].mean())
test['Outlet_Size'] = test['Outlet_Size'].fillna(train['Outlet_Size'].mode()[0])
# train=train.drop('Item_Identifier',axis=1)
# test=test.drop('Item_Identifier',axis=1)
#다르므로 데이터 합친 후 레이블인코딩 하고 다시 train test로 나누기
combined=pd.concat([train,test])
#->그다음 레이블인코딩해보자
cols=train.select_dtypes(include="O").columns
print(cols)
from sklearn. preprocessing import LabelEncoder
for col in cols:
le=LabelEncoder()
combined[col]=le.fit_transform(combined[col])
#->다시 데이터 train과 test로 나누자
train=combined.iloc[:len(train)].copy()
test=combined.iloc[len(train):].copy()
print(train.shape, test.shape)
#train데이터분할하기
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=100)
# #모델구축(1)
# from sklearn.ensemble import RandomForestRegressor
# model=RandomForestRegressor(random_state=200)
# model.fit(X_tr,y_tr)
# pred = model.predict(X_val)
#모델구축(2)
import lightgbm as lgb
model = lgb.LGBMRegressor(random_state=0, verbose=-1)
model.fit(X_tr, y_tr)
pred = model.predict(X_val)
#성능평가
from sklearn.metrics import root_mean_squared_error
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import r2_score
from sklearn.metrics import mean_squared_error
result=root_mean_squared_error(y_val,pred)
print('RMSE:', result)
result = mean_squared_error(y_val, pred)
print('MSE:', result)
result = mean_absolute_error(y_val, pred)
print('MAE:', result)
result = r2_score(y_val, pred)
print('r2:', result)
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. 이선희님께서 올려주신 질문에 대해 답변드리겠습니다.
주어진 코드에서 LightGBM 모델을 사용하여 예측을 수행했을 때 RMSE 값이 기대보다 크게 나오는 이유를 여러 관점에서 분석해 볼 수 있습니다. 아래는 몇 가지 점검할 사항입니다:
데이터 전처리:
Item_Weight
와 Outlet_Size
의 결측치를 각각 평균값과 모드값으로 채우는 방식은 일반적인 접근법입니다. 그러나, 데이터의 분포를 고려할 때 다르게 처리할 여지가 있을 수 있습니다.모델 설정:
num_leaves
, learning_rate
, n_estimators
등 여러 파라미터를 조정해 볼 수 있습니다.random_state
를 다양한 값으로 변경해 보면서 결과를 확인해보세요. 단, 비교할 때는 동일한 시드로 일관성 있게 유지하는 것이 중요합니다.성능 평가 지표:
root_mean_squared_error
는 sklearn
라이브러리에서는 직접 제공되지는 않습니다. 일반적으로 mean_squared_error
를 통해 RMSE를 구할 수 있습니다. mean_squared_error
의 결과에 대해 제곱근을 취하는 방식입니다. rmse = mean_squared_error(y_val, pred, squared=False)
print('RMSE:', rmse)
질문하신 내용과 방법론에 따른 상황에 대한 해결을 위해 이에 유사한 기존 질문과 답변을 함께 참조해주시기 바랍니다.
이 게시글에는 트레인-테스트 분할 방법 및 전반적인 모델링 전략에 대해 논의된 부분이 있어 참조하시기 바랍니다. 특히, 데이터셋의 차원이나 모델별 하이퍼파라미터 튜닝 전략 관련한 다양한 접근이 담겨 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.