1. 기계학습(Machine Learning)

  • 기계가 일일이 코드로 명시하지 않은 동작을 데이터로부터 학습하여 실행할 수 있도록 하는 알고리즘을 개발하는 연구분야.

image
아서 사무엘(Arthur Lee Samuel, 1901.12.5 ~ 1990.7.29)

  • 컴퓨터 게임과 인공지능 분야의 선구자
  • “기계학습”이라는 용어를 대중화
  • Checkers-Playing Program(드래프트) 개발
    image

2. 전통적인 프로그래밍 vs 기계학습

image

2-1. 규칙(패턴)

  • 다음 숫자 사이의 규칙을 찾아보세요. 박스에 가려진 숫자는 무엇일까요?
    image

2-2. 기계학습 - 기본 원리

  • X 데이터에 대한 Y 데이터를 출력하는 함수 f(X)를 찾는 것이 기계학습(Machine Learning)의 기본 원리.
  • X 데이터 : 숫자, 아미지, 텍스트, 음성 등 다양한 형태.
    image

  • 문제(입력 데이터)만 주어진 상태에서 규칙을 찾는 형태도 존재.
    image

3. 지도 학습 vs 비지도 학습

  • 지도 학습
    • Supervised Learning
    • 문제와 정답이 주어진 상태에서 규칙을 찾는 형태.
  • 비지도 학습
    • Unsupervised Learning
    • 문제만 주어진 상태에서 규칙을 찾는 형태
    • 군집(Clustering) : 데이터를 보고 몇 개의 그룹으로 묶어내는 것.

3-1. 지도 학습(Supervised Learning)

image image

[생각해 보기]

  • 지도학습으로 해결할 수 있는 문제는 무엇일까?
  • 해당 문제는 “분류”에 해당하는 문제일까?

3-2. 회귀(Regression)

image

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()

image

    #연도와 평균 기온의 상관관계를 보기 위해 산점도(scatter) 그리기
    plt.scatter(year, temperature)  
    plt.show()  

image

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() 

image

댓글남기기