머신러닝

../_images/34018729885_002ced9b54_k_d.jpg

파이썬은 데이터 분석, 통계, 그리고 머신러닝 자체를 위한 라이브러리가 방대해서, 많은 데이터 과학자가 선택하는 언어입니다.

머신러닝과 기타 데이터 과학 응용에서 널리 사용되는 패키지 몇 가지를 아래에 나열합니다.

SciPy Stack

SciPy 스택은 데이터 과학에서 통계 분석과 데이터 시각화에 사용되는 핵심 헬퍼 패키지들로 구성됩니다. 방대한 기능과 사용 편의성 덕분에, 이 스택은 대부분의 데이터 과학 응용에서 필수로 여겨집니다.

이 스택은 다음 패키지로 구성되어 있습니다(문서 링크 제공):

  1. NumPy

  2. SciPy 라이브러리

  3. Matplotlib

  4. IPython

  5. pandas

  6. Sympy

  7. nose

이 스택에는 파이썬도 함께 포함되어 있지만 위 목록에서는 제외했습니다.

설치

스택 전체나 개별 패키지를 설치하려면 여기 에 있는 안내를 참고하세요.

참고: 데이터 과학 패키지를 매끄럽게 설치하고 유지하기 위해서는 Anaconda 가 매우 선호되고 권장됩니다.

scikit-learn

Scikit는 파이썬을 위한 무료 오픈 소스 머신러닝 라이브러리입니다. 선형 회귀, 분류기, SVM, k-평균, 신경망 등 많은 알고리즘을 구현할 수 있는 즉시 사용 가능한 함수를 제공합니다. 또한 학습과 테스트에 바로 사용할 수 있는 몇 가지 샘플 데이터셋도 가지고 있습니다.

속도, 견고함, 사용 편의성 덕분에 많은 머신러닝 응용에서 가장 널리 사용되는 라이브러리 중 하나입니다.

설치

PyPI를 통해서:

pip install -U scikit-learn

conda를 통해서:

conda install scikit-learn

scikit-learn은 (위에서 언급한) Anaconda에도 함께 포함되어 있습니다. 더 자세한 설치 안내는 이 링크 를 참고하세요.

예시

이 예시에서는 scikit-learn에 함께 포함되어 있는 Iris 데이터셋 으로 간단한 분류기를 학습시킵니다.

이 데이터셋은 꽃잎의 네 가지 특징(꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비)을 입력으로 받아, 세 가지 꽃 종(라벨)인 setosa, versicolor, virginica로 분류합니다. 데이터셋에서 라벨은 0(setosa), 1(versicolor), 2(virginica)와 같이 숫자로 표현되어 있습니다.

Iris 데이터셋을 섞은 다음 학습용과 테스트용으로 나누어, 마지막 10개의 데이터 포인트는 테스트용으로, 나머지는 학습용으로 둡니다. 그런 다음 학습 세트로 분류기를 학습시키고 테스트 세트에 대해 예측합니다.

from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.metrics import accuracy_score
import numpy as np

#loading the iris dataset
iris = load_iris()

x = iris.data #array of the data
y = iris.target #array of labels (i.e answers) of each data entry

#getting label names i.e the three flower species
y_names = iris.target_names

#taking random indices to split the dataset into train and test
test_ids = np.random.permutation(len(x))

#splitting data and labels into train and test
#keeping last 10 entries for testing, rest for training

x_train = x[test_ids[:-10]]
x_test = x[test_ids[-10:]]

y_train = y[test_ids[:-10]]
y_test = y[test_ids[-10:]]

#classifying using decision tree
clf = tree.DecisionTreeClassifier()

#training (fitting) the classifier with the training set
clf.fit(x_train, y_train)

#predictions on the test dataset
pred = clf.predict(x_test)

print pred #predicted labels i.e flower species
print y_test #actual labels
print (accuracy_score(pred, y_test))*100 #prediction accuracy

무작위로 나누고 매 반복마다 분류기가 학습되기 때문에 정확도는 달라질 수 있습니다. 위 코드를 실행하면 다음과 같은 결과가 나옵니다:

[0 1 1 1 0 2 0 2 2 2]
[0 1 1 1 0 2 0 2 2 2]
100.0

첫 번째 줄에는 분류기가 예측한 테스트 데이터의 라벨(즉, 꽃 종)이 있고, 두 번째 줄에는 데이터셋에 주어진 실제 꽃 종이 있습니다. 따라서 이번에는 100%의 정확도를 얻었습니다.

scikit-learn에 대해 더 알고 싶다면 문서 에서 읽을 수 있습니다.