검토 : Scikit-learn은 더 간단한 기계 학습을 위해 빛납니다

Scikits는 과학 컴퓨팅을위한 Python 라이브러리 인 SciPy를 기반으로 구축 된 Python 기반 과학 도구 상자입니다. Scikit-learn은 분류, 회귀, 클러스터링, 차원 축소, 모델 선택 및 전처리와 같은 기계 학습에 중점을 둔 오픈 소스 프로젝트입니다. 유지 보수 가능성과 제한된 개발자 리소스를 이유로 범위 크립을 방지하고 입증되지 않은 알고리즘에 뛰어 드는 데 매우 신중한 상당히 보수적 인 프로젝트입니다. 반면에 견고한 알고리즘을 상당히 많이 선택하고 내부 루프와 같이 빠르 야하는 함수에 Cython (Python-to-C 컴파일러)을 사용합니다.

Scikit-learn이 다루지 않는 영역 에는 딥 러닝, 강화 학습, 그래픽 모델 및 시퀀스 예측이 있습니다. Python에있는 것으로 정의되어 있으므로 다른 언어에 대한 API가 없습니다. Scikit-learn은 NumPy 및 SciPy 종속성이 PyPy를 완전히 지원하지 않기 때문에 빠른 Just-In-Time 컴파일 Python 구현 인 PyPy를 지원하지 않습니다.

Scikit-learn은 복잡성 및 도입되는 머신 종속성과 관련된 여러 가지 이유로 GPU 가속을 지원하지 않습니다. 그런 다음 신경망을 제외하고 Scikit-learn은 GPU 가속이 거의 필요하지 않습니다.

Scikit-learn 기능

앞서 언급했듯이 Scikit-learn은 분류, 회귀, 클러스터링, 차원 축소, 모델 선택 및 전처리를위한 좋은 알고리즘을 제공합니다. 객체가 속한 카테고리를 식별하는 분류 영역에서지도 학습이라고하며 SVM (Support Vector Machine), 가장 가까운 이웃, 로지스틱 회귀, 랜덤 포레스트, 의사 결정 트리 등을 구현합니다. 다중 레벨 퍼셉트론 (MLP) 신경망.

그러나 Scikit-learn의 MLP 구현은 명시 적으로 대규모 애플리케이션을위한 것이 아닙니다. 대규모 GPU 기반 구현 및 딥 러닝의 경우 Keras 및 Theano와 같은 Python 친화적 딥 신경망 프레임 워크를 포함하는 Scikit-learn의 관련 프로젝트를 살펴보세요.

객체와 관련된 연속 값 속성 (예 : 주식 가격)을 예측하는 회귀의 경우 Scikit-learn에는 SVR (Support Vector Regression), 능선 회귀, Lasso, Elastic Net, 최소 각도 회귀 (LARS)가 있습니다. ), 베이지안 회귀, 다양한 종류의 강력한 회귀 등이 있습니다. 실제로 대부분의 분석가가 원하는 것보다 더 많은 회귀 알고리즘 선택이지만 포함 된 각 알고리즘에 대한 좋은 사용 사례가 있습니다.

유사한 객체가 집합으로 자동 그룹화되는 비지도 학습 기술인 클러스터링의 경우 Scikit-learn에는 k- 평균, 스펙트럼 클러스터링, 평균 이동, 계층 적 클러스터링, DBSCAN 및 기타 알고리즘이 있습니다. 다시 말하지만, 보수적 알고리즘의 영역이 포함되었습니다.

차원 감소는 PCA (주성분 분석) 및 NMF (Non-negative Matrix Factorization) 또는 특징 선택 기술과 같은 분해 기술을 사용하여 고려할 랜덤 변수의 수를 줄이는 것입니다. 모델 선택은 매개 변수와 모델을 비교, 검증 및 선택하는 것이며 그리드 검색, 교차 검증 및 메트릭 기능과 같은 알고리즘을 사용합니다. 두 영역 모두에서 Scikit-learn은 쉽게 액세스 할 수있는 API에 잘 입증 된 알고리즘과 방법을 모두 포함합니다.

