[AI] 기계학습(Machine Learning) - 선형 회귀를 이용한 기온 분석
1. 기계학습(Machine Learning)
- 기계가 일일이 코드로 명시하지 않은 동작을 데이터로부터 학습하여 실행할 수 있도록 하는 알고리즘을 개발하는 연구분야.
아서 사무엘(Arthur Lee Samuel, 1901.12.5 ~ 1990.7.29)
- 컴퓨터 게임과 인공지능 분야의 선구자
- “기계학습”이라는 용어를 대중화
- Checkers-Playing Program(드래프트) 개발
2. 전통적인 프로그래밍 vs 기계학습
2-1. 규칙(패턴)
- 다음 숫자 사이의 규칙을 찾아보세요. 박스에 가려진 숫자는 무엇일까요?
2-2. 기계학습 - 기본 원리
- X 데이터에 대한 Y 데이터를 출력하는 함수 f(X)를 찾는 것이 기계학습(Machine Learning)의 기본 원리.
-
X 데이터 : 숫자, 아미지, 텍스트, 음성 등 다양한 형태.
- 문제(입력 데이터)만 주어진 상태에서 규칙을 찾는 형태도 존재.
3. 지도 학습 vs 비지도 학습
- 지도 학습
- Supervised Learning
- 문제와 정답이 주어진 상태에서 규칙을 찾는 형태.
- 비지도 학습
- Unsupervised Learning
- 문제만 주어진 상태에서 규칙을 찾는 형태
- 군집(Clustering) : 데이터를 보고 몇 개의 그룹으로 묶어내는 것.
3-1. 지도 학습(Supervised Learning)
[생각해 보기]
- 지도학습으로 해결할 수 있는 문제는 무엇일까?
- 해당 문제는 “분류”에 해당하는 문제일까?
3-2. 회귀(Regression)
4. 기온 데이터를 이용한 2050년 기온 예측
- 지구온난화 데이터를 확인하고 2050년 우리 지역의 기온은 어떻게 될지 예측해 보기
4-1. 데이터 수집하기
- 기온 데이터 : https://data.kma.go.kr
- [기후통계분석]-[기온분석]-지역 및 기간 설정
- CSV : Comma Separated Values
4-2. Colab에서 기온 데이터 다운로드
!rm -rf ./Temperature
!git clone https://github.com/kig2929kig/Temperature/
4-3. 데이터 살펴보기
- 데이터의 전체적인 느낌 살펴보기
- 데이터의 구조 및 통계적 특성 살펴보기
- 빈 데이터 등 전처리하기
import pandas as pd
df = pd.read_csv('/content/Temperature/Temperature_Analysis.csv', encoding='cp949', skiprows=7)
df = df.iloc[:, [0,2]]
df
# 데이터 전체 구조 알아보기
df.info()
df.describe()
# 연도, 평균기온 데이터 저장하기
year = df['년'].values
temperature = df['평균기온(℃)'].values
4-4. 데이터 속성 탐색하기
- 어떤 속성이 문제해결에 도움이 될까?
- 속성을 표현하기 적합한 방법은 무엇일까?
# 평균 기온을 꺽은선 그래프로 그리기
import matplotlib.pyplot as plt
plt.figure(figsize=(16, 8))
plt.plot(year, temperature)
plt.show()
#연도와 평균 기온의 상관관계를 보기 위해 산점도(scatter) 그리기
plt.scatter(year, temperature)
plt.show()
4-5. 선형 회귀 모델로 기온 예측해 보기
- [질문] 연도와 평균 기온의 관계를 가장 단순하게 표현한다면 어떤 모양이 적절할까?
# 학습에 필요한 형태로 데이터 모양 가공하기
# numpy : numeric python, 선형대수학 등에 활용
import numpy as np
#행열(매트릭)로 변경
year = np.reshape(df['년'].values, (-1, 1)) #(-1, 1) : x행 1열 형태로 모양 바꾸기
temperature = np.reshape(df['평균기온(℃)'].values, (-1, 1)) # (-1, 1) x행 1열 형태로 모양 바꾸기
temperature[-1] = temperature[-2] # 2022년 온도 NaN => 2021년도 온도로 비워있는 값을 설정
#year[-20:]
# sklearn : scikit-learn, 파이썬 머신러닝 주요 라이브러리
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(year, temperature) # year와 temperature에 대한 가장 적절한 선형관계(직선) 찾기
#직선의 기울기와 절편 확인
a = model.coef_
b = model.intercept_
a, b
# y=ax+b (기울기: 0.025)(절편: -37.5)
#2050년의 평균 기온 결과 예측
model.predict([[2050]])
4-6. 최근 데이터로 학습하면 결과가 어떻게 바뀔까?
#최근 20년간 데이터로 학습하기
model = LinearRegression().fit(year[-20:], temperature[-20:])
a2 = model.coef_
b2 = model.intercept_
a2, b2
4-7. 기온 예측 결과 시각화하기
#원본 데이터와 선형 회귀를 예측한 2개의 모델을 각각 시각화하기
import matplotlib.pyplot as plt
#그래프 해상도 설정 - dpi : dots per inch
plt.style.use('ggplot')
#원본 데이터 : 산점도
plt.scatter(year, temperature, alpha=0.4, color='cyan') # scatter(x, y, alpha : 색상의 투명도, 색)
#전체 데이터 학습 모델 : 초록색 직선
plt.plot(year, a *year +b, 'g', label='1973~')
#최근 20년 데이터 학습 모델 : 빨간색 점선
plt.plot(year[-20:], a2*year[-20:]+b2, 'r--', label='2003~')
#범례 표시
plt.legend()
plt.show()
댓글남기기