해결된 질문
작성
·
46
0
7회 2유형에서 아래와 같이 코딩을 했는데 에러가 발생합니다. 에러기 왜 발생하는지 모르겠습니다.
에러는 train_test_split 함수에서 "TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union" 라고 나옵니다
import pandas as pd
train = pd.read_csv('churn_train.csv')
test = pd.read_csv('churn_test.csv')
y=train.pop('TotalCharges')
# print(test.head())
# print(train.shape, test.shape)
# print(y.describe())
total = pd.concat([train, test],axis=0)
# print (total.shape)
total = total.drop('customerID',axis=1)
# print (total.shape)
total=pd.get_dummies(total)
# print (total.shape)
# print(total.head())
train = total[0:4116]
test = total[4116:]
# print(train.shape, test.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=2024)
# print(X_train.head())
# 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)
pred1=rf.predict(X_val)
from sklearn.metrics import mean_squared_error
print((mean_squared_error(pred1, y_val))**(1/2))
pred= rf.predict(test)
result=pd.DataFrame=({
'pred':pred
})
result.to_csv('result.csv', index=False)
답변 4
0
0
눈에 보이는 에러는
pred= rf.predict(test)
result=pd.DataFrame=({
'pred':pred
})
가 아닌 아래 와 같아요!
pred= rf.predict(test)
result=pd.DataFrame({
'pred':pred
})
그런데 지금 에러는 그 에러는 아닌 다른 에러입니다.
데이터의 문제로 보여지는데 잘 되는 데이터가 갑자기 안되는 상황이네요!! 파악후 댓글드릴게요!
0
0
안녕하세요, 인프런 AI 인턴입니다. 장한문님.
train_test_split
함수에서 발생하는 “TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union” 에러는 train_test_split
함수 내부에서 데이터가 예상한 타입이 아닐 때 발생할 수 있습니다. 이 오류는 일반적으로 입력 파라미터가 올바르지 않은 경우에 나타납니다.
장한문님께서 제공해주신 코드에서 이러한 오류가 발생할 수 있는 몇 가지 시나리오를 검토해 보겠습니다.
train
과 y
의 길이 불일치 문제:
y
를 train.pop('TotalCharges')
로 정의하였는데, 이후 train
과 y
가 재정의되거나 변경된 적은 없습니다. 다만, train
의 길이가 처음에 정의된 상태와 달리 변할 수 있기 때문에, train_test_split
호출 시 데이터의 길이가 일치하지 않을 수 있습니다.에러 발생 원인:
train_test_split
함수는 보통 특성과 레이블의 배열이 동일한 첫 번째 차원(즉, 각각의 샘플의 개수)에서 동일해야 하는데, 코드 실행 중 X
와 y
의 배열이 일치하지 않는다면 위의 오류가 발생할 수 있습니다. 이 문제가 발생하면 train
의 처음 정의된 상태가 아닌, 이후 변경된 상태에서의 행 수에 주의해야 합니다.이를 해결하기 위해서는 다음과 같은 점검 과정을 제안드립니다:
train
과 y
의 길이가 처음과 일치하는지 확인해 보시길 권장합니다. 특히, total
로 데이터를 병합하고 나누는 과정에서 train
과 total
의 인덱스가 올바르게 설정되었는지 확인하세요.
y
를 생성할 때의 상태와 train
에서 불필요한 행이 포함되지 않는지 점검합니다.
train_test_split
을 사용할 때, train
과 y
모두 동일한 길이인지 확인합니다.
아래는 유사한 문제에 대한 기존 답변을 참고하여 작업형 2유형 문제를 해결하는 기존 게시글입니다. 문제 해결을 위해 이 게시글도 참고해 보시기 바랍니다:
이 답변에서는 데이터 전처리 및 train_test_split
와 같은 데이터셋 분할에서 발생할 수 있는 가장 일반적인 문제를 다룹니다. 장한문님의 코드에서의 오류 해결에 많은 힌트를 얻을 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.