인프런 커뮤니티 질문&답변
궁금한 점 있습니다!
해결된 질문
작성
·
37
0
# 출력을 원하실 경우 print() 함수 활용
# 예시) print(df.head())
# getcwd(), chdir() 등 작업 폴더 설정 불필요
# 파일 경로 상 내부 드라이브 경로(C: 등) 접근 불가
import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
pd.set_option("display.max_columns", None)
train['환불금액'] = train['환불금액'].fillna(0)
test['환불금액'] = test['환불금액'].fillna(0)
train = train.drop("회원ID", axis = 1)
test = test.drop("회원ID", axis = 1)
target = train.pop("총구매액")
#print(train.describe(include = 'O'))
#print(test.describe(include = 'O'))
total = pd.concat([train,test])
nums = total.select_dtypes(exclude = 'object').columns
cols = total.select_dtypes(include = 'object').columns
from sklearn.preprocessing import MinMaxScaler
mx = MinMaxScaler()
total[nums] = mx.fit_transform(total[nums])
from sklearn.preprocessing import LabelEncoder
for col in cols:
le = LabelEncoder()
total[col] = le.fit_transform(total[col])
train = total.iloc[:3500]
test = total.iloc[3500:]
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 = 2022)
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(random_state = 2022, max_depth = 10,n_estimators = 800)
model.fit(x_tr,y_tr)
pred = model.predict(x_val)
#81957423.82110961
pred = model.predict(test)
re = pd.DataFrame({"pred":pred})
re.to_csv("result.csv",index=False)
v = pd.read_csv("result.csv")
print(v.shape)
강사님 안녕하세요 짧은 지식으로 2유형을 혼자 풀어보고 나서 강의를 들었는데 라벨 인코딩은 set 을 활용해서 train 안에 test 데이터가 다 있다면 따로 합치지 않아도 된다는걸 이제야 알았습니다! 혹시 저처럼 합쳐서 라벨인코딩을 진행하게되면 모델 성능에 큰 영향을 미칠까요? 그리고 합치게 된다면 그냥 원핫 인코딩으로 일관되게 쓰면 되는지도 궁금합니다
답변 2
0
안녕하세요~ 제가 영상에서 보여드린 것처럼
평가지표를 기준으로 결정을 하면됩니다.
미치는 영향은 데이터에 따라 달라져요 🙂
그냥 원핫만 일관되게 사용하셔도 됩니다.
0
안녕하세요, 인프런 AI 인턴입니다. eovnfjfpa님.
라벨 인코딩과 원핫 인코딩은 범주형 데이터를 숫자형으로 변환하기 위한 두 가지 대표적인 방법입니다. 질문 주신 부분에서 합친 데이터를 인코딩 처리할 때의 장단점과 모델의 성능에 미칠 영향에 대해 설명드리겠습니다.
라벨 인코딩 시, 합친 데이터를 사용하는 이유:
- 일관성 유지: train과 test 데이터를 별도로 라벨 인코딩하면 각 데이터셋에서 고유값이 다르게 매핑될 위험이 있습니다. 이를 방지하기 위해 두 데이터셋을 concat하여 같은 라벨 값이 동일한 숫자로 매핑되도록 하는 것이 중요합니다.
- 잠재적 문제점: 모델이 숫자의 크기를 중요하게 여길 수 있습니다. 이는 특정한 범주가 다른 범주보다 우위에 있다고 잘못 해석할 수 있습니다. 특히, 순서가 없는 범주형 변수의 경우 이는 문제로 작용할 수 있습니다.
- 일관성 유지: train과 test 데이터를 별도로 라벨 인코딩하면 각 데이터셋에서 고유값이 다르게 매핑될 위험이 있습니다. 이를 방지하기 위해 두 데이터셋을 concat하여 같은 라벨 값이 동일한 숫자로 매핑되도록 하는 것이 중요합니다.
라벨 인코딩 대신 원핫 인코딩 활용:
- 장점: 원핫 인코딩은 범주형 데이터의 순서성을 제거하므로, 모델이 범주형 변수의 크기에 대해 오해하지 않도록 도와줍니다. 합친 데이터에 원핫 인코딩을 적용하면, 모든 범주에 대해 동일한 구조의 열을 생성하여 일관성을 가지게 됩니다.
- 고려사항: 데이터셋이 매우 큰 경우, 열의 개수가 급격히 늘어날 수 있습니다. 이는 계산 비용을 증가시킬 수 있으므로, 메모리 및 연산 부담을 염두에 두고 적용하시면 좋습니다.
- 장점: 원핫 인코딩은 범주형 데이터의 순서성을 제거하므로, 모델이 범주형 변수의 크기에 대해 오해하지 않도록 도와줍니다. 합친 데이터에 원핫 인코딩을 적용하면, 모든 범주에 대해 동일한 구조의 열을 생성하여 일관성을 가지게 됩니다.
모델 성능에 대한 영향:
- 올바른 인코딩 방법을 선택하는 것은 모델의 성능에 큰 영향을 미칠 수 있습니다. 특히, 과대적합을 방지하고 일반화 성능을 높이기 위해 인코딩 방법을 신중하게 선택해야 합니다.
- 문제의 맥락에 따라 다르지만, 일반적으로 원핫 인코딩이 보다 안정적인 결과를 제공할 수 있습니다.
- 올바른 인코딩 방법을 선택하는 것은 모델의 성능에 큰 영향을 미칠 수 있습니다. 특히, 과대적합을 방지하고 일반화 성능을 높이기 위해 인코딩 방법을 신중하게 선택해야 합니다.
관련하여 도움이 될 만한 질문 URL을 참고하세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





