안녕하세요. 보랏입니다.
오늘은 XGBoost모델 만들기와 Django의 특징, 기초 명령어를 배웠습니다.
복습 시작하겠습니다.
1. XGBoost 모델 만들기 - 붓꽃 데이터 셋
- 어제 배운 XGBoost를 활용하여 사이킷런에서 제공해주는 datasets 분석 모델을 만들었습니다.
import pandas as pd
import numpy as np
from sklearn import datasets
iris = datasets.load_iris()
df = pd.DataFrame(data=np.c_[iris['data'], iris['target']],
columns=iris['feature_names'] + ['target'])
df.head()
from sklearn.model_selection import train_test_split
# 데이터를 훈련 세트와 테스트 세트로 나눕니다.
X_train, X_test, y_train, y_test = train_test_split(iris['data'],
iris['target'], random_state=2)
# XGBoost 분류 모델
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score
xgb = XGBClassifier(booster='gbtree', objective='multi:softprob', #gbtree사용, max_depth : 깊이 설정, learning_rate : 학습율
max_depth=6, learning_rate=0.1, n_estimators=100,
n_jobs=-1)
xgb.fit(X_train, y_train) # X_train, y_train XGB활용 예측
y_pred = xgb.predict(X_test) # X_test를 예측을 활용하여 y_pred변수 생성
score = accuracy_score(y_pred, y_test)
print('점수: ' + str(score)) --> 점수 : 0.973684210526
- accuracy_score()함수 대신 score()메서드를 사용
xgb.score(X_test, y_test)
---> 0.973684210526
- XGBoost의 기본 파이썬 API를 사용 시 부스터(Booster)객체의 predict() 메서드는 multi:softprob일 때 확률을 반환하고 multi:softmax일 때 클래스 레이블을 반환
import xgboost as xgb
dtrain = xgb.DMatrix(X_train, y_train)
dtest = xgb.DMatrix(X_test[:5])
param = {'objective': 'multi:softprob', 'num_class': 3}
bstr = xgb.train(param, dtrain, 10)
bstr.predict(dtest)
param = {'objective': 'multi:softmax', 'num_class': 3}
bstr = xgb.train(param, dtrain, 10)
bstr.predict(dtest)
---> array([0., 0., 2., 0., 0.], dtype=float32)
2. 힉스 보손 찾기 사례연구
df = pd.read_csv('atlas-higgs-challenge-2014-v2.csv.gz', nrows=250000, compression='gzip')
df.head()
- 데이터 프레임 열 정리 및 전처리
df_new = df_h.drop(['Weight', 'KaggleSet', 'Label'], axis=1).assign(Label=df_h['Label'])
df_new = df_new.rename(columns={'KaggleWeight': 'Weight'})
df_new.head()
- df 의 'Label'값은 's', 'b'값이 유일하고 이를 1,0으로 트랜스폼 시키기
df['Label'].replace(('s', 'b'), (1, 0), inplace=True)
- X_new : df_new에서 'EventId', 'Weight', 'Label' 값이 포함된 컬럼 추출
- y_new : df_new에서 'Label'이 포함된 열 모두 출력
X_new = df_new.loc[:, ~df_new.columns.isin(['EventId','Weight','Label'])]
y_new = df_new.loc[:, 'Label']
- LabelEncoder를 통해 1,0값을 학습하고 array형태로 출력
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y_new = le.fit_transform(df_new['Label'])
y_new ---> array([1,0,0,....,1,0,0])
print(le.classes_) ---> ['b','s']
- 측정지표 생성
xgb = XGBClassifier(n_estimators=5)
xgb.fit(X_train, y_train,
eval_set=[(X_train, y_train), (X_test, y_test)],
eval_metric='mlogloss')
- XGBoost 평가 결과확인
xgb.evals_result()
- 가중치 설정
df['test_Weight'] = df['Weight'] * 550000 / len(y)
s = np.sum(df[df['Label']==1]['test_Weight'])
b = np.sum(df[df['Label']==0]['test_Weight'])
b/s ---> 593.9401931492318
- 모델 생성
import xgboost as xgb
# 넘파이 배열로 xgboost.DMatrix 만들기. -999.0는 누락된 값으로 다룹니다.
xgmat = xgb.DMatrix(X, y, missing = -999.0, weight=df['test_Weight'])
# xgboost 파라미터 설정
param = {}
# 랭킹만 필요하기 때문에 로지스틱 함수를 적용하기 전의 출력을 사용합니다.
param['objective'] = 'binary:logitraw'
# 양성 샘플의 가중치를 조정합니다.
param['scale_pos_weight'] = b/s
param['eta'] = 0.1
param['max_depth'] = 6
param['eval_metric'] = 'auc'
# ams 지표를 추가합니다.
plst = list(param.items())+[('eval_metric', 'ams@0.15')]
watchlist = [(xgmat,'train')]
# 120개 트리 부스팅
num_round = 120
print('데이터 로딩 완료, 트리 부스팅 시작')
bst = xgb.train(plst, xgmat, num_round, watchlist)
bst.save_model('higgs.model')
print('훈련 종료')
- 사이킷런 API로 구현
clf = XGBClassifier(n_estimators=120, learning_rate=0.1, missing=-999.0,
scale_pos_weight=b/s)
clf.fit(X, y, sample_weight=df['test_Weight'],
eval_set=[(X, y)], eval_metric=['auc', 'ams@0.15'],
sample_weight_eval_set=[df['test_Weight']])
clf.save_model('higgs-sklearn.model')
- 평가 결과 확인
clf.evals_result()
clf.score(X, y)
---> 0.800476
3. django 실행
- 장고(django)는 웹 프로그래밍에 사용되는 파이썬 웹 프레임워크로 웹 애플리케이션을 프로그래밍 할 수 있는 프레임워크
pip install Django #장고 설치
django-admin startproject mysite #현재 디렉토리에서 mysite라는 디렉토리를 생성
- manage.py: Django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 유틸리티
- first_django/ 디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장되며, 이 디렉토리 내의 이름을 이용하여, (first_Django.urls 와 같은 식으로) 프로젝트의 어디서나 Python 패키지들을 임포트할 수 있음
- first_Django/__init__.py: Python으로 하여금 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일
- first_django/settings.py: 현재 Django 프로젝트의 환경 및 구성을 저장
- first_django/urls.py: 현재 Django project 의 URL 선언을 저장합니다. Django 로 작성된 사이트의 "목차" 라고 할 수 있음
- first_Django/asgi.py: (Asynchronous Server Gateway Interface) Django 3.0부터 지원하는 새로운 기능으로 비동기 웹서버 및 어플리케이션을 만들수 있도록 제공
- first_Django/wsgi.py: 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점
4. django 기본 명령
- django-admin startproject : 장고 프로젝트를 만드는 명령
- startapp : 프로젝트에 기능 단위인 앱을 새로 만들 때 사용
- makwmigrations
- 어플리케이션에 변경 사항을 추적해 DB에 적용할 내용 정리
- 보통 앱 안에 있는 model의 변경 사항이 있을 때 주로 사용
- sqlmigrate
- 실행한 sql명령문 출력
- 어떤 명령문을 실행할지 확인할 때 사용하며, 튜닝이 안된 쿼리나 slow 쿼리 여부를 확인 가능
- migrate : 실제 변경사항을 DB에 반영
- showmigrations : 프로젝트 DB변경사항 목록과 상태 출력
- runserver : 테스트 서버를 실행, 웹 서비스를 실제로 동작시켜 확인할 때 사용
- loaddata : 백업 파일에서 DB로 내용을 복구 할 때 사용
- flush : DB테이블은 그대로 두고 테이블의 내용만 전부 삭제
- dbshell : DB에 직접 접근할 수 있는 쉘을 실행
- createsuperuser : 관리자 계정 생성
- changepassword : 계정의 비밀번호를 변경 가능
오늘은 이렇게 복습 마무리 하겠습니다.
감사합니다.
'DB 공부하기' 카테고리의 다른 글
230410_DB복습 (0) | 2023.04.10 |
---|---|
230406_DB복습 (0) | 2023.04.07 |
230404_DB복습 (0) | 2023.04.04 |
230403_DB복습 (0) | 2023.04.03 |
230329_DB복습 (0) | 2023.03.29 |