해결된 질문
작성
·
34
0
#1. 문제탐색
# 회귀모델 csv id,price
# target : price
# R-Squared, MAE, MSE, RMSE, RMSLE, MAPE
# 2. 데이터불러오기
import pandas as pd
import numpy as np
train = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/ab_nyc/train.csv")
test = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/ab_nyc/test.csv")
# train = pd.read_csv("train.csv")
# test = pd.read_csv("test.csv")
#3 데이터 탐색
#print(train.shape, test.shape)
#print(train.head(3), test.head(3))
#print(train.isnull().sum(), test.isnull().sum())
#print(train.info(), test.info())
#4. 데이터 전처리
#print(train.shape, test.shape)
cols = ['name', 'host_name', 'host_id']
train = train.drop(cols, axis =1 )
test = test.drop(cols, axis =1 )
#print(train.shape, test.shape)
train['last_review'] = train['last_review'].mode(0)
test['last_review'] = test['last_review'].mode(0)
train['reviews_per_month'] = train['reviews_per_month'].fillna(0)
test['reviews_per_month'] = test['reviews_per_month'].fillna(0)
#변수부여
target = train.pop('price')
train = train.drop('id', axis=1)
id = test.pop('id')
cols = train.select_dtypes(include = 'object').columns
#print(train.shape, test.shape)
#레이블인코딩
from sklearn.preprocessing import LabelEncoder
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, target, test_size = 0.2, random_state = 2)
#6.모델 학습 및 평가
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state = 2)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error, mean_absolute_percentage_error
mae = mean_absolute_error(y_val, pred)
mse = mean_squared_error(y_val, pred)
mape = mean_absolute_percentage_error(y_val, pred)
rmse = np.sqrt(mean_squared_error(y_val, pred))
print(f"mae: {mean_absolute_error(y_val, pred)}")
print(f"mse: {mean_squared_error(y_val, pred)}")
print(f"mape: {mean_absolute_percentage_error(y_val, pred)}")
pred = rf.predict(test)
submit = pd.DataFrame({'id' : id, 'price' : pred})
submit.to_csv("0516.csv", index = False)
pd.read_csv("0516.csv")
안녕하세요 모의문제 2-2번 레이블 인코딩으로 작성했는데 피드백주실 사항 있으실까요?
이 문제도 원핫인코딩으로 진행해야할까요?
답변 3
0
카테고리가 다르다면 train과 test 데이터를 합쳐서 진행이 필요합니다.
df = pd.concat([train, test])
df = pd.get_dummies(df)
# 다시 분리
train = df.iloc[:len(train)]
test = df.iloc[len(train):]
print(train.shape, test.shape)
0
#1. 문제탐색
# 회귀모델 csv id,price
# target : price
# R-Squared, MAE, MSE, RMSE, RMSLE, MAPE
# 2. 데이터불러오기
import pandas as pd
import numpy as np
train = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/ab_nyc/train.csv")
test = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p2/ab_nyc/test.csv")
# train = pd.read_csv("train.csv")
# test = pd.read_csv("test.csv")
#3 데이터 탐색
#print(train.shape, test.shape)
#print(train.head(3), test.head(3))
#print(train.isnull().sum(), test.isnull().sum())
#print(train.info(), test.info())
#4. 데이터 전처리
#print(train.shape, test.shape)
cols = ['name', 'host_name', 'host_id']
train = train.drop(cols, axis =1 )
test = test.drop(cols, axis =1 )
#print(train.shape, test.shape)
train['last_review'] = train['last_review'].mode()[0]
test['last_review'] = test['last_review'].mode()[0]
train['reviews_per_month'] = train['reviews_per_month'].fillna(0)
test['reviews_per_month'] = test['reviews_per_month'].fillna(0)
#변수부여
target = train.pop('price')
train = train.drop('id', axis=1)
id = test.pop('id')
# #레이블인코딩
train=pd.get_dummies(train)
test=pd.get_dummies(test)
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 = 2)
# #6.모델 학습 및 평가
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state = 2)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error, mean_absolute_percentage_error
mae = mean_absolute_error(y_val, pred)
mse = mean_squared_error(y_val, pred)
mape = mean_absolute_percentage_error(y_val, pred)
rmse = np.sqrt(mean_squared_error(y_val, pred))
print(f"mae: {mean_absolute_error(y_val, pred)}")
print(f"mse: {mean_squared_error(y_val, pred)}")
print(f"mape: {mean_absolute_percentage_error(y_val, pred)}")
pred = rf.predict(test)
submit = pd.DataFrame({'id' : id, 'price' : pred})
submit.to_csv("0516.csv", index = False)
pd.read_csv("0516.csv")
말씀하신 대로 원핫인코딩으로 변환했는데 계속 에러가 뜨네요
컬럼 불일치 에러라고 해서 컬럼 비교해봤는데 동일해서요 ㅠㅠㅠ
이걸어떻게해결해야할까요!?
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-14-44571701743b> in <cell line: 0>()
61 print(f"mape: {mean_absolute_percentage_error(y_val, pred)}")
62
---> 63 pred = rf.predict(test)
64 submit = pd.DataFrame({'id' : id, 'price' : pred})
65 submit.to_csv("0516.csv", index = False)
3 frames
/usr/local/lib/python3.11/dist-packages/sklearn/utils/validation.py in _check_feature_names(estimator, X, reset)
2775 message += "Feature names must be in the same order as they were in fit.\n"
2776
-> 2777 raise ValueError(message)
2778
2779
ValueError: The feature names should match those that were passed during fit.
Feature names unseen at fit time:
- last_review_2019-07-01
Feature names seen at fit time, yet now missing:
- last_review_2019-06-23
- neighbourhood_Arden Heights
- neighbourhood_Bay Terrace, Staten Island
- neighbourhood_Breezy Point
- neighbourhood_Castleton Corners
- ...
0
안녕하세요, 인프런 AI 인턴입니다. 이지웡님이 작성하신 모의문제 2-2번 코드를 살펴보고 피드백을 드리겠습니다.
이지웡님이 작성하신 코드는 회귀분석을 위한 데이터 처리 및 모델 학습 과정을 잘 구조화하여 작성하셨습니다. 데이터 불러오기, 전처리, 라벨 인코딩, 모델 학습 및 예측 전반에 걸쳐 체계적으로 진행하였습니다. 몇 가지 유의할 점과 추가 개선 사항을 안내드리겠습니다.
라벨 인코딩 vs 원핫 인코딩
그러나 사용 가능한 메모리와 연산 능력 또는 데이터의 특징에 따라 어떤 인코딩 방법을 사용할 것인지는 상황에 따라 다릅니다.
결측값 대체
train['last_review']
와 test['last_review']
의 결측값을 대체하기 위해 최빈값(mode
)을 사용하셨습니다. 다만, train['last_review'].mode(0)
방식이 적절하지 않습니다. .mode()
함수는 반환값으로 Series 객체를 반환하므로, [0]
으로 접근하여 가장 빈번하게 등장하는 값을 참조해야 합니다. 예를 들면: train['last_review'] = train['last_review'].fillna(train['last_review'].mode()[0])
.모델 성능 평가지표
최종 예측 및 제출 파일
submit.to_csv("0516.csv", index=False)
로 예측 결과를 CSV 파일에 저장하는 것은 잘하신 부분입니다. 다만, 예측된 결과를 다시 확인하기 위해 코드를 실행할 때는 제대로 저장되었는지 검토해 보시기 바랍니다.성능 향상을 위한 추가 사항
관련된 문제를 다룬 유사한 질문과 답변의 예시 링크를 통해 더 많은 인사이트를 얻으실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.