해결된 질문
작성
·
42
0
기출 2회 작업형2 문제가 로지스틱 회귀로 분류문제라 랜포를 이용해서 풀이를 하려고 하는데요.
주어진 데이터가 3개라서 concat을 이용해서 X_train과 y_train을 train으로 합쳐서 하려고 하는데 잘 안됩니다ㅜ
train = pd.concat([X_train, y_train['Reached.on.Time_Y.N']], axis=1)
train.head(1)
이 코드에서 'Reached.on.Time_Y.N' 이 컬럼만 없고 나머지는 있어서 얘만 합쳐주는 건가요?
# 데이터 불러오기
import pandas as pd
test = pd.read_csv("X_test.csv")
X_train = pd.read_csv("X_train.csv")
y_train = pd.read_csv("y_train.csv")
#주어진 데이터 3개라서 2개로 만들기(train합치기)
train = pd.concat([X_train, y_train['Reached.on.Time_Y.N']], axis=1)
train.head(1)
# 3. 탐색적 데이터 분석(EDA)
print(train.shape) #1490
print(test.shape) #497
print(train.info())
print(test.info())
print(train.head(3))
print(test.head(3))
print(train.isnull().sum())
print(test.isnull().sum())
print(train['Reached.on.Time_Y.N'].value_counts())
# 4. 데이터 전처리
print(train.info())
# 오브젝트형 있네?->인코딩하자
# print(train.shape, test.shape)
train=pd.get_dummies(train)
test=pd.get_dummies(test)
# print(train.shape, test.shape)
# print(train.info())
train = train.drop('ID', axis=1)
test_id = test.pop('ID')
test.head()
# 5. 검증용 데이터 분할 *XXYY로*
from sklearn.model_selection import train_test_split
target = train.pop('Reached.on.Time_Y.N')
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=7)
print(X_tr.shape, y_tr.shape, X_val.shape, y_val.shape)
# 6. 검증 데이터 머신러닝 학습 및 평가 - 호출, 학습, 예측
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=7)
rf.fit(X_tr,y_tr)
pred = rf.predict_proba(X_val)
from sklearn.metrics import roc_auc_score
roc_auc = roc_auc_score(y_val, pred[:,1])
print('roc_auc:',roc_auc)
# 7. 예측 및 결과 파일 생성
pred=rf.predict_proba(test)
print(pred[:10])
submit = pd.DataFrame({
'ID': test_id, 'Reached.on.Time_Y.N': pred[:,1]
})
submit.to_csv('result.csv',index=False)
# 제출파일 확인
pd.read_csv('result.csv')
pd.read_csv('result.csv').shape
꿀팁 영상 보고 주어진 데이터가 3개일 경우를 정리해본건데 코드가 많이 길지만 결과 나올 수 있게 코드 손 봐주시면 감사하겠습니다TT
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다. 밥풀님께서 기출 2회 작업형 2 문제에 대해 주신 질문에 대해 안내드리겠습니다.
3개의 데이터를 2개로 합치는 과정은 종종 발생합니다. X_train
과 y_train
을 concat
을 통해 합쳐 하나의 train
데이터프레임으로 만드는 것이 일반적인 방법입니다. 이때, y_train
의 특정 컬럼 'Reached.on.Time_Y.N'
만을 사용하여 합치는 것은 타겟 라벨로 사용하기 위함입니다.
작성하신 코드는 대체로 잘 구성되어 있습니다만, 몇 가지 체크해야 할 부분이 있습니다. 아래에 주요 단계별로 설명을 드리겠습니다.
데이터 합치기:
train = pd.concat([X_train, y_train['Reached.on.Time_Y.N']], axis=1)
이 부분에서 X_train
과 y_train
의 타겟 컬럼을 합쳐 새로운 train
데이터프레임을 만드셨습니다. 이로써, train
에는 입력 변수들과 타겟 변수가 같이 포함되어 있습니다.탐색적 데이터 분석(EDA):
train
과 test
데이터에 대해 기본적인 정보 탐색을 진행하고 결측치를 확인하였습니다.데이터 전처리:
pd.get_dummies()
를 사용하여 원핫 인코딩을 수행하셨습니다. 이 과정은 데이터의 모든 범주형 변수를 0과 1로 이루어진 이진 데이터로 변환하여 모델 학습에 적합하게 만듭니다.ID
컬럼을 제거하여 추후 모델 학습에서 제외합니다.모델 학습 준비 및 검증 데이터 분할:
train_test_split
함수를 통해 학습 데이터와 검증 데이터를 분리하셨습니다. 이 단계에서 타겟 변수 'Reached.on.Time_Y.N'
를 train
으로부터 분리하여 별도의 target
변수로 관리하였습니다.모델 학습 및 평가:
예측 및 결과 제출:
X_train
과 y_train
가 정확히 동일한 샘플 순서인지, 또는 두 데이터 간의 행이 일치하는지 점검하세요.pd.get_dummies()
를 할 경우 train
과 test
모두 같은 범주를 갖도록 조정하세요.해당 과정에 대한 추가적인 참고 자료와 유사한 문제 해결 방법을 제공한 기존 게시글이 있습니다. 아래의 링크를 통해 확인해 보세요:
이 자료는 데이터 합치기와 전처리 과정에서 유용한 팁을 제공하여, 문제 해결 시 참고하시면 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.