Chapter 1. 소개 - 1

김선재·2022년 7월 24일
0
post-thumbnail

1.1. 왜 머신러닝인가

  • 초창기 지능형 애플리케이션들은 데이터를 처리하고 사용자의 입력을 다루는 데 하드 코딩된 ifelse 명령을 사용하는 시스템이였다.
  • 머신러닝을 사용하여 알고리즘에 많은 데이터를 제공해주면 특정 요소가 어떤 것인지를 충분히 찾아 낼 수 있다.

1.1.1. 머신러닝으로 풀 수 있는 문제

1) 지도 학습 (supervised learning)

  • 이미 알려진 사례를 바탕으로 일반화된 모델을 만들어 의사 결정 프로세스를 자동하하는 것
  • 사용자는 알고리즘에 입력과 기대되는 출력을 제공하고 알고리즘은 주어진 입력에서 원하는 출력을 만드는 방법을 찾는다.
  • 입력 데이터로부터 기대한 출력이 나오도록 알고리즘을 가르치는 것이기 때문에 입력과 출력으로부터 학습하는 머신러닝 알고리즘들을 지도 학습 알고리즘이라고 한다.
    1. 편지 봉투에 손으로 쓴 우편번호 숫자 판별
      • 입력은 손글씨를 스캔한 이미지
      • 기대하는 출력은 우편번호 숫자

    1. 의료영상 이미지에 기반한 종양 판단
      • 입력은 이미지
      • 출력은 종양이 양성인지의 여부

    1. 의심되는 신용카드 거래 탐지
      • 입력은 신용카드 거래 내역
      • 출력은 부정 거래인지의 여부

2) 비지도 학습 (unsupervised learning)

  • 알고리즘에 입력은 주어지지만 출력은 제공되지 않는다.
  • 성공 사례는 많지만 비지도 학습을 이해하거나 평가하는 일은 쉽지 않다.
    1. 블로그 글의 주제 구분
      • 많은 양의 텍스트 데이터를 요약하고 그 안에 담긴 핵심 주제를 찾고자 할 수 있다.
      • 사전에 어떤 주제인지 알지 못하고 얼마나 많은 주제가 있는지도 모르기때문에 출력 값을 준비할 수 없다.

    1. 고객들을 취향이 비슷한 그룹으로 묶기
      • 어떤 그룹이 있는지 미리 알 수 없고 얼마나 많은 그룹이 있는지도 모르니 출력을 가지고 있지 않다.

    1. 비정상적인 웹사이트 접근 탐지
      • 일상적이지 않은 접근 패턴을 찾으면 부정행위나 버그를 구별하는 데 도움이 된다.
      • 각각의 비정상 패턴은 서로 많이 다를 수 있고 이미 가지고 있는 비정상 데이터도 없을 수 있다.
      • 단지 웹 트래픽만 과날할 수 있고 어떤 것이 정상이고 비정상인지 알지 못하므로 비지도 학습 문제이다.

✨✨✨ 지도 학습비지도 학습 모두 컴퓨터가 인식할 수 있는 형태로 입력 데이터를 준비하는 것이 중요하다.

1.1.2. 문제와 데이터 이해하기

  • 어떤 문제에 대한 답을 원하는가? 가지고 있는 데이터가 원하는 답을 줄 수 있는가?
  • 내 질문을 머시러닝의 문제로 가장 잘 기술하는 방법은 무엇인가?
  • 문제를 풀기에 충분한 데이터를 모았는데?
  • 내가 추출한 데이터의 특성은 무엇이며 좋은 예측을 만들어낼 수 있을 것인가?
  • 머신러닝 애플리케이션의 성과를 어떻게 측정할 수 있는가?
  • 머신러닝 솔루션이 다른 연구나 제품과 어떻게 협력할 수 있는가?

1.2. 필수 라이브러리와 도구들

1.2.1. 주피터 노트북

  • 프로그램 코드를 브라우저에서 실행해주는 대화식 환경
  • 코드와 설명 이미지들을 쉽게 섞어 쓸 수 있다.

