728x90
반응형
머신러닝의 기본 프로세스
- 문제정의, 라이브러리/데이터 불러오기
- 탐색적 데이터 분석 (EDA)
- 데이터 전처리
- 피처엔지니어링
- (Train/Validation 나누기)
- 모델 선택/훈련/평가/최적화
- 예측
- (csv 생성)
이번에 코딩 할 베이스라인1
- 문제정의, 라이브러리 및 데이터 불러오기
- 데이터 전처리 (단순 일괄 처리)
- 모델 선택(, 훈련
- 평가
이번에 코딩 할 베이스라인2
- 훈련/검증용 데이터 분리
- 모델 선택, 훈련
- 의사결정나무
- 랜덤포레스트
- XGBoost
- 평가
문제1
- "<= 50K -> 0"
- "> 50K -> 1"
- 평가: 정확도
- 성인 인구 조사 소득 예측(분류)
- 50K보다 상위 모델은 1 (상위소득) 이하는 0(하위소득) 으로 측정하라
데이터 불러오기, 샘플 체크, 크기 확인하기
# 라이브러리 및 데이터 불러오기
import pandas as pd
X_train=pd.read_csv("X_train.csv")
X_test=pd.read_csv("X_test.csv")
y_train=pd.read_csv("y_train.csv")
# 데이터 크기
print(X_train.shape,X_test.shape,y_train.shape)
# 데이터 샘플
X_train.head(2)
타겟 수 확인하기
y_train에서 확인할 수 있음
# 타겟 수 확인
# y_train.head() 을 찍어보고 나서 아 타겟인 income 이구나 를 알 수 있음
y_train["income"].value_counts()
수치형데이터를 머신러닝에 활용하기
# type확인 수치형 데이터가 무엇인가
X_train.info()
# 수치형 데이터 만 사용하겠음
cols =[
'age',
'fnlwgt',
'education.num',
'capital.gain',
'capital.loss',
'hours.per.week'
]
# 수치형 데이처 통계
X_train[cols].describe()
- 결측값 체크 후 빠르게 0으로 처리하기
- 주의사항은 테스트 데이터도 항상 같이 처리해 줘야함
# 결측값
X_train[cols].isnull().sum()
# 간단한 결측치 처리
X_train = X_train.fillna(0)
# 만약에 결측치를 처리했음 잊어먹지 말고 테스트 데이터도 해줘야함
X_test=X_test.fillna(0)
# 결측치 확인
X_train.isnull().sum()
# 베이스 라인에서는 그외 전처리 및 피처 엔지니어링 생략
타겟 값이 문자로 되어 있으므로 target의 값을 0101 값으로 변경
# 문자로 되어 있기 때문에 target값 변경
# <=50K -> 0
# >50K -> 1
y= (y_train['income'] =='>50K').astype(int)
머신러닝 모델
- 머신러닝 모델은
- 분류기(Classifier) 호출 ➡️ fit() ➡️ predict() - 평가
# 0또는 1을 선택해야하는 분류모델
# 랜덤포레스트
from sklearn.ensemble import RandomForestClassifier
rf= RandomForestClassifier()
rf.fit(X_train[cols],y)
pred = rf.predict(X_test[cols]) # 평가한다
# 데이터 크기 확인
len(X_test)
# 예측 및 csv 파일 생성
#0은 하위 소득 1은 상위소득
pred[:10]
submit = pd.DataFrame(
{'id': X_test['id'],
'income':pred
})
submit.to_csv("1011039.csv",index=False)
# 평가 (수험자는 알 수 없는 부분임) accuracy
from sklearn.metrics import accuracy_score
y_test = pd.read_csv("y_test.csv")
ans = (y_test['income'] == '>50K').astype(int)
accuracy_score(ans, pred)
# ans 는 실제 값이고 pred는 예측값 (내가 작성한 값)
# 80%의 모델 성능이 나옴 !
문제2
- 수험자가 만든 부분을 검증할 수 없어서 검증용 데이터를 구분함
- "<= 50K -> 0"
- "> 50K -> 1"
- 평가: roc_auc 예측 해야할 값은 : 확률
검증용 데이터 분리
# 학습용 데이터와 검증용 데이터로 구분
from sklearn.model_selection import train_test_split
# 테스트 비중은 0.1정도 랜덤스테이트는 그냥 아무거나 좋아하는 숫자 넣어주세요
y = (y_train['income'] == '>50K').astype(int)
X_tr, X_val, y_tr, y_val = train_test_split(X_train, y, test_size=0.1, random_state=2022)
# 데이터 크기
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)
의사결정나무
# 의사결정나무
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier()
dt.fit(X_tr[cols], y_tr) # 학습할 데이터와 타겟
# 문제에서 제시된게 확률 값을 예측해야한다면 proba
pred_dt = dt.predict_proba(X_val[cols])
pred_dt[:10]
# 1은 100%
랜덤포레스트
# 의사결정나무
from sklearn.tree import DecisionTreeClassifier
dt = DecisionTreeClassifier()
dt.fit(X_tr[cols], y_tr)
pred=dt.predict_proba(X_val[cols])
roc_auc_score(y_val,pred[:,1])
XGBoost
# XGBoost
from xgboost import XGBClassifier
xgb = XGBClassifier()
xgb.fit(X_tr[cols], y_tr)
pred=xgb.predict_proba(X_val[cols])
pred[:,1]
CSV 파일 생성
# 평가 데이터로 예측 및 csv파일 생성
from sklearn.metrics import roc_auc_score
roc_auc_score(y_val,pred[:,1])
pred=xgb.predict_proba(X_test[cols])
submit = pd.DataFrame(
{
'id':X_test['id'],
'income':pred[:,1]
}
)
submit.to_csv("22222.csv", index=False)
평가
- 수험자는 알 수 없는 영역임
from sklearn.metrics import roc_auc_score
y_test = pd.read_csv("y_test.csv")
ans = (y_test['income'] != '<=50K').astype(int)
roc_auc_score(ans, pred[:,1])
728x90
'IT&게임 > 빅데이터분석기사(빅분기)' 카테고리의 다른 글
빅데이터분석기사 제2유형 : 분류문제 예제1 (0) | 2024.06.07 |
---|---|
빅데이터분석기사 제2유형 : ⑥ 평가지표 (0) | 2024.06.06 |
빅데이터분석기사 제2유형 : ③ 피처엔지니어 (스케일/인코딩) (2) | 2024.06.06 |
빅데이터분석기사 제2유형 : ② 데이터 전처리 (결측치/이상치) (0) | 2024.06.04 |
빅데이터분석기사 제2유형 : ① EDA (0) | 2024.06.04 |
댓글