본문 바로가기
Daily/Get certificate

[빅분기 실기] 2유형

by HANNI하니 2024. 6. 14.

# 데이터마님

# 7,6,5회 기출 변형

회귀 - 7,5
분류 - 6,4,3
 
# 데이터 로드
import pandas as pd
df = pd.read_csv('')
 
# sklearn 불러오기
from sklearn.model_selection import train_test_split # 데이터 분할
from sklearn.ensemble import RandomForestRegressor # 회귀모델
from sklearn.ensemble import RandomForestClassifier # 분류모델
from sklearn.preprocessing import LabelEncoder # 전처리 - 라벨인코딩
from sklearn.metrics import mean_squared_error, f1_score, roc_auc_score # 평가(문제에서 원하는 거 import)
import numpy as np
 
# 결측치 처리
print(train.isnull().sum())
범주형 변수의 경우 첫번째 값으로 변경 index[0]
숫자형 변수의 경우 mean() 혹은 median()으로 변경
fillna(df.칼럼.median())
여러 변수 한꺼번에 바꾸려면 list나 dic 로 묶어서 for문 돌리기
fillna(fillna_dic[col])

MAX_PROFESSION = train['Profession'].value_counts().index[0]
MEAD_Work_Experience = train['Work_Experience'].mean()
 
fillna_dic = {
    'Ever_Married':MAX_EVER_MARRIED,
    'Graduated':MAX_GRADUATED,
    'Profession':MAX_PROFESSION,
    'Work_Experience':MEAD_Work_Experience,
    'Family_Size':MAX_Family_Size,
    'Var_1':MAX_Var_1
}

for col in fillna_dic.keys():
    train.loc[:,col] = train.loc[:,col].fillna(fillna_dic[col])
    test.loc[:,col] = test.loc[:,col].fillna(fillna_dic[col])

 
# train에서 y와 x 지정해주기
y = train['종속변수명']
x = train.drop(columns='종속변수명')
 
# 라벨 인코딩 - 숫자형으로 변환
# 전처리 - print(train.unique()) 에서 개수너무많은 칼럼 삭제
l = LabelEncoder()
l.fit(x['object변수']
pre_x = x.copy()
pre_x = pre_x.drop(columns = 'ID')
pre_x['object변수'] = l.fit_transform(x['object변수'])
 
# 위의 전처리 test에도 똑같이 적용
test_x = test.drop(columns = 'ID')
test_x['object변수'] = l.fit_transform(x['object변수']
 
# 원핫 인코딩
dum_x = pd.get_dummies(pre_x)
dum_test = pd.get_dummies(test_x)
# train에는 있고, test에는 없는 데이터 존재 (shape() 칼럼숫자 다름) -> reindex해주기
dum_test = dum_test.reindex(columns = dum_x.columns, fill_value = 0)
 
 
# 데이터 분할
x_train, x_test, y_train, y_test = train_test_split(dum_x,y)
 
 
# 모델 학습 및 평가

# 정확도 (accuracy) , f1_score , recall , precision -> model.predict로 결과뽑기
# auc , 확률이라는 표현있으면 model.predict_proba로 결과뽑고 첫번째 행의 값을 가져오기 model.predict_proba()[:,1]
 

rr = RandomForestRegressor(random_state=1)
rr.fit(x_train,y_train)
 
pred = rr.predict(x_test)
pred = rr.predict_proba(x_test) # 구해야하는 게 확률일때
 
print('test rmse', np.sqrt(mean_squared_error(y_test,pred))
print('test f1_score', f1_score(y_test,pred,average='macro')) # 타깃이 multiclass 일 경우 average 지정 필요
print('test auc', roc_auc_acore(y_test,pred)) # 평가지표 auc
print('test auc', roc_acu_score(y_test,pred[:,1])) # 확률은 인덱싱 필요
 
pred_test = rr.predict(dum_test)
 
 
 
# 정답 엑셀 제출
sumission = pd.DataFrame()
sumission['ID'] = test['ID']
sumission['종속변수명'] = pred_test
sumission.head()
sumission.to_csv('엑셀명.csv',index=False)
 

댓글