Scikit-learn

파이썬 프로그래밍 언어를 위한 머신 러닝(ML) 라이브러리인 Scikit-learn에는 프로그래머와 데이터 사이언티스트가 머신 러닝 모델에 쉽게 배포할 수 있는 알고리즘이 많습니다.

 

Scikit-learn이란?

Scikit-learn은 널리 사용되는 강력한 머신 러닝 라이브러리로, 엄청나게 많은 알고리즘과 ML 시각화, 전처리, 모델 피팅, 선택, 평가를 위한 다양한 도구를 갖추고 있습니다. 

넘파이(NumPy), SciPy, matplotlib을 기반으로 하는 Scikit-learn에는 분류, 회귀, 클러스터링을 위한 효율적인 알고리즘이 다양하게 포함되어 있습니다. 이러한 알고리즘에는 서포트 벡터 머신, 레인 포레스트, 그래디언트 부스팅, K-평균, DBSCAN이 포함됩니다. 

일관되고 효율적으로 설계된 API, 대부분의 알고리즘에 관해 찾을 수 있는 광범위한 문서, 수많은 온라인 튜토리얼로 인해 Scikit-learn은 비교적 뛰어난 개발 용이성을 자랑합니다. 

최신 릴리스는 Linux, MacOS, Windows 등 널리 사용되는 플랫폼에서 사용할 수 있습니다.

Scikit-learn을 사용하는 이유는?

Scikit-learn API는 사용 편의성, 세심한 설계 및 열정적인 커뮤니티 덕분에 머신 러닝 구현을 위한 사실상의 표준이 되었습니다.  

Scikit-learn은 ML 모델 구축, 피팅, 평가를 위한 다음과 같은 모듈을 제공합니다.

  • 전처리란 데이터 분석 시 특징 추출과 정규화에 유용한 Scikit-learn 도구를 의미합니다.
  • 분류는 머신 러닝 모델에서 데이터와 연관된 범주를 식별하는 도구 세트를 의미합니다. 예를 들어, 이러한 도구는 이메일 메시지를 유효한 메시지 또는 스팸 메시지로 분류하는 데 사용될 수 있습니다. 본질적으로 분류는 개체가 어떤 범주에 속하는지 식별합니다.
  • 회귀는 행동이나 주가와 같은 입력 데이터와 출력 데이터 간의 관계를 이해하려고 시도하는 ML 모델을 생성하는 것을 나타냅니다. 회귀는 개체와 연관된 연속 값 속성을 예측합니다.
  • Scikit-learn의 클러스터링 도구는 물리적 위치에 따라 집합으로 배열된 고객 데이터처럼 유사한 특성이 있는 데이터를 자동으로 그룹화하여 집합을 생성합니다.
  • 차원 축소는 분석에 사용할 확률 변수의 수를 줄입니다. 예를 들어, 시각화의 효율성을 높이기 위해 이상치는 제외할 수 있습니다.
  • 모델 선택은 데이터 사이언스 머신 러닝 프로젝트에 사용할 최적의 매개변수를 비교, 검증 및 선택하는 알고리즘 그리고 그러한 기능을 수행하는 도구를 제공할 수 있는 알고리즘의 능력을 나타냅니다.
  • 파이프라인은 모델 워크플로우를 구축하는 데 필요한 유틸리티를 나타냅니다.
  • 머신 러닝에 시각화를 사용하면 빠른 플로팅(plotting)과 시각적 조정을 수행할 수 있습니다.

Scikit-learn은 어떻게 작동하나요?

Scikit-learn은 주로 파이썬으로 작성되며 고급 선형 대수와 배열 연산에 넘파이를 사용합니다. 전반적인 성능을 향상시키기 위해 일부 핵심 Scikit-learn 알고리즘은 Cython으로 작성되었습니다.

다양한 머신 러닝 알고리즘의 여러 구현을 포함하는 고수준 라이브러리인 Scikit-learn을 사용하면 코드 몇 줄로 모델을 구축, 훈련 및 평가할 수 있습니다.

Scikit-learn은 ML 파이프라인 또는 워크플로 구축에 사용할 수 있도록 통합된 고수준 API 세트를 제공합니다.

Training and testing.

Scikit-learn ML 파이프라인을 사용하면 데이터를 트랜스포머에 통과시켜 특징과 추정기를 추출하고 이를 통해 모델을 생성한 다음, 예측을 평가하여 모델의 정확도를 측정할 수 있습니다.

  • 트랜스포머: 전처리를 위해 데이터를 변환하거나 입력하는 알고리즘입니다.
  • 추정기: 예측에 사용할 수 있는 모델을 구축하기 위해 데이터를 훈련하거나 피팅하는 머신 러닝 알고리즘입니다.
  • 파이프라인: 파이프라인은 트랜스포머와 추정기를 묶어 ML 워크플로를 지정합니다.

GPU 가속 Scikit-learn API와 엔드투엔드 데이터 사이언스

구조적으로 볼 때, CPU는 단 몇 개의 코어와 많은 캐시 메모리로 구성되어 있어 한 번에 처리할 수 있는 소프트웨어 스레드가 적습니다. 반대로 GPU는 수백 개의 코어로 구성되어 있어 수천 개의 스레드를 동시에 처리할 수 있습니다.

The difference between a CPU and GPU.

CUDA-X AI™ 기반 오픈 소스 소프트웨어 라이브러리인 NVIDIA RAPIDS™ 제품군은 엔드투엔드 데이터 사이언스 및 분석 파이프라인을 전적으로 GPU에서 실행할 수 있는 기능을 제공합니다. 이 제품군은 NVIDIA® CUDA® 프리미티브를 사용하여 저수준 컴퓨팅 최적화를 수행하지만, 사용자 친화적인 Python 인터페이스를 통해 GPU 병렬 처리와 고대역폭 메모리 속도를 제공합니다.

RAPIDS의 cuML 머신 러닝 알고리즘과 수학적 프리미티브는 Scikit-learn과 같은 익숙한 API를 따릅니다. XGBoost, 랜덤 포레스트(Random Forest) 등 널리 사용되는 알고리즘은 단일 GPU와 대규모 데이터센터 배포 모두에서 지원됩니다. 대규모 데이터 세트의 경우, GPU 기반 구현은 CPU 기반 구현보다 10~50배 더 빨리 완료될 수 있습니다.

Data preparation, model training, and visualization.

RAPIDS GPU DataFrame을 사용하면 Pandas와 같은 인터페이스를 사용하여 데이터를 GPU에 로드한 다음, 절대 GPU를 떠나지 않고 이 데이터를 연결된 다양한 머신 러닝 및 그래프 분석 알고리즘에 사용할 수 있습니다. 이러한 수준의 상호 운용성은 Apache Arrow와 같은 라이브러리를 통해 구현되며, 데이터 준비부터 머신 러닝과 딥 러닝에 이르는 엔드투엔드 파이프라인을 가속화할 수 있습니다.

RAPIDS는 널리 사용되는 여러 데이터 사이언스 라이브러리 간의 장치 메모리 공유를 지원합니다. 그래서 GPU에 데이터가 유지되므로, 호스트 메모리에 반복적으로 복사하느라 높은 비용을 들일 필요가 없습니다.

Popular data science libraries.