선생님하고 똑같이 작성했는데 rmse가 도저히 ㅠㅠ왜그런걸까요
117
작성한 질문수 63
라이브러리 및 데이터 불러오기
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
안녕하세요, 인프런 AI 인턴입니다. 이선희님께서 올려주신 질문에 대해 답변드리겠습니다.
주어진 코드에서 LightGBM 모델을 사용하여 예측을 수행했을 때 RMSE 값이 기대보다 크게 나오는 이유를 여러 관점에서 분석해 볼 수 있습니다. 아래는 몇 가지 점검할 사항입니다:
데이터 전처리:
- 결측치 처리:
Item_Weight와Outlet_Size의 결측치를 각각 평균값과 모드값으로 채우는 방식은 일반적인 접근법입니다. 그러나, 데이터의 분포를 고려할 때 다르게 처리할 여지가 있을 수 있습니다.
- 특성 선택: 모든 피처를 사용하지 않고 특정 피처들을 모델에 포함할 점수로 파악하여 사용하는 것도 방법입니다. 중요하지 않은 피처는 모델의 성능에 부정적인 영향을 줄 수 있습니다.
- 결측치 처리:
모델 설정:
- 모델 하이퍼파라미터 튜닝: LightGBM의 경우 하이퍼파라미터 설정이 모델 성능에 크게 작용할 수 있습니다.
num_leaves,learning_rate,n_estimators등 여러 파라미터를 조정해 볼 수 있습니다.
- 랜덤 시드: 코드에서 설정한
random_state를 다양한 값으로 변경해 보면서 결과를 확인해보세요. 단, 비교할 때는 동일한 시드로 일관성 있게 유지하는 것이 중요합니다.
- 모델 하이퍼파라미터 튜닝: LightGBM의 경우 하이퍼파라미터 설정이 모델 성능에 크게 작용할 수 있습니다.
성능 평가 지표:
root_mean_squared_error는sklearn라이브러리에서는 직접 제공되지는 않습니다. 일반적으로mean_squared_error를 통해 RMSE를 구할 수 있습니다.mean_squared_error의 결과에 대해 제곱근을 취하는 방식입니다.
rmse = mean_squared_error(y_val, pred, squared=False)
print('RMSE:', rmse)
질문하신 내용과 방법론에 따른 상황에 대한 해결을 위해 이에 유사한 기존 질문과 답변을 함께 참조해주시기 바랍니다.
이 게시글에는 트레인-테스트 분할 방법 및 전반적인 모델링 전략에 대해 논의된 부분이 있어 참조하시기 바랍니다. 특히, 데이터셋의 차원이나 모델별 하이퍼파라미터 튜닝 전략 관련한 다양한 접근이 담겨 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
수강 연장 문의드립니다.
0
32
2
강의 연장 문의
0
35
2
수강 신청 연장 문의드립니다.
0
49
2
작업형 1번문제... 환경관련
0
32
2
12회 기출은 언제 업데이트 될까요??
0
41
2
8/6 작성한 연장문의 질문글에 대한 재요청
0
39
2
수강기간 연장 문의
0
41
2
수강기간 연장문의
0
37
2
수강기간 연장 요청 문의드립니다
0
38
2
수강 기간 연장 문의
0
47
2
수강연장 가능 문의 (기간 약 한달반)
0
60
2
수강기간 연장 가능할까요 선생님
0
74
2
Section15. 수업에 사용하는 데이터 주소가 다 보이지 않아서 실습을 위한 데이터를 다운 받지 못하고 있습니다.
0
56
3
수강연장요청 문의
0
92
2
아무래도 다음 시험 연장은 어렵겠죠?
0
111
2
빅분기 12회 결과 관련 문의
0
114
1
책이랑 강의랑 순서나 예제가 다른것 같네요
0
83
2
수강연장 문의
0
107
2
재검토 요청 방법 좀 알려주셔요...-.-;;
0
108
2
12회 실기 질문(작업형 2)
0
94
2
뒤로가기 버튼 같은 것이 있나요?
0
67
1
강의 연장 문의
0
101
2
출력값 질문
0
74
2
수업노트가 어디에 있나요?
0
64
1





