if
와 else
명령을 사용하는 시스템이였다.
- 편지 봉투에 손으로 쓴 우편번호 숫자 판별
- 입력은 손글씨를 스캔한 이미지
- 기대하는 출력은 우편번호 숫자
- 의료영상 이미지에 기반한 종양 판단
- 입력은 이미지
- 출력은 종양이 양성인지의 여부
- 의심되는 신용카드 거래 탐지
- 입력은 신용카드 거래 내역
- 출력은 부정 거래인지의 여부
- 블로그 글의 주제 구분
- 많은 양의 텍스트 데이터를 요약하고 그 안에 담긴 핵심 주제를 찾고자 할 수 있다.
- 사전에 어떤 주제인지 알지 못하고 얼마나 많은 주제가 있는지도 모르기때문에 출력 값을 준비할 수 없다.
- 고객들을 취향이 비슷한 그룹으로 묶기
- 어떤 그룹이 있는지 미리 알 수 없고 얼마나 많은 그룹이 있는지도 모르니 출력을 가지고 있지 않다.
- 비정상적인 웹사이트 접근 탐지
- 일상적이지 않은 접근 패턴을 찾으면 부정행위나 버그를 구별하는 데 도움이 된다.
- 각각의 비정상 패턴은 서로 많이 다를 수 있고 이미 가지고 있는 비정상 데이터도 없을 수 있다.
- 단지 웹 트래픽만 과날할 수 있고 어떤 것이 정상이고 비정상인지 알지 못하므로 비지도 학습 문제이다.
✨✨✨ 지도 학습과 비지도 학습 모두 컴퓨터가 인식할 수 있는 형태로 입력 데이터를 준비하는 것이 중요하다.
📍코드 예제
import numpy as np
x = np.array([[1, 2, 3], [4, 5, 6]])
print('x:\n', x)
~~> x:
[[1 2 3]
[4 5 6]]
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
📍코드 예제
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')
~~>
📍코드 예제
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