빅데이터 분석기사 4회 실기 기출 유형
코드
# 데이터 불러오기
train=pd.read_csv('/kaggle/input/big-data-analytics-certification-kr-2022/train.csv')
test=pd.read_csv('/kaggle/input/big-data-analytics-certification-kr-2022/test.csv')
# 불필요한 컬럼 제거
id=test['ID']
x_train=train.drop(columns=['ID','Segmentation'])
x_test=test.drop(columns=['ID'])
y_train=train['Segmentation']
# # 결측치 확인
# print(x_train.isnull().sum()) # 결측치 없음
# print(x_test.isnull().sum())
# 라벨 인코딩 - 범주형 변수
from sklearn.preprocessing import LabelEncoder
col=['Gender','Ever_Married','Graduated','Profession','Spending_Score','Var_1']
encoder=LabelEncoder()
for i in col:
x_train[i]=encoder.fit_transform(x_train[i])
x_test[i]=encoder.transform(x_test[i])
x_train[i]=x_train[i].astype('category')
x_test[i]=x_test[i].astype('category')
# 더미 변환
x_train=pd.get_dummies(x_train)
x_test=pd.get_dummies(x_test)
# 스케일링 - 수치형 변수
from sklearn.preprocessing import StandardScaler
val=[['Age','Work_Experience','Family_Size']]
scaler=StandardScaler()
for i in val:
x_train[i]=scaler.fit_transform(x_train[i])
x_test[i]=scaler.transform(x_test[i])
# 검증 데이터 분리
from sklearn.model_selection import train_test_split
X_train,X_valid,Y_train,Y_valid=train_test_split(x_train,y_train,test_size=0.2,random_state=10)
# 모델 생성 1(RF)
from sklearn.ensemble import RandomForestClassifier
model1=RandomForestClassifier()
model1.fit(X_train,Y_train)
pred1=model1.predict(X_valid)
# # 모델 생성2(XGB)
# from xgboost import XGBClassifier
# model2=XGBClassifier()
# model2.fit(X_train,Y_train)
# pred2=model2.predict(X_valid)
# ValueError: Invalid classes inferred from unique values of `y`. Expected: [0 1 2 3],got [1 2 3 4]
# # 하이퍼파라미터 튜닝
# from sklearn.model_selection import GridSearchCV
# parameters={'n_estimators':[50,100],'max_depth':[4,6]}
# model3=RandomForestClassifier()
# clf=GridSearchCV(estimator=model3, param_grid=parameters, cv=3)
# clf.fit(X_train,Y_train)
# print('최적의 파라미터: ',clf.best_params_) # {'max_depth': 6,'n_estimators': 100}
# 최종 모델(RF)
model4=RandomForestClassifier(max_depth=6, n_estimators=100)
model4.fit(X_train,Y_train)
pred4=model4.predict(X_valid)
# # 성능 평가
# from sklearn.metrics import f1_score
# print('RF1',f1_score(Y_valid,pred1,average='macro')) # 하이퍼파라미터 튜닝 전 0.4795
# print('RF4',f1_score(Y_valid,pred4,average='macro')) # 하이퍼파라미터 튜닝 후 0.5094
# print('XGB',f1_score(Y_valid,pred2,average='macro')) # 0.4992
# 결과 제출
result=model4.predict(x_test)
pd.DataFrame({'ID':id,'Segmentation':result}).to_csv('submission.csv',index=False)
xgb 모델 사용시 ValueError가 발생한다. 0123 순으로 들어와야 하는데 y_train 값이 1234 순이라 발생하는 것으로 추정.
y 값도 LabelEncoding을 진행해주면 된다는 구글링을 통해 해보았더니 ValueError는 해결됨.
but, 하이퍼파라미터 조정이 성능이 더 좋아지기 때문에 y 값 인코딩은 진행하지 않음.
확실히 다중분류가 이진분류보다 성능이 좋지 않다!
🔽 Kaggle 노트북 | 모델 RandomForestClassifier - 성능 0.32018
반응형