본문 바로가기
ROKEY

[20250206] 파이썬 프로그래밍 - 딥러닝 파이썬 패키지 2

by kode-daks 2025. 2. 6.

수업 목표

- statsmodels 모듈의 기본 함수를 사용할 수 있다.

- scikit-learn 모듈의 기본 함수를 사용할 수 있다.

- scipy 모듈의 기본 함수를 사용할 수 있다.

 

 

1. statsmodels

- 통계적 모델 추정 및 통계적 테스트 실시 및 통계적 데이터 탐색을 위한 클래스와 함수를 제공

- R 스타일 공식과 pandas 데이터프레임을 활요한 모델 지정 지원

 

선형 회귀(Linear regression)

- 회귀 : 레이블이 포함된 데이터를 통해 생성한 모델에 새로운 데이터를 입력하고 결과 값을 예측하는 것

- 독립 변수와 종속 변수 간의 선형 관계를 모델링하는 기법

- 현실의 많은 데이터와 현상이 선의 형태로 설명되는 것이 많다는 점에서 매우 유용함

- H(x) = Wx+b

    * H(x) : 가설

 

statsmodels

import statsmodels.api as sm

- 예제 데이터셋 mtcars

    - 1974년 모터트랜드 US 매거진 데이터

    - 32종 자동차의 10가지 디자인과 성능 특성, 연료 소모량 (mpg-연비, cyl-실린더수, disp-배기량, hp-마력)

data = sm.datasets.get_rdataset("mtcars").data

X = data["hp"] # 마력
y = data["mpg"] # 연비

X = sm.add_constant(X) # 독립 변수에 상수항 추가

model = sm.OLS(y,X).fit() # OLS : 선형 회귀 모델, fit() 학습
print(model.summary()) # 모델 결과 요약하여 출력

 

결과 분석

- No.observations : 총 표본 수

- DF Residuals : 잔차의 자유도 (전체 표본 수에서 측정되는 변수들(종속변수 및 독립변수)의 개수를 뺀 것

- DF Model : 독립변수의 개수

- R-squared : 결정계수로 독립변수가 종속변수를 얼마나 설명해주는지 나타내는 지표

    - 독립변수의 수가 증가하면 상승하는 경향이 있음

    - 범위는 0에서 1사이로 1에 가까울수록 모델이 데이터를 잘 설명함

- Adj. R-squared : 수정된 R 제곱

    - 독립변수의 증가가 값에 영향을 주는 문제를 해결하기 위해 독립변수의 개수와 표본 크기를 고려하여 결정계수를 조정

- F-statistic

    - 전체 회귀모델이 통계적으로 유의한지 검정하기 위해 사용되는 값

    - 회기모델의 분산과 오차항의 분산의 비율로 계산

    - F가 클수록 통계적으로 유의한 모델

    * t-통계량 : 각 독립변수의 개별적 영향력을 검정

- Prob (F-statistic) : F-통계량에 대한 p-value

    - 회귀분석 모델 전체에 대한 통계적 의미를 판단하며 보통 0.05 이하인 경우 독립변수가 유의미하다고 판단함

- AIC : 표본의 개수와 모델의 복잡성을 기반으로 모델을 평가하며, 수치가 낮을수록 좋음

- BIC : AIC와 유사하지만 패널티를 부여하여 평가성능이 더 좋으며, 수치가 낮을수록 좋음

- coef (coefficient, 회귀계수) : 데이터로부터 얻은 계수의 추정치

- std err : 계수 추정치의 표준오차, 값이 작을수록 좋음

- t검정 : 독립변수와 종속변수 사이의 상관관계, 값이 클수록 상관도가 큼

- P > |t| : p-value

 

다중 선형회귀

data = sm.datasets.get_rdataset("mtcars").data

X = data[["hp", "wt"]] # 마력, 중량
y = data["mpg"] # 연비

X = sm.add_constant(X) # 독립 변수에 상수항 추가

model = sm.OLS(y,X).fit() # OLS : 선형 회귀 모델, fit() 학습
print(model.summary()) # 모델 결과 요약하여 출력

 

2. scikit-learn

- 파이썬 기반의 머신러닝 라이브러리로 다양한 데이터 전처리, 모델링, 평가 도구를 제공함

- 간단하고 일관된 API

- 풍부한 알고리즘 지원

- 확장성과 다양한 데이터셋 제공

- import sklearn as sk

 

XOR 연산

- 입력 중 하나만 참일 때 참

- 모두 참이거나 모두 거짓이면 거짓

 

iris 데이터

- 붓꽃의 품종 분류하기

- sepal length, sepal with, petal length, petal width, target으로 이뤄져 있음

 

3. scipy

- Python의 과학 및 공학 계산 라이브러리

- numpy와 함께 사용되어 데이터 분석 및 수학적 계산에 적합

- 주요 서브 모듈 : linalg(선형대수), optimize(최적화), stats(통계), integrate(적분), sparse(희소행렬)

- scipy vs numpy

    - numpy : 다차원 배열과 기본 연산 제공

    - scipy : 고급 수학 및 과학 계산 기능 제공 (numpy 위에 구축됨)

- import scipy as sp

 

선형 방정식 풀기

from scipy.linalg import solve

A = [[3,1], [1,2]]
b = [9,8]

x = solve(A, b)
print(f"Solution : {x}")

 

함수를 최소화 하는 변수 값 구하기

from scipy.optimize import minimize

def f(x):
    return x**2 + 4*x +4
result = minimize(f, x0=0)
print(f"Optimal Value : {result.x}")

 

방정식의 근 찾기

from scipy.optimize import root

def equation(x):
    return x**2 -4
sol = root(equation, x0=1)
print(f"Root: {sol.x}")

 

기본 통계 계산 (최소, 최대, 평균, 분산, 외도, 첨도)

from scipy.stats import describe

data = [1,2,3,4,5,6,7]
stats = describe(data)
print(stats)

 

희소 행렬

- 0이 많은 2차원 데이터를 0값을 가지지 않는 요소만 표시하는 COO(Coordinate) 포맷으로 변경

from scipy.sparse import csr_matrix
data = [
    [0,0,3],
    [4,0,0],
    [0,5,0]
]
sparse_matrix = csr_matrix(data)
print(sparse_matrix)