본문 바로가기
DB 공부하기

230327_DB복습

by 보랏 2023. 3. 27.

안녕하세요. 보랏입니다.

 

오늘 새로운 한 주가 시작되어 복습 내용 작성하겠습니다.

오늘 배운 내용은 머신러닝 선형회귀 내용과 docker 설정 내용을 배웠습니다.

 

바로 복습시작하겠습니다. 

 

 

1. Statsmodels 패키지

  • statsmodel 패키지 : 추정 및 검정, 회귀분석, 시계열 분석 등의 기능을 제공하는 파이썬 패키지
    • 예제 데이터셋
    • 검정 및 모수추정
    • 회귀분석, 선형회귀, 강건회귀
    • 일반화 선형모형
    • 혼합효과모형
    • 이산종속변수, 시계열분석 등

 

2. 선형회귀

  • 선형회귀 : 특성이 하나인 어떤 직선을 학습하는 알고리즘

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
# 선형 회귀 모델 훈련
lr.fit(train_input, train_target)
# 50cm 농어에 대한 예측
print(lr.predict([[50]])) # 예측값 : [1241.83860323]
print(lr.coef_, lr.intercept_) # 정확성 : y = 39.017 * 농어길이 - 709 -> 데이터를 보고서 학습

 

3. 통계 패키지의 선형회귀

import statsmodels.api as sm
import statsmodels.formula.api as smf

y = perch_weight
X = perch_length
X = sm.add_constant(X)

linear_regression = sm.OLS(y, X) # 선형회귀 계산 세팅
fitted_model = linear_regression.fit() # 회귀계수 추정
fitted_model.summary()

  • summary()
    • Dep. Variable : 목표변수
    • model : 적합모델 표시, OLS(ordinary least squares)
    • method : 파라미터 적합 방법 표시 (least squares : 최소제곱 방법)
    • No.Observations : 사용된 관찰 개수 표시
    • DF Residuals :잔차의 자유도 표시, 관찰 개수에서 파라미터의 수를 뺀 값
    • DF model : 모델에서 추정하는 파라미터의 개수(상수항은 제외)
      • R-squared : 결정계수, 회귀가 단순편균과 관련하여 얼마나 잘 수행되었는지 확인
      • Adj R-squeared : 모델의 파라미터 개수와 모델 구축에 도움이 된 관찰 개수에 따라 조정된 결정계수
      • F-statistic : 통계적 관점에서 볼 때 편향을 제외한 모든 계수가 0과 다른지 나타내는 척도(회귀가 단순평균보다 나은지 확인)
      • Prob(F-statistic) : 실제로 사용된 관찰로 인해 운 좋게 F-statistic에 도달할 확률을 나타내며,p-value값으로 부름
      • → 그 값이 충분히 낮다면 회귀가 단순평균보다 훨씬 더 좋다는 것을 나타냄
      • AIC : 관찰 개수와 모델 자체의 복잡성을 기반으로 모델을 평가하는 점수, AIC점수가 낮을수록 좋음

      • coef : 추정계수
      • std err : 계수 추정치의 표준오차로, 값이 크면 클수록 계수 추정치의 불확실성이 높아짐
      • t : t-value으로 계수의 참값이 0과 다른지를 나타내는 척도
      • Conf.Interval : 다른 관찰값과 추정계수가 다를 수 있는 모든 가능서에 대해 계수의 상한값과 하한값 모두 95%로 고려
      → 데이터 과학 관점에서는 대부분 응답변수를 예측하는 동안 회귀가 작동하는지 여부를 확인하는 데에만 주로 관심이 있기 때문에 t-test와 신뢰 영역은 별로 중요하게 생각하지 않는다. 따라서 coef 값과 표준오차에만 초점을 맞출 것이다

 

4. 비용함수 최소화

  • 선현회귀의 핵심은 직선의 y값과 원래 값 사이의 차이에 대한 제곱 오차의 한계를 최소화할 수 있는 선의 방정식을 찾는 것
    • scipy패키지가 제공하는 fmin최소화 프로시저를 사용하면 하나의 벡터에 대해 최소 제곱 한계를 만드는 값을 계산
    • 제곱오차 사용 이유
      • 음수값을 제거, 따라서 정반대의 오차를 합산할 때 서로 상쇄하지 않음
      • 차이를 더 크게 강조 
import numpy as np
x = np.array([9.5, 8.5, 8.0, 7.0, 6.0])
y = np.array([85, 95, 70, 65, 70])

