해결된 질문
작성
·
286
0
섹션12 작업형 2회 기출유형
아래처럼 풀이했을 때, TypeError: float() argument must be a string or a real number, not 'LabelEncoder' 오류메시지 뜹니다. 어디서 오류가 난건지 이러한 풀이방법은 잘못된건지 알 수 있을까요?
# EDA
X_train = X_train.drop(columns = ['ID'])
X_test_id = X_test.pop('ID')
y_train = y_train.drop(columns = ['ID'])
# 수치형 데이터 스케일링
num = ['Customer_care_calls', 'Customer_rating', 'Cost_of_the_Product', 'Prior_purchases', 'Discount_offered', 'Weight_in_gms']
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
X_train[num] = scaler.fit_transform(X_train[num])
X_test[num] = scaler.fit_transform(X_test[num])
# 범주형 데이터 원핫인코딩
cols = ['Mode_of_Shipment', 'Product_importance', 'Gender']
X_train = pd.get_dummies(data = X_train, columns = cols)
X_test = pd.get_dummies(data = X_test, columns = cols)
# 범주형 데이터 라벨인코딩
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
X_train['Warehouse_block'] = encoder.fit(X_train['Warehouse_block'])
X_test['Warehouse_block'] = encoder.fit(X_test['Warehouse_block'])
# 분리
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size = 0.2, random_state = 2023)
# 모델 및 평가
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
model.fit(X_tr, y_tr)
pred = model.predict_proba(X_val)
# 평가
from sklearn.metrics import roc_auc_score
roc_auc_score(y_val, pred[:, 1])
답변 1
0
우선 에러가 난 곳은 인코딩 부분입니다. 아래과 같이 변경이 필요합니다. 둘다 fit만 하네요!
X_train['Warehouse_block'] = encoder.fit_transform(X_train['Warehouse_block'])
X_test['Warehouse_block'] = encoder.transform(X_test['Warehouse_block'])
그리고 수정해야할 부분은 # 수치형 데이터 스케일링 X_test은 transform만 사용해주세요!
X_train[num] = scaler.fit_transform(X_train[num])
X_test[num] = scaler.transform(X_test[num])
마지막 제일 중요한 csv 생성부분이 제일 중요하니 연습많이 해주세요!!
화이팅입니다.
네 감사합니다!