작성
·
44
0
원핫 인코딩시, train 과 test의 컬럼의수가 달라지는 경우가 있어서 데이터를 concat 했다가 다시 분리를 해주고 있는데요.
아래와 같이 코딩시 답안 제출까지는 가능하지만, 강사님께서 풀이한 것과 값차이가 많이 납니다.
이렇게 하면 안되나요?
import pandas as pd train = pd.read_csv('churn_train.csv') test = pd.read_csv('churn_test.csv') y=train.pop('TotalCharges') print (train.shape, test.shape, y.shape) total = pd.concat([train, test], axis=0) total=total.drop('customerID',axis=1) # print (total.shape) cols=total.select_dtypes(include = 'object').columns total = pd.get_dummies (total[cols]) train = total[:4116] test = total[4116:] print (train.shape, test.shape, y.shape) from sklearn.model_selection import train_test_split X_train, X_val, y_train, y_val = train_test_split(train, y, test_size=0.2, random_state=0) print(X_train.shape, X_val.shape, y_train.shape, y_val.shape) from sklearn.ensemble import RandomForestRegressor rf = RandomForestRegressor() rf.fit(X_train, y_train) pred=rf.predict(X_val) pred from sklearn.metrics import mean_absolute_error mae = mean_absolute_error (y_val, pred) print(mae) # 결과값 제출 result = rf.predict(test) # print(result.shape, test.shape) print(result) result = pd.DataFrame ({ 'total price':result }) result.to_csv("result.csv", index=False) print(result) # help(sklearn) # import sklearn # help(sklearn.metrics )
답변 2
0
안녕하세요, 인프런 AI 인턴입니다. 장한문님의 질문에 답변드리겠습니다.
장한문님께서 작성하신 코드는 데이터 전처리와 머신러닝 모델링 과정에서 일반적으로 자주 사용되는 방식입니다. 하지만 일부 오류와 주의해야 할 부분들이 존재합니다.
데이터 전처리 및 컬럼 수 일치: 장한문님께서 train과 test 데이터를 합쳐서 원핫 인코딩을 진행하신 것은 적절한 접근 방식입니다. 하지만 total = pd.get_dummies(total[cols])
부분에서 수치형 데이터를 포함하지 않고 오직 범주형 데이터만을 다루고 있습니다. 이렇게 하면 수치형 데이터가 사라지는 문제가 발생할 수 있습니다. 따라서, pd.get_dummies를 적용함에 있어 total
전체에 대해 적용해야 합니다.
데이터 분할: 원핫 인코딩 이후에 올바르게 데이터를 분리하고 있는지 확인이 필요합니다. 데이터의 인덱스를 기준으로 따로 분리하는 문제입니다. total[:4116]
과 total[4116:]
에서 데이터를 분리할 때, 총 행 수가 잘못 처리되는 경우도 고려해야 합니다.
리그레이션 평가 기준: RandomForestRegressor는 회귀 모델이므로, 성능 평가를 Mean Absolute Error(MAE) 대신 다른 평가 기법을 사용할 수도 있습니다. 성능이 다른 이유는 라벨과 피처의 불일치, 데이터 전처리 문제, 모델 하이퍼파라미터 설정 등이 있을 수 있습니다.
중요한 열 삭제 확인: ‘customerID’는 인덱스나 식별자 열로 삭제할 수 있지만, 다른 중요한 열들이 누락되지 않았는지 확인이 필요합니다.
장한문님의 코드상 오류를 해결하기 위한 기존 게시물이나 문제 해결 도움을 줄 수 있는 링크는 다음과 같습니다:
이 링크들에서는 데이터 병합, 원핫 인코딩, 모델 학습과 예측의 전반적인 과정에서 유의해야 할 점들을 다루고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
글을 쓸때는 깔끔하게 줄이 보였는데, 읽을때는 보기 어렵게 되었네요.. 그래도 확인해주셔서 감사드립니다! 덕분에 해결했습니다.