def squared_cost(v,e):
 return np.sum((v-e)**2)

from scipy.optimize import fmin
xopt = fmin(squared_cost, x0=0, xtol=1e-8, args=(x,))

-> Optimizaion terminated successfully.
         Current function value: 7.300000
         Iterations: 44
         Function evaluations: 88

print ('The result of optimization is %0.1f' % (xopt[0]))
print ('The mean is %0.1f' % (np.mean(x)))

-> 
The result of optimization is 7.8
The mean is 7.8

 

5. docker 설정

  • docker 컨테이너를 생성할 때마다 python설정, db설정 등을 진행해야 되는데, 이를 한 번에 편하게 진행할 수 있도록 설정하는 방법을 배웠습니다. 
    • cmd -> wsl 
    • sudo service docker start (docker접속)
    • sudo service docker status (docker 상태 확인)
  • 설정 방법
    • sudo docker run -it --name mycom ubuntu:22.04 (우분투 22.04 os에 mycom이름에 docker 생성)
    • apt update (주요 프로그램 다운 받기전 업데이트)
  • docker file 및 requirement.txt파일 설정
# ./Dockerfile 
FROM python:3
WORKDIR /usr/src/app

## Install packages
COPY requirements.txt ./
RUN pip install -r requirements.txt

## Copy all src files
COPY . .

## Run the application on the port 8080
EXPOSE 8000

# gunicorn 배포 명령어
# CMD ["gunicorn", "--bind", "허용하는 IP:열어줄 포트", "project.wsgi:application"]
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "model_service.wsgi:application"]
## requirements.txt
absl-py==1.4.0
asgiref==3.6.0
astunparse==1.6.3
beautifulsoup4==4.12.0
bs4==0.0.1
cachetools==5.3.0
certifi==2022.12.7
charset-normalizer==3.1.0
Django==4.1.7
djangorestframework==3.14.0
flatbuffers==1.12
gast==0.4.0
google-auth==2.16.3
google-auth-oauthlib==0.4.6
google-pasta==0.2.0
grpcio==1.51.3
h5py==3.8.0
idna==3.4
importlib-metadata==6.1.0
jax==0.4.6
keras==2.9.0
Keras-Preprocessing==1.1.2
libclang==16.0.0
lxml==4.9.2
Markdown==3.4.3
MarkupSafe==2.1.2
mysqlclient==2.1.1
numpy==1.23.5
oauthlib==3.2.2
opt-einsum==3.3.0
packaging==23.0
pandas==1.5.3
Pillow==9.4.0
pip-chill==1.0.1
protobuf==3.19.6
pyasn1==0.4.8
pyasn1-modules==0.2.8
python-dateutil==2.8.2
pytz==2022.7.1
requests==2.28.2
requests-oauthlib==1.3.1
rsa==4.9
scipy==1.10.1
six==1.16.0
sklearn==0.0.post1
soupsieve==2.4
sqlparse==0.4.3
tensorboard==2.9.1
tensorboard-data-server==0.6.1
tensorboard-plugin-wit==1.8.1
tensorflow==2.9.0
tensorflow-estimator==2.9.0
tensorflow-io-gcs-filesystem==0.31.0
termcolor==2.2.0
typing_extensions==4.5.0
urllib3==1.26.15
Werkzeug==2.2.3
wrapt==1.14.1
zipp==3.15.0
  • 해당 파일을 폴더에 설치 
    • docker build -t serving:0.1 ./ : 현재 폴더에 있는 docker file과 requirements.txt파일을 활용하여 serving:0.1이라는 docker 컨테이너 생성
    • docker run -d --name test7 -p 8000:8000 serving:0.1 : 현재까지 설정한 이미지 파일을 port 8000번, test7으로 저장 
    • docker save -o serving.tar serving:0.1 : 현재까지 설정한 이미지 파일을 serving.tar로 압축하여 저장

 

 

오늘은 오전에 머신러닝 분석, docker를 배웠습니다.

docker는 아직 사용할 때마다 어렵네요...

 

복습은 이렇게 마치겠습니다.

 

감사합니다.

'DB 공부하기' 카테고리의 다른 글

230403_DB복습  (0) 2023.04.03
230329_DB복습  (0) 2023.03.29
230323_DB복습  (0) 2023.03.23
230322_DB복습  (0) 2023.03.22
230314_DB복습  (0) 2023.03.14