Thư Viện Scikit-learn Trong Python Là Gì?

Thư Viện Scikit-learn Trong Python Là Gì?

Nếu bạn đang sử dụng Python và đang muốn tìm một thư viện mạnh mẽ mà bạn có thể mang các thuật toán học máy (machine learning) vào trong một hệ thống thì không còn thư viện nào thích hợp hơn scikit-learn. Thư viện này tích hợp rất nhiều thuật toán hiện đại và cố điển giúp bạn vừa học vừa tiến hành đưa ra các giải pháp hữu ích cho bài toán của bạn một cách đơn giản.

Sau bài viết này, bạn sẽ có một góc nhìn tổng quan về thư viện scikit-learn và giới thiệu cho bạn những tài liệu có thể học thêm.

Thư viện này được hình thành như thế nào?

Scikit-learn ban đầu được đề xuất bởi David Cournapeau trong một dự án mùa hè của Google vào năm 2007.

Later Matthieu Brucher tham gia dự án trên và bắt đầu sử dụng nó làm một phần luận văn tiến sĩ của ông ấy. Vào năm 2010, INRIA bắt đầu tài trợ và phiên bản đầu tiên được xuất bản (v0.1 beta) vào cuối tháng 1 năm 2010.

Dự án vẫn đang được nghiên cứu bởi một đội ngũ hơn 30 nhà nghiên cứu đến từ các công ty lớn INRIA, Google, TinycluesPython Software Foundation.

Trang chủ Scikit-learn

Scikit-learn là gì?

Scikit-learn (Sklearn) là thư viện mạnh mẽ nhất dành cho các thuật toán học máy được viết trên ngôn ngữ Python. Thư viện cung cấp một tập các công cụ xử lý các bài toán machine learning và statistical modeling gồm: classification, regression, clustering, và dimensionality reduction.

Thư viện được cấp phép bản quyền chuẩn FreeBSD và chạy được trên nhiều nền tảng Linux. Scikit-learn được sử dụng như một tài liệu để học tập.

Để cài đặt scikit-learn trước tiên phải cài thư viện SciPy (Scientific Python). Những thành phần gồm:

  • Numpy: Gói thư viện xử lý dãy số và ma trận nhiều chiều
  • SciPy: Gói các hàm tính toán logic khoa học
  • Matplotlib: Biểu diễn dữ liệu dưới dạng đồ thị 2 chiều, 3 chiều  
  • IPython: Notebook dùng để tương tác trực quan với Python
  • SymPy: Gói thư viện các kí tự toán học
  • Pandas: Xử lý, phân tích dữ liệu dưới dạng bảng

Những thư viện mở rộng của SciPy thường được đặt tên dạng SciKits. Như thư viện này là gói các lớp, hàm sử dụng trong thuật toán học máy thì được đặt tên là scikit-learn.

Scikit-learn hỗ trợ mạnh mẽ trong việc xây dựng các sản phẩm. Nghĩa là thư viện này tập trung sâu trong việc xây dựng các yếu tố: dễ sử dụng, dễ code, dễ tham khảo, dễ làm việc, hiệu quả cao.

Mặc dù được viết cho Python nhưng thực ra các thư viện nền tảng của scikit-learn lại được viết dưới các thư viện của C để tăng hiệu suất làm việc. Ví dụ như: Numpy(Tính toán ma trận), LAPACK, LibSVM và Cython.

Nhóm thuật toán

Thư viện tập trung vào việc mô hình hóa dữ liệu. Nó không tập trung vào việc truyền tải dữ liệu, biến đổi hay tổng hợp dữ liệu. Những công việc này dành cho thư viện NumpyPandas
thuật toán phân cụm trung bình
Hình trên lấy từ một bản demo của thuật toán phân cụm

Sau đâu là một số nhóm thuật toán được xây dựng bởi thư viện scikit-learn:

  • Clustering: Nhóm thuật toán Phân cụm dữ liệu không gán nhãn. Ví dụ thuật toán KMeans
  • Cross Validation: Kiểm thử chéo, đánh giá độ hiệu quả của thuật toán học giám sát sử dụng dữ liệu kiểm thử (validation data) trong quá trình huấn luyện mô hình.
  • Datasets: Gồm nhóm các Bộ dữ liệu được tích hợp sẵn trong thư viện. Hầu như các bộ dữ liệu đều đã được chuẩn hóa và mang lại hiêu suất cao trong quá trình huấn luyện như iris, digit, ...
  • Dimensionality Reduction: Mục đích của thuật toán này là để Giảm số lượng thuộc tính quan trọng của dữ liệu bằng các phương pháp như tổng hợp, biểu diễn dữ liệu và lựa chọn đặc trưng. Ví dụ thuật toán PCA (Principal component analysis).
  • Ensemble methods: Các Phương pháp tập hợp sử dụng nhiều thuật toán học tập để có được hiệu suất dự đoán tốt hơn so với bất kỳ thuật toán học cấu thành nào.
  • Feature extraction: Trích xuất đặc trưng. Mục đích là để định nghĩa các thuộc tình với dữ liệu hình ảnh và dữ liệu ngôn ngữ.
  • Feature selection: Trích chọn đặc trưng. Lựa chọn các đặc trưng có ý nghĩa trong việc huấn luyện mô hình học giám sát.
  • Parameter Tuning: Tinh chỉnh tham số. Các thuật toán phục vụ việc lựa chọn tham số phù hợp để tối ưu hóa mô hình.
  • Manifold Learning: Các thuật toán học tổng hợp và Phân tích dữ liệu đa chiều phức tạp.
  • Supervised Models: Học giám sát. Mảng lớn các thuật toán học máy hiện nay. Ví dụ như linear models, discriminate analysis, naive bayes, lazy methods, neural networks, support vector machines và decision trees.

Chúng ta đi tìm hiểu một ví dụ cụ thể sau

Ví dụ: Cây phân loại và hồi quy (Classification and Regression Trees)

Tôi muốn cho bạn một ví dụ để cho bạn thấy việc sử dụng thư viện dễ dàng như thế nào.

Ở ví dụ sau, chúng ta sử dụng cây quyết định Decision tree phân loại để mô hình hóa bộ dữ liệu hoa Iris.

Bộ dữ liệu này được cung cấp dưới dạng tập dữ liệu mẫu với thư viện và được tải. Trình phân loại phù hợp với dữ liệu và sau đó dự đoán được thực hiện trên dữ liệu đào tạo.

Bộ dữ liệu này được cung cấp dưới dạng tập dữ liệu mẫu ngay trong thư viện sau đó được tải xuống. Thuật toán phân loại bắt đầu huấn luyện mô hình với bộ dữ liệu Iris ban đầu sau đó dự đoán lại các dữ liệu huấn luyện.

Cuối cùng, chúng ta đánh giá độ tốt của mô hình bằng quan sát accuracyconfusion matrix của 2 tập nhãn thực tế và nhãn dự đoán của mô hình.

# Sample Decision Tree Classifier
from sklearn import datasets
from sklearn import metrics
from sklearn.tree import DecisionTreeClassifier
# load the iris datasets
dataset = datasets.load_iris()
# fit a CART model to the data
model = DecisionTreeClassifier()
model.fit(dataset.data, dataset.target)
print(model)
# make predictions
expected = dataset.target
predicted = model.predict(dataset.data)
# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))

Chạy ví dụ trên được kết quả như sau. Bạn có thể thấy chi tiết mô hình cây phân loại được huấn luyện với các tham số chi tiết như thế nào, mỗi tham số ảnh hưởng rất lớn tới việc mô hình có tốt hay không. Phía dưới là classification reportconfusion matrix của mô hình.

DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
            max_features=None, max_leaf_nodes=None, min_samples_leaf=1,
            min_samples_split=2, min_weight_fraction_leaf=0.0,
            presort=False, random_state=None, splitter='best')
             precision    recall  f1-score   support
 
          0       1.00      1.00      1.00        50
          1       1.00      1.00      1.00        50
          2       1.00      1.00      1.00        50
 
avg / total       1.00      1.00      1.00       150
 
[[50  0  0]
 [ 0 50  0]
 [ 0  0 50]]

Bạn có thể tìm thấy tại đây danh sách một loạt các công ty lớn, uy tín sử dụng thư viện làm nền tảng phát triển công nghệ của họ. Ví dụ như J.P.Morgan, Hugging Face, Betaworks, Spotify, Inria, Mendeley, wise.io, Evernote, Telecom ParisTech, AWeber,... Ngoài ra còn có hàng trăm tổ chức lớn hơn sử dụng công nghệ này.

Thư viện có phạm vi ứng dụng rộng, những bản phát hành đều được nghiên cứu quản lý chặt chẽ do đó nó phù hợp ứng dụng cho cả các dự án PrototypeProduction.

Nguồn tham khảo

Bạn có thể vào Scikit-Learn để tìm hiểu thêm, lấy mã nguồn từ Github và tìm kiếm các phiên bản trên Sourceforge .

Hướng dẫn

Với người mới bắt đầu, tôi khuyên bạn nên bắt đầu với hướng dẫn cơ bản rồi đến đọc các thuật toán cụ thể và các thuật toán liên quan để tổng hợp kiến thức và chạy lại các ví dụ để hiểu đầy đủ, hệ thống một bài toán.

Học máy thực thất là ngành nghiên cứu về dữ liệu lớn, toán học đại cương, xác suất thống kê nên khi tiếp cận không được vội vàng mà phải hiểu cặn kẽ từng khía cạnh rồi từ đó mới tự xây dựng mô hình từ bé đến lớn hoạt động hiệu quả cho từng bài toán cụ thể. Cuối cùng, bạn mới có thể tham gia một dự án học lớn với một khối lượng công việc cần sự kiên trì và khả năng tính toán cao.

Scikit-learn là một thư viện do đó tài liệu hướng dẫn triển khai chúng là rất quan trọng để bạn hoàn thành công việc.

Tài liệu nghiên cứu

Khi bạn hướng đến việc làm một dự án hay muốn có một góc nhìn rộng hơn về các bài toán học máy. Bạn nên tham gia nghiên cứu và đọc các tài liệu khoa học. Ở đây, những bài báo khác nhau về cùng một chủ đề sẽ cho bạn khả năng khái quát vấn đề từ đó tổng hợp, hiểu sâu hơn về học máy.

Sách tham khảo

Nếu bạn cần một cuốn sách nâng cao tổng hợp, tôi giới thiệu bạn cuốn thứ 2. Cuốn sách nêu ra phương pháp xây dựng một hệ thống học máy tỷ mỉ. Những ví dụ đưa ra ngắn gọn, cơ bản, dễ hiểu. Cuốn sách viết quan tâm vào xây dựng các mô hình nên khả năng tổng hợp cao phù hợp cho đối tượng đã có kiến thức nền về học máy và muốn xây dựng hệ thống học máy tối ưu với Python và thư viện Scikit-learn.

Tạm kết

Trên đây, một góc nhìn tổng quan về thư viện scikit-learn và giới thiệu cho bạn các nguồn tài liệu chuẩn và các cuốn sách tham khảo để các bạn có thể học cũng như nghiên cứu sâu hơn. Chúc các bạn thành công.