[시험환경에 적응하기:작업형2] 'DataConversionWarning'이유 알려주세요
작업형2를 아래와 같이 했는데
DataConversionWarning 나왔습니다
검색해보니 y_train 변경때문이며 ravel()을 사용하라고
하는데 이유 설명 부탁 드립니다
[error명]
DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().
[작성내용]
import pandas as pd
X_test = pd.read_csv("data/X_test.csv")
X_train = pd.read_csv("data/X_train.csv")
y_train = pd.read_csv("data/y_train.csv")
pd.set_option('display.max_columns',None)
# 사용자 코딩
#print(X_train.shape,X_test.shape,y_train.shape)
#print(y_train.isnull().sum())
#print(X_train['환불금액'].describe())
X_train['환불금액']=X_train['환불금액'].fillna(X_train['환불금액'].mean())
X_test['환불금액']=X_test['환불금액'].fillna(X_train['환불금액'].mean())
#print(X_train.isnull().sum())
X_train=X_train.drop('cust_id',axis=1)
X_test_id=X_test.pop('cust_id')
y_train=y_train.drop('cust_id',axis=1)
#print(X_test.head(2))
#print(X_train.select_dtypes(exclude='object').columns)
# '주구매상품', '주구매지점'
# '총구매액', '최대구매액', '환불금액', '내점일수', '내점당구매건수', '주말방문비율', '구매주기'
from sklearn.preprocessing import LabelEncoder
cols=['주구매상품', '주구매지점']
for col in cols:
le=LabelEncoder()
X_train[col]=le.fit_transform(X_train[col])
X_test[col]=le.transform(X_test[col])
#print(X_train.head())
from sklearn.preprocessing import MinMaxScaler
cols2=['총구매액', '최대구매액', '환불금액', '내점일수', '내점당구매건수', '주말방문비율', '구매주기']
scaler=MinMaxScaler()
X_train[cols2]=scaler.fit_transform(X_train[cols2])
X_test[cols2]=scaler.transform(X_test[cols2])
#print(X_train.head(2))
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.3, random_state=2023)
#print(X_tr.shape,X_val.shape,y_tr.shape,y_val.shape)
#(2450, 9) (1050, 9) (2450, 1) (1050, 1)
from sklearn.metrics import roc_auc_score
from sklearn.ensemble import RandomForestClassifier
rf=RandomForestClassifier(random_state=2023)
rf.fit(X_tr,y_tr)
pred=rf.predict_proba(X_val)
print(roc_auc_score(y_val,pred[:,1]))
#0.654227735236709
답변 1
0
결론부터 이야기 하면 아래와 같이 코드를 변경하면 워닝 없이 진행됩니다.
# y_train=y_train.drop('cust_id',axis=1)
y_train=y_train['gender']원인: 사이킷럿 fit(X, y) -> y, 학습할 때 y는 1차원 형태인 시리즈 형태여야 합니다. 그런데 drop으로 반환을 받게 되면 데이터프레임을 반환받아 2차원 형태의 데이터프레임으로 y가 생성됩니다.
현상: 예측 결과는 정상적으로 작동하나 워닝(DataConversionWarning)이 발생합니다.
해결방안: y 데이터를 대입할 때는 drop이 아닌 해당 변수를 지정해서 담아주세요!
화이팅입니다:)
수강 연장 문의드립니다.
0
31
2
강의 연장 문의
0
33
2
수강 신청 연장 문의드립니다.
0
49
2
작업형 1번문제... 환경관련
0
32
2
12회 기출은 언제 업데이트 될까요??
0
40
2
8/6 작성한 연장문의 질문글에 대한 재요청
0
39
2
수강기간 연장 문의
0
41
2
수강기간 연장문의
0
37
2
수강기간 연장 요청 문의드립니다
0
38
2
수강 기간 연장 문의
0
47
2
수강연장 가능 문의 (기간 약 한달반)
0
60
2
수강기간 연장 가능할까요 선생님
0
74
2
Section15. 수업에 사용하는 데이터 주소가 다 보이지 않아서 실습을 위한 데이터를 다운 받지 못하고 있습니다.
0
56
3
수강연장요청 문의
0
92
2
아무래도 다음 시험 연장은 어렵겠죠?
0
110
2
빅분기 12회 결과 관련 문의
0
114
1
책이랑 강의랑 순서나 예제가 다른것 같네요
0
83
2
수강연장 문의
0
107
2
재검토 요청 방법 좀 알려주셔요...-.-;;
0
108
2
12회 실기 질문(작업형 2)
0
94
2
뒤로가기 버튼 같은 것이 있나요?
0
67
1
강의 연장 문의
0
100
2
출력값 질문
0
74
2
수업노트가 어디에 있나요?
0
64
1





