안녕하세요. 보랏입니다.
오늘 ORM(객체관계맵핑 데이터베이스)와 XGBoost코드를 배웠습니다.
복습시작하겠습니다.
1. ORM(Object Relational Mapping)
- Object Relational Mapping(객체-관계-매핑)의 약자
- 객체와 데이터베이스의 관계를 매핑해주는 도구
- 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 도구
- 프로그래밍 언어의 객체와 관계형 데이터베이스 사이의 중계자(통역자) 역할
- MVC패턴에서 모델을 기술하는 도구 & 객체와 모델 사이의 관계를 기술하는 도구
MVC(MVC design pattern)
- 소프트웨어 설계와 관련된 디자인 패턴으로, 소프트웨어 공학에서의 ‘흔히 사용되는’ 설계 패턴을 의미
ORM사용이유
- 객체 지향 프로그래밍은 클래스를 이용하고 관계형 데이터베이스는 테이블을 이용하는데 객체 모델과 관계형 모델간의 불일치 존재
- ORM을 이용해서 데이터베이스 접근을 프로그래밍 언어의 관점에서 맞출 수 있음
- ORM을 이용해서 객체 간의 관계를 바탕으로 sql을 자동으로 생성하여 불일치를 해결
- sql문을 직접 작성하지 않고 엔티티를 객체로 표현 가능
- ORM을 이용해서 객체를 통해 간접적으로 DB를 다룰수 있음
ORM장점
- 직관적인 코드(가독성) + 비지니스 로직 집중 가능(생산성)
- ORM을 이용하면 SQL 쿼리가 아닌 메서드로 데이터를 조작 가능
- → 프로그래머가 객체 모델로 프로그래밍하는 것에 더 집중 가능
- 각종 객체에 대한 코드를 별도로 작성하기 때문에 코드 가독성을 높여줌
- SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 생산성 증가
- 재사용 및 유지보수 편리성 증가
- ORM은 디자인 패턴을 견고하게 만드는 데 유리
- 독립적, 재활용 가능
- DBMS에 대한 종속성 저하
- 객체 간 관계를 바탕으로 SQL을 자동으로 생성하여 RDBMS의 데이터 구조 및 프로그래밍 언어의 객체 모델 사이의 간격을 좁힘
ORM 단점
- 완벽한 ORM으로만 서비스 구현이 어려움
- 사용하기는 편리하지만 설계는 신중해야함
- 프로그램의 복잡성이 커질 경우 난이도가 높음
2. iris_data XGBoost코드
from xgboost import XGBClassifier
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
### (1) 두 배열을 왼쪽에서 오른쪽으로 붙이기
: np.r_[a, b]
: np.hstack([a, b])
: np.concatenate((a, b), axis = 0)
### (2) 두 배열을 위에서 아래로 붙이기
: np.r_[[a], [b]]
: np.vstack([a, b])
: np.concatenate((c, d), axis = 1) # for 2D ~ array
### (3) 두 개의 1차원 배열을 칼럼으로 세로로 붙여서 2차원 배열 만들기
: np.c_[a, b]
: np.column_stack([a, b])
: np.concatenate((c.T, d.T), axis = 1) # for 2D~ array
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= 42)
from sklearn.metrics import accuracy_score
xgb = XGBClassifier(booster = 'gbtree', objective = 'multi:softprob', max_depth = 6,
learning_rate = 0.1, n_estimators = 100, n_jobs = -1)
xgb.fit(X_train, y_train)
accuracy_score(xgb.predict(X_test), y_test) -> 1.0
X, y = datasets.load_diabetes(return_X_y=True)
from sklearn.model_selection import cross_val_score
from xgboost import XGBRegressor
xgb_reg = XGBRegressor(booster='gbtree', objective='reg:squarederror', max_depth=6,
learning_rate = 0.1, n_estimators=100, n_jobs=-1)
'DB 공부하기' 카테고리의 다른 글
230406_DB복습 (0) | 2023.04.07 |
---|---|
230405_DB복습 (0) | 2023.04.05 |
230403_DB복습 (0) | 2023.04.03 |
230329_DB복습 (0) | 2023.03.29 |
230327_DB복습 (0) | 2023.03.27 |