특징 추출 및 정규화를 포함하는 전처리는 기계 학습 프로세스에서 가장 중요한 첫 번째 부분 중 하나입니다. 정규화는 특성을 종종 평균과 단위 분산이 0 인 새로운 변수로 변환하지만, 때로는 주어진 최소값과 최대 값, 종종 0과 1 사이에 있습니다. 특성 추출은 텍스트 또는 이미지를 기계 학습에 사용할 수있는 숫자로 변환합니다. 여기서 다시 Scikit-learn은이 smorgasbord에서 기대할 수있는 맛있는 고전 요리를 모두 제공합니다. 원하는 것을 수집 할 수 있습니다.

특징 추출 은 앞서 차원 축소에서 언급 한 특징 선택 과 는 상당히 다릅니다 . 기능 선택은 변하지 않거나 공변하거나 통계적으로 중요하지 않은 기능을 제거하여 학습을 개선하는 방법입니다.

요컨대, Scikit-learn에는 차원 축소, 모델 선택, 특징 추출 및 정규화를위한 전체 알고리즘 및 방법 세트가 포함되어 있지만, 좋은 예제 모음과 좋은 문서 외에 이러한 작업을 수행하기위한 안내 워크 플로는 없습니다.

Scikit-learn 설치 및 실행

Scikit-learn을 설치 한 것이 가장 쉬운 기계 학습 프레임 워크 설치 였을 것입니다. 이미 모든 필수 구성 요소가 설치되어 있고 충분히 최신 상태 였으므로 (Python, Numpy 및 Scipy), 하나의 명령이 필요했습니다.

 $ sudo pip install -U scikit-learn

좋아, 처음으로 잊었 기 때문에 두 개의 명령이 필요했습니다 sudo.

그것은 Scikit-learn 0.18.1을 얻었습니다. 좋은 측정을 위해 GitHub 저장소를 확인하고, nose 테스트 프레임 워크를 설치하고, 소스에서 Scikit-learn의 개발 버전을 빌드했습니다 make. 이는 저장소의 루트로 변경하고 . Python을 컴파일하고, 모든 C 파일을 생성 및 컴파일하고, 어셈블리를 연결하고, 모든 테스트를 실행하는 데 시간이 걸렸지 만 개입이 필요하지 않았습니다.

첫 번째 Scikit-learn 예제를 실행하는 것도 매우 쉬웠습니다. 일반 예제 페이지에서 교차 검증 된 예측을 그리는 예제를 클릭하고 노트북을 읽고 Python 소스 코드와 Jupyter 노트북을 다운로드하여 실행했습니다. Python 소스는 몇 초 동안 계속 움직이고 경고 메시지를 생성하고 그래프를 표시했습니다. Jupyter 노트북은 아래 그림에서 볼 수 있듯이 대화식으로 실행할 때 기본적으로 동일한 작업을 수행했습니다.

Scikit-learn은 제가 테스트 한 모든 기계 학습 프레임 워크 중에서 개발 용이성 측면에서 가장 높은 점수를 받았습니다. 대부분 알고리즘이 광고 및 문서화 된대로 작동하고 API가 일관되고 잘 설계되었으며 서로간에 "임피던스 불일치"가 거의 없기 때문입니다. 데이터 구조. 기능이 완전히 구체화되고 버그가 완전히 제거 된 라이브러리로 작업하는 것은 기쁨입니다.

Scikit-learn 학습

Scikit-learn 문서는 훌륭하며 예제는 총 약 200 개입니다. 대부분의 예에는 Matplotlib를 사용하여 분석 된 데이터에서 생성 된 하나 이상의 그래프가 포함됩니다. 이것들은 모두 도서관의 개발 용이성과 학습 용이성에 기여합니다.

