반응형
성형회귀 모델을 설명하기 위해 등산객 수와 산불 발생량 사이의 연관성을 분석하는 샘플 프로그램을 작성해 보겠습니다. 파이썬과 scikit-learn 라이브러리를 사용하여 선형회귀(Linear Regression) 모델로 등산객 수에 따른 산불 발생량을 예측하는 방법을 소개합니다.
1. 선형회귀 모델이란?
선형회귀는 종속 변수(예: 산불 발생량)가 하나 이상의 독립 변수(예: 등산객 수)에 선형적으로 영향을 받는다는 가정 하에 수학적으로 모델링하는 기법입니다. 간단히 말해, y = ax + b의 직선 공식을 데이터에 맞춰 학습합니다.
2. 선형회귀를 이용한 샘플 프로그램 - 등산객수에 따른 산불 발생량 예측
[예제]
import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import platform
# 한글 폰트 설정
if platform.system() == 'Windows':
plt.rc('font', family='Malgun Gothic')
elif platform.system() == 'Darwin':
plt.rc('font', family='AppleGothic')
else:
plt.rc('font', family='NanumGothic')
plt.rcParams['axes.unicode_minus'] = False
# 데이터 생성
data = {
'hikers': [10, 20, 30, 40, 50, 60, 70],
'fires': [1, 2, 2, 3, 4, 4, 5]
}
df = pd.DataFrame(data)
# 모델 학습
X = df[['hikers']]
y = df['fires']
model = LinearRegression()
model.fit(X, y)
# 예측
future = pd.DataFrame({'hikers': [80]})
prediction = model.predict(future)
print(f"예측된 산불 발생량: {prediction[0]:.2f}건")
# 시각화
plt.scatter(df['hikers'], df['fires'], color='green', label='실제 데이터')
plt.plot(df['hikers'], model.predict(X), color='red', label='회귀선')
plt.xlabel("등산객 수 (천 명)")
plt.ylabel("산불 발생 건수")
plt.title("등산객 수에 따른 산불 발생 예측")
plt.legend()
plt.grid()
plt.show()
[결과]
3. "등산객수에 따른 산불 발생량 예측" 프로그램 설명
3-1 데이터 준비
data = {
'hikers': [10, 20, 30, 40, 50, 60, 70],
'fires': [1, 2, 2, 3, 4, 4, 5]
}
df = pd.DataFrame(data)
- hikers: 하루 등산객 수를 천 명 단위로 표현한 숫자 리스트입니다.
- fires: 해당 인원수일 때 발생한 산불 건수입니다.
- 이 데이터를 기반으로 DataFrame을 생성하여 분석할 수 있게 정리합니다.
3-2. 선형 회귀 모델 학습
X = df[['hikers']] # 독립 변수 (입력값)
y = df['fires'] # 종속 변수 (예측 대상)
model = LinearRegression()
model.fit(X, y)
- X는 입력 변수(독립 변수)이며, 2차원 형태로 [['hikers']]와 같이 작성합니다.
- y는 타겟 값(종속 변수)인 산불 발생 건수입니다.
- model.fit()을 통해 회귀 모델이 데이터를 학습하게 됩니다.
- 결과적으로 이 모델은 y = a * x + b 형태의 직선 방정식을 학습합니다.
3-3. 예측 수행
future = pd.DataFrame({'hikers': [80]})
prediction = model.predict(future)
- 등산객 수가 80,000명일 경우(80) 산불이 몇 건 발생할지 예측합니다.
- model.predict() 함수는 입력값에 대해 학습된 선형 회귀 방정식을 적용하여 예측값을 반환합니다.
3-4. 시각화 처리
plt.scatter(df['hikers'], df['fires'], color='green', label='실제 데이터')
plt.plot(df['hikers'], model.predict(X), color='red', label='회귀선')
plt.xlabel("등산객 수 (천 명)")
plt.ylabel("산불 발생 건수")
plt.title("등산객 수에 따른 산불 발생 예측")
plt.legend()
plt.grid()
plt.show()
- 산점도 (scatter): 실제 관측 데이터를 초록색 점으로 표시.
- 회귀선 (line plot): 학습된 모델이 그린 예측 선을 빨간색으로 표현.
- 레이블과 제목은 한글로 처리하며, 그래프는 깔끔하게 그리드와 범례를 포함합니다.
3-5. 폰트 오류 해결 (한글 깨짐 방지)
import platform
if platform.system() == 'Windows':
plt.rc('font', family='Malgun Gothic')
elif platform.system() == 'Darwin':
plt.rc('font', family='AppleGothic')
else:
plt.rc('font', family='NanumGothic')
plt.rcParams['axes.unicode_minus'] = False
- 위 코드를 넣지 않으면 "UserWarning: Glyph 49328 (\N{HANGUL SYLLABLE SAN}) missing from current font."라는 오류가 발생합니다.
- matplotlib는 기본적으로 한글을 지원하지 않기 때문에, 시스템에 따라 폰트를 지정해줘야 합니다.
- 마이너스 기호(−)도 제대로 보이도록 별도 설정합니다.
선형회귀는 기본 개념이 매우 단순합니다. 다음번에는 좀 더 복잡하게 등산객수와 기온 2가지 요소를 이용하여 산불량을 예측해 보는 프로그램을 다중 선형회귀를 이용하여 만들어 보겠습니다.
반응형
'파이썬' 카테고리의 다른 글
파이썬 자료형-숫자형 문법 강좌 정리 노트 (정수형, 실수형, 복소수형) (2) | 2025.04.08 |
---|---|
파이썬에서 텐서플로 사용시 발생되는 oneDNN 관련 오류 해결방법 (tensorflow onednn custom operations error) (0) | 2025.04.08 |
파이썬 함수 문법 강좌 정리 노트 (인자, 매개변수, 반환값, 람다함수, 재귀함수) (0) | 2025.04.07 |
파이썬으로 만든 여러가지 구구단 프로그램(for문, while문 활용) (0) | 2025.04.07 |
파이썬 패키지 설치시 Windows 환경에서 "긴 경로 지원 오류" 문제 해결 방법 (0) | 2025.04.06 |