1.2.2. Numpy

  • 파이썬으로 과학 계산을 하려면 꼭 필요한 패키지
  • 다차원 배열을 위한 기능과 선형 대수 연산과 푸리에 변환 같은 고수준 수학 함수와 유사 난수 생성기를 포함

📍코드 예제

import numpy as np

x = np.array([[1, 2, 3], [4, 5, 6]])
print('x:\n', x)

~~> x:
	[[1 2 3]
    [4 5 6]]

1.2.3. Scipy

  • 과학 계산용 함수를 모아노흔 파이썬 패키지
  • 고성능 선형 대수, 함수 최적화, 신호 처리, 특수한 수학 함수와 통계 분포 등을 포함한 많은 기능을 제공
  • scikit-learn에서 데이터를 표현하는 또 하나의 방법인 희소 행렬 기능을 제공

📍코드 예제

from scipy import sparse

# 대각선 원소는 1이고 나머지는 0인 2차원 Numpy 배열을 만든다.
eye = np.eye(4)
print('Numpy 배열: \n', eye)

~~> Numpy 배열: 
 [[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]
 
# Numpy 배열을 CSR 포맷의 SciPy 희박 행렬로 변환한다.
# 0이 아닌 원소만 저장
sparse_matrix = sparse.csr_matrix(eye)
print("\nScipy의 CSR 행렬: \n", sparse_matrix)

~~> Scipy의 CSR 행렬: 
   (0, 0)	1.0
  (1, 1)	1.0
  (2, 2)	1.0
  (3, 3)	1.0

# COO 포맷을 이용해서 앞서와 동일한 희소 행렬을 만드는 예제
data = np.ones(4)
row_indices = np.arange(4)
col_indices = np.arange(4)
eye_coo = sparse.coo_matrix((data, (row_indices, col_indices)))
print("COO 표현:\n", eye_coo)

~~> COO 표현:
   (0, 0)	1.0
  (1, 1)	1.0
  (2, 2)	1.0
  (3, 3)	1.0

1.2.4. matplotlib

  • 파이썬의 대표적인 과학 계산용 그래프 라이브러리
  • 선 그래프, 히스토그램, 산점도 등을 지원하며 추란에 쓸 수 있을 만큼의 고품질 그래프를 그려준다.
  • 데이터와 분석 결과를 다양한 관점에서 시각화해보면 매우 중요한 통찰을 얻을 수 있다.

📍코드 예제

import matplotlib.pyplot as plt
%matplotlib inline

# -10에서 10까지 100개의 간격으로 나눠진 배열을 생성
x = np.linspace(-10, 10, 100)
# 사인 함수를 사용하여 y배열을 생성
y = np.sin(x)
# plot 함수는 한 배열의 값을 다른 배열에 대응해서 선 그래프를 생성
plt.plot(x, y, marker='x')

~~>

1.2.5. pandas

  • 데이터 처리와 분석을 위한 파이썬 라이브러리
  • R의 data.frame을 본떠서 설계한 DataFrame이라는 데이터 구조를 기반으로 만들어졌다.
  • 테이블을 수정하고 조작하는 다양한 기능을 제공
  • SQL처럼 테이블에 쿼리나 조인을 수행할 수 있다.
  • Numpy와는 달리 pandas는 각 열의 타입이 달라도 된다.
  • SQL, 엑셀 파일, CSV 파일 같은 다양한 파일과 데이터베이스에서 데이터를 읽어 들일 수 있다.

📍코드 예제

import pandas as pd

# 회원 정보가 들어간 간단한 데이터셋 생성
data = {'Name' : ['John', "Anna", 'Peter', 'Linda'],
       'Location' : ['New York', 'Paris', 'Berlin', 'London'],
       'Age' : [24, 13, 53, 33]
       }
data_pandas = pd.DataFrame(data)
display(data_pandas)

~~> 
	Name	Location	Age
0	John	New York	24
1	Anna	Paris		13
2	Peter	Berlin		53
3	Linda	London		33
profile
data science!!, data analyst!! ///// hello world

0개의 댓글