도움말 찾기에 대한 5 개의 섹션과 부록으로 구성된 긴 자습서 인 "과학 데이터 처리를위한 통계 학습 자습서"가 있습니다. 튜토리얼은 기본 개념을 다루고 실제 데이터, 코드 및 그래프를 사용하여 예제를 표시하는 데 매우 유용합니다. 또한 아래 그림에 표시된 네 가지 다른 SVM 분류기의 비교와 같이 텍스트와 관련된 예제를 호출합니다.

내가 작업 한 예제는 웹 페이지에서 모두 상당히 명확했습니다. 대부분의 경우 예제를 다운로드하고 실행하면 웹 페이지에 표시되지 않는 경고가 표시되지만 항상 동일한 결과가 생성됩니다. 교차 검증 된 예측을 플로팅하기위한 Jupyter 노트북 출력을 보여주는 위의 첫 번째 그림이 좋은 예입니다.

대부분의 경고는 Apple vecLib 프레임 워크의 결함과 Python 라이브러리의 진화 때문이라고 생각합니다. 일부는 웹 페이지에 사용 된 어떤 버전에도 존재하지 않는 Python 2.7.10의 경고 인 것 같습니다. 아래 그림에는 그러한 경고가 있습니다. 해당 웹 페이지는 그렇지 않습니다.

기계 학습을위한 Python 라이브러리로서 의도적으로 제한된 범위를 가진 Scikit-learn은 매우 좋습니다. 통합 그래픽과 함께 다양한 종류의 잘 구축 된 알고리즘이 있습니다. 설치, 학습 및 사용이 비교적 쉽고 좋은 예제와 자습서가 있습니다.

반면에 Scikit-learn은 정확한 이미지 분류 및 신뢰할 수있는 실시간 언어 구문 분석 및 번역과 같은 현재 어렵지만 중요한 문제를 배제하는 딥 러닝 또는 강화 학습을 다루지 않습니다. 또한 그래픽 모델이나 시퀀스 예측을 포함하지 않으며 실제로 Python 이외의 언어에서 사용할 수 없으며 PyPy 또는 GPU를 지원하지 않습니다.

Gripping claw에서 Scikit-learn이 신경망 이외의 기계 학습에 대해 달성하는 성능은 PyPy 또는 GPU의 가속 없이도 꽤 좋습니다. Python은 종종 사람들이 인터프리터에서 기대하는 것보다 더 빠르며 Cython을 사용하여 내부 루프에 대한 C 코드를 생성하면 Scikit-learn의 병목 현상이 대부분 제거됩니다.

분명히 딥 러닝에 관심이 있다면 다른 곳을 찾아보아야합니다. 그럼에도 불구하고 다양한 관찰을 연결하는 예측 함수를 구축하는 것부터 관찰을 분류하는 것, 레이블이없는 데이터 세트의 구조를 학습하는 것까지 다양한 문제가 있습니다. 이러한 문제는 수십 개의 뉴런 계층이 필요하지 않은 평범한 오래된 머신 러닝에 적합합니다. -배움은 아주 좋습니다.

Python 팬이라면 Scikit-learn이 일반 기계 학습 라이브러리 중에서 가장 좋은 옵션 일 수 있습니다. Scala를 선호한다면 Spark ML이 더 나은 선택 일 수 있습니다. 다이어그램을 그리고 가끔 Python 또는 R의 코드 조각을 작성하여 학습 파이프 라인을 디자인하는 것을 좋아한다면 Microsoft Cortana Analytics Suite, 특히 Azure Machine Learning Studio가 사용자의 기본 설정에 적합 할 수 있습니다.

---

비용 : 무료 오픈 소스. 플랫폼 : Python, NumPy, SciPy 및 Matplotlib가 필요합니다. 릴리스는 MacOS, Linux 및 Windows에서 사용할 수 있습니다.

스코어 카드 모델 및 알고리즘 (25 %) 개발 용이성 (25 %) 문서 (20 %) 성능 (20 %) 배포 용이성 (10 %) 전체 점수 (100 %)
Scikit-learn 0.18.1 9 9 9 8 9 8.8