수업 목표
- 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)
'ROKEY' 카테고리의 다른 글
[20250210] 파이썬 프로그래밍 - 파이썬 활용 심화 1 (0) | 2025.02.10 |
---|---|
[20250207] 파이썬 프로그래밍 - 딥러닝 파이썬 패키지 3 (0) | 2025.02.09 |
[20250205] 파이썬 프로그래밍 - 딥러닝 파이썬 패키지 1 (1) | 2025.02.06 |
[20250204] 파이썬 프로그래밍 - 그래픽스 지원 API (0) | 2025.02.05 |
[20250203] 파이썬 프로그래밍 - 알고리즘 2 (0) | 2025.02.03 |