Scikit-learn

Top 10 Thư Viện Python Phổ Biến Cho Machine Learning¶

Giới Thiệu¶

Hiện nay, khi Machine Learning đã và đang trở thành xu hướng thì việc học và tiếp cận trở nên rất phổ biến. Nắm bắt được xu hướng đó thì dưới đây là tổng hợp lại top 10 thư viện phổ biến nhất dành cho Machine Learning. Các thư viện này dựa trên khảo sát qua nhiều trang web tổng hợp về Top 10 thư viện phổ biến nhất trong Machine Learning.

Trước hết, ta cần biết Machine Learning là gì ?

  • Machine learning ("học máy" hay "máy học") là một nhánh của AI (trí tuệ nhân tạo), chuyên xây dựng các thuật toán để máy tính tự học các qui luật và tri thức từ các tập dữ liệu được cung cấp. Nó khác với cách tiếp cận cổ điển của AI, gọi là symbolic AI, ở đó các tri thức và quy luật được người dùng lập trình cứng (hard code) cho máy tính thực hiện.

Sau đây là top 10 thư viện được mình chọn lọc mời các bạn tham khảo.

Danh Sách Nội Dung:¶

  1. NumPy
  2. Pandas
  3. Matplotlib
  4. Scikit-learn
  5. PyTorch
  6. Tensorflow
  7. Keras
  8. OpenCv
  9. SciPy
  10. Natural Language Toolkit

1. NumPy:¶

NumPy là một thư viện mã nguồn mở của Python, rất phổ biến, cần thiết khi bắt đầu tiếp cận Machine Learning. Nó được phát triển bởi Travis Oliphant vào năm 2006 dựa trên nền tảng trước đó là Numeric và Numarray. Hơn nữa, NumPy cung cấp nhiều chức năng tính toán phù hợp với các cấu trúc dữ liệu mạnh mẽ ở dạng mảng và ma trận đa chiều một cách hiệu quả với số lượng dữ liệu khổng lồ và xử lý các phép toán phức tạp.

Các điểm nổi bật của NumPy:

  • Triển khai nhanh chóng, hiệu quả đối với các mảng đa chiều.
  • Khả năng thực hiện tốt, tối ưu các phép toán trên ma trận.
  • Được cộng đồng khoa học tin dùng.
  • Tốc độ tính toán nhanh, tiêu tốn ít bộ nhớ hơn nhiều so với kiểu danh sách (list) mặc định của Python.
  • NumPy thường được sử dụng cùng SciPy và Matplotlib để thay thế cho MatLab vô cùng đắt đỏ.

Tài liệu học NumPy: Tại Đây

Ví Dụ: Thực hiện các phép tính toán cơ bản trên vector và ma trận với NumPy¶

In [1]: #Import thư viên numpy vào để sử dụng import numpy as np #Tạo mảng 1 chiều (vector) arr_1 = np.array([1, 2, 3]) arr_2 = np.array([6, 3, 2]) #Thực hiện phép toán cộng 1 mảng (vector) print('Phép Toán cộng 2 Vector:') print(arr_1 + arr_2) #Tạo mảng 2 chiều (matrix) matrix_1 = np.array([[4, 2], [5, 1]]) matrix_2 = np.array([[9, 10], [3, 4]]) #Thực hiện phép toán nhân 2 ma trận print('Phép Toán nhân 2 Ma trận:') print(np.dot(matrix_1, matrix_2)) #Phát sinh ngẫu nhiên mảng 1 chiều (vector) với các phần tử kiểu int rand_arr = np.random.randint(1, 10, size = 10) print('Random mảng 1 chiều: ') print(rand_arr) Phép Toán cộng 2 Vector: [7 5 5] Phép Toán nhân 2 Ma trận: [[42 48] [48 54]] Random mảng 1 chiều: [8 4 2 1 7 3 2 7 2 6]

2. Pandas:¶

Pandas là một thưu viện mã nguồn mở, hỗ trợ đắc lực trong việc thao tác, xử lý trên dữ liệu trong Python, được viết bởi Wes McKinney trong năm 2008, xây dựng dựa trên nền tảng của NumPy. Pandas ở đây không liên quan đến các chú gấu trúc như tên của nó, mà là một từ được viết tắt có nguồn gốc từ 'Python and Data Analysis''Panel Data'. Đây cũng là bộ công cụ phân tích và xử lý dữ liệu mạnh mẽ, cung cấp cấu trúc dữ liệu đặc biệt là DataFrame, tương tác tốt trên dữ liệu dạng bảng và chuỗi thời gian, được sử dụng rộng rãi trong nguyên cứu và các ứng dụng về khoa học dữ liệu.

Đặc Điểm Nổi Bật:

  • DataFrame đem lại sự linh hoạt và rất hiệu quả trong việc thực hiện các thao tác trên dữ liệu dạng bảng.
  • Là bộ công cụ cho phép đọc nhiều dạng file khác nhau như: excel, csv, json,...
  • Liên kết được các dữ liệu, xử lý các trường hợp dữ liệu bị thiếu. Đưa dữ liệu lộn xộn về dạng có cấu trúc và cũng dễ dàng thay đổi được cấu trúc của dữ liệu.
  • Cho phép tách, đánh chỉ mục và chia nhỏ được tập dữ liệu dựa trên các nhãn.
  • Được dùng trong nhiều lĩnh vực như: học thuật, thương mại, tài chính, kinh tế,...

Tài Liệu Học Pandas: Tại Đây

Dữ liệu về covid-19 được dùng trong đoạn code bên dưới được lấy từ: COVID-19 Complete Dataset (Updated every 24hrs)

Ví Dụ: đọc file csv có dữ liệu về covid-19¶

In [2]: #Import thư viện Pandas import pandas as pd #Đọc File dữ liệu về Covid-19 đã có sẵn, truyền path chứa dữ liệu #pd.read_csv('path file') df = pd.read_csv('covid_19_clean_complete.csv') #Hiện các dữ liệu về covid-19 vào ngày 3/4/2020 dưới định dạng m/d/y df[df['Date'] == '4/3/20'] Out[2]:
Province/State Country/Region Lat Long Date Confirmed Deaths Recovered
18432 NaN Afghanistan 33.000000 65.000000 4/3/20 281 6 10
18433 NaN Albania 41.153300 20.168300 4/3/20 304 17 89
18434 NaN Algeria 28.033900 1.659600 4/3/20 1171 105 62
18435 NaN Andorra 42.506300 1.521800 4/3/20 439 16 16
18436 NaN Angola -11.202700 17.873900 4/3/20 8 2 1
... ... ... ... ... ... ... ... ...
18683 NaN MS Zaandam 0.000000 0.000000 4/3/20 9 2 0
18684 NaN Botswana -22.328500 24.684900 4/3/20 4 1 0
18685 NaN Burundi -3.373100 29.918900 4/3/20 3 0 0
18686 NaN Sierra Leone 8.460555 -11.779889 4/3/20 2 0 0
18687 NaN Malawi -13.254308 34.301525 4/3/20 3 0 0

256 rows × 8 columns

3. Matplotlib:¶

Để thực hiện việc thống kê và trực quan hóa dữ liệu của bạn thì Matplotlib là một giải pháp tối ưu cho việc đó. Nó là một thư viện vẽ đồ thị rất mạnh mẽ và hữu ích đối với những người sử dụng Python và NumPy. Nó được phát triển bởi John D. Hunter vào năm 2003. Với Matplotlib bạn có thể tạo ra các biểu đồ như: Histograms, Cột, Tròn, Scatter,... với chỉ một vài dòng mã.

Các đặc trưng nổi bật:

  • Là một thư viện dễ tiếp cận, dễ sử dụng cho người mới bắt đầu.
  • Có giao diện gần gũi, cú pháp đơn giản dễ hiểu.
  • Cung cấp các tính năng để kiểm soát các kiểu đường kẻ, phông chữ, định dạng,...giúp các lập trình viên dễ dàng quản lí hơn.

Tài liệu học Tại Đây

In [3]: # import thư viện matplotlib import matplotlib.pyplot as plt # Khởi tạo giá trị biểu đồ dạng đường plt.plot([1,2,3,4],[1,4,9,16]) # Đặt tiêu đề cho biều đồ plt.title('Biểu đồ 1') # Đặt tiêu đề cho trục hoành & trục tung plt.xlabel('Trục X') plt.ylabel('Trục Y') # Hiển thị plt.show()

4. Scikit-learn:¶

Scikit-learn là một thư viện mã nguồn mở, rất mạnh mẽ, thông dung, được viết phần lớn bởi Python dành cho Machine Learning, được phát triển bởi David Cournapeau trong một dự án có tên Google Summer of Code vào năm 2007. Scikit-learn được thiết kế dựa trên nền tảng của Numpy và SciPy, chứa hầu hết các thuật toán hiện đại nhất được xây dựng sẵn như: classification, regression, clustering,... Đây cũng là một trong top các thư viện nổi tiếng của Machine Learning được dùng nhiều trong các dự án trên Github.

Đặc điểm nổi bật:

  • Hỗ trợ hầu hết các thuật toán cơ bản của Machine Learning, dễ dàng sử dụng, mang lại hiệu quả cao.
  • Được công đồng nguyên cứu Machine Learning tin dùng.
  • Bộ dữ liệu có sẵn phong phú, phù hợp cho việc tìm hiểu, học tập.
  • Cung cấp bộ công cụng tiền xử lý để làm sạch dữ liệu.

Tài liệu học Scikit-Learn: Tại Đây

Ví Dụ: Lấy dữ liệu từ thư viện datasets trong scikit-learn¶

In [4]: #import thư viện sklearn from sklearn.datasets import load_iris import pandas as pd #lấy dữ liệu của hoa iris iris = load_iris() #Đưa dữ liệu vào DataFrame của Pandas X = pd.DataFrame(iris.data, columns=iris.feature_names) y = pd.DataFrame(iris.target,columns = ['types']) #Kết nối dữ liệu và nhãn label = pd.concat([X,y],axis=1) label Out[4]:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) types
0 5.1 3.5 1.4 0.2 0
1 4.9 3.0 1.4 0.2 0
2 4.7 3.2 1.3 0.2 0
3 4.6 3.1 1.5 0.2 0
4 5.0 3.6 1.4 0.2 0
... ... ... ... ... ...
145 6.7 3.0 5.2 2.3 2
146 6.3 2.5 5.0 1.9 2
147 6.5 3.0 5.2 2.0 2
148 6.2 3.4 5.4 2.3 2
149 5.9 3.0 5.1 1.8 2

150 rows × 5 columns

5. PyTorch:¶

PyTorch là một thư viện Machine Learning mã nguồn mở dựa trên thư viện Torch) mới được phát triển vào tháng 10/2016. Nó được sử dụng cho các ứng dụng như: Computer Vision và NLP(Natural Language Processing). PyTorch được xem là một trong những ứng cử viên hàng đầu về Machine Learning và Deep Learning tốt nhất. Cùng với tính dễ học và dễ sử dụng, đủ linh hoạt để sử dụng trong các ứng dụng khác nhau, hiệu quả trong việc xử lý những bộ dữ liệu thực tế lớn để đưa ra kết quả đủ chính xác. Bên cạnh đó, phong cách code mang tính "rất Python", giúp những ai đã học qua Python đều sẽ dễ dàng tìm hiểu và sử dụng. Hơn nữa, PyTorch còn sỡ hữu khả năng tính toán với "GPU", mang lại hiệu năng tính toán cao.

Các đặc trưng nổi bật:

  • Khả năng xử lý tăng tốc thông qua các đơn vị xử lý đồ họa
  • Dễ học, dễ sử dụng và được tích hợp với môi trường Python

Hướng dẫn cài đặt:Tại đây

Tài liệu học: Tại đây

In [5]: import torch # Khởi tạo 1 Tensor với chỉ một hàng chứa toàn giá trị 1 a = torch.ones(5) # Print tensor vừa tạo print(a) # tensor([1., 1., 1., 1., 1.]) # Khởi tạo 1 Tensor với chỉ một hàng chứa toàn giá trị 0 b = torch.zeros(5) print(b) # tensor([0., 0., 0., 0., 0.]) # Khởi tạo ma trận toàn số 0 có 3 hàng 2 cột d = torch.zeros(3,2) print(d) # Khởi tạo không gian 3 chiều(3D Tensor) g = torch.tensor([[[1., 2.], [3., 4.]], [[5., 6.], [7., 8.]]]) print(g) tensor([1., 1., 1., 1., 1.]) tensor([0., 0., 0., 0., 0.]) tensor([[0., 0.], [0., 0.], [0., 0.]]) tensor([[[1., 2.], [3., 4.]], [[5., 6.], [7., 8.]]])

6. Tensorflow:¶

Tensorflow là một thư viện mã nguồn mở dành cho Machine Learning, được tạo ra từ 50 đội khác nhau trong các sản phẩm thương mại của Google như: Nhận dạng giọng nói, Google Photos, Gmail và cả Google Search. Tensorflow là thế hệ thứ 2 trong hệ thống Machine Learning được phát hành vào ngày 9/11/2015, kế nhiệm từ DistBelief là hệ thống Machine Learning đầu tiên được xây dựng bởi đội Google Brain. Nó cung cấp đầy đủ các công cụ để xây dựng một thuật toán Machine Learning từ nhỏ bé đến rất lớn, kèm với đó Tensorflow còn cung cấp thêm các công cụ tuyệt vời như:

  • TensorBoard: công cụ giúp minh họa các đồ thị tính toán (computational graph), sự thay đổi giá trị của các hàm tính toán (loss, accuracy,…) dưới dạng biểu đồ.
  • TensorFlow Serving: công cụ giúp triển khai các mô hình Machine Learning viết bằng TensorFlow thành một sản phẩm thực sự.
  • Các API giúp cho việc sử dụng TensorFlow dễ dàng hơn được phát triển bởi những nhà nghiên cứu về Machine Learning trên toàn thế giới (TensorFlow High Level API, TF-Slim, TensorFlow Object Detection API)
  • Tập hợp code mẫu giúp cho những người mới học dễ tiếp cận hơn.
Hình 1: Biểu đồ thể hiện số paper trên trang arxiv.org đề cập đến một FrameWork trong Machine Learning

Tensorflow có khả năng xử lý tính toán số học dựa trên biểu đồ mô tả sự thay đổi của dữ liệu, trong đó có các node là các phép tính toán học còn các cạnh biểu thì luồng dữ liệu.

Hình 2: Đồ thị tính toán đơn giản trong tensorflow

Tài Liệu Học Tensorflow: Tại Đây

Ví dụ: Cộng 2 số với Tensorflow¶

In [11]: import tensorflow as tf # tạo một graph session sess = tf.Session() # tính tổng 3 và 4 print(sess.run(tf.add(3,4))) # kết quả: 7 7

7. Keras:¶

Keras là một thư viện mã nguồn mở được viết bằng Python dành cho DeepLearning, được phát triển bởi François Chollet vào năm 2015. Nó là một open source cho Neural Network, cũng là một API bậc cao có thể sử dụng chung với các thư viện deep learning nổi tiếng như tensorflow(được phát triển bởi Google), CNTK(được phát triển bởi microsoft),theano(người phát triển chính Yoshua Bengio).

Đặc Điểm Nổi Bật:

  • Keras ưu tiên trải nghiệm của người lập trình.
  • Keras đã được sử dụng rộng rãi trong doanh nghiệp và cộng đồng nghiên cứu.
  • Keras giúp dễ dàng biến các thiết kế thành sản phẩm.
  • Cú pháp đơn giản hơn rất nhiều so với Tensorflow.
  • Có thể chạy trên cả CPU và GPU.
  • Hỗ trợ xây dựng CNN , RNN và có thể kết hợp cả hai.

Tài Liệu Học Keras: Tại Đây

Ví Dụ: Keras với Linear Regression¶

In [ ]: import numpy as np from keras.models import Sequential from keras.layers.core import Dense, Activation from keras import optimizers # 1. create pseudo data y = 2*x0 + 3*x1 + 4 X = np.random.rand(100, 2) y = 2* X[:,0] + 3 * X[:,1] + 4 + .2*np.random.randn(100) # noise added # 2. Build model model = Sequential([Dense(1, input_shape = (2,), activation='linear')]) # 3. gradient descent optimizer and loss function sgd = optimizers.SGD(lr=0.1) model.compile(loss='mse', optimizer=sgd) # 4. Train the model model.fit(X, y, epochs=100, batch_size=2) In [ ]: model.get_weights()

8. OpenCV:¶

OpenCV(Open Source Computer Vision) là một thư viện mã ngồn mở hàng đầu cho thị giác máy tính(Computer Vision), Machine Learning. Được cho ra mắt vào năm 2000 bởi tập đoàn Intel và các cộng sự khác. Dù có tuổi đời lâu như thế nhưng OpenCV vẫn luôn là lựa chọn hàng đầu và được sử dụng rộng rãi với trong các ứng dụng như: Phân tích hình ảnh y tế, Kiểm tra giám sát tự động, Robot và xe hơi tự lái, Thực tế ảo,... và luôn được cập nhật nâng cấp, gần nhất là ngày 3/4/2020 với phiên bản 4.3.0. OpenCV có hơn 2500 thuật toán cung cấp cả phương pháp cổ điển và tiên tiến cho các ứng dụng Machine Learing và ứng dụng thị giác máy tính.

Tài liệu học: Tại đây

In [6]: # xử lý ảnh thành trắng đen bằng cv2 import os, sys import cv2 from matplotlib import pyplot as plt def convert_to_binary(img_grayscale, thresh=100): thresh, img_binary = cv2.threshold(img_grayscale, thresh, maxval=255, type=cv2.THRESH_BINARY) return img_binary if __name__ == "__main__": input_image_path = 'cat.jpg' # đọc màu hình ảnh với màu xám: "cv2.IMREAD_GRAYSCALE" img_grayscale = cv2.imread(input_image_path, cv2.IMREAD_GRAYSCALE) img_binary = convert_to_binary(img_grayscale, thresh=150) # xuất ra ảnh đã xử lý xong cv2.imwrite('adaptive_%s' % input_image_path, img_binary)

Ảnh gốc: Ảnh sao khi xử lý:

9. SciPy:¶

SciPy là một thư viện mã nguồn mở, tập hợp các thuật toán toán học và các hàm tiện lợi được xây dựng trên phần mở rộng NumPy của Python và được phát triển vào khoảng năm 2001. Vì là một thư viện lâu đời nên về độ phổ biến của SciPy thì khỏi phải bàn nhất là những người đam mê Machine Learning sẽ không thể bỏ qua thư viện này. Giải thích cho sự phổ biến đó là vì nó chứa các mô-đun khác nhau để tối ưu hóa, đại số tuyến tính, tích hợp và thống kê. Đặc biệt SciPy cũng rất hữu ích cho việc thao tác hình ảnh.

Tài liệu học: Tại đây

In [9]: # Sử dụng SciPy để xử lý hình ảnh import scipy # tạo 1 ma trận 4x2 toàn số 0 kiểu int a = scipy.zeros((4,2), int) print(a) # tạo 1 mảng chứ 10 phần tử toàn số 1 kiểu float b = scipy.ones(10) print(b) # tạo 1 mảng chứ 10 phần tử toàn số 0 kiểu int c = scipy.zeros(10, int) print(c) [[0 0] [0 0] [0 0] [0 0]] [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] [0 0 0 0 0 0 0 0 0 0]

10. Natural Language Toolkit:¶

Natural Language Toolkit (NLTK) là một trong những thư viện Machine Learning hàng đầu của Python để Xử lý ngôn ngữ tự nhiên (NLP).Nó được phát triển bởi Steven Bird và Edward Loper thuộc khoa Khoa học Máy tính và Thông tin tại Đại học Pennsylvania vào năm 2001. NLTK nhằm hỗ trợ nghiên cứu và giảng dạy trong NLP hoặc các lĩnh vực liên quan chặt chẽ như: Ngôn ngữ học thực nghiệm, Trí tuệ nhân tạo, Truy xuất thông tin và Machine Learning. Nó được xây dựng trên dựa trên Python và sử dụng hơn 50 tài nguyên để xử lý ngôn ngữ như WordNet. NLTK cũng bao gồm hàng loạt các chức năng và thư viện xử lý để phân loại văn bản, phân tích cú pháp và lí luận ngữ nghĩa. Bên cạnh tính dễ sử dụng và khả năng tiếp cận thì với khả năng mạnh mẽ của nó, khiến NLTK trở thành lựa chọn phù hợp cho người mới bắt đầu tiếp cận với Machine Learning và NLP. NLTK cũng có các tính năng phát hiện dấu câu, số ký tự và số từ cộng với các giải pháp được xây dựng từ NLTK rất dễ triển khai, gỡ lỗi do tác động xử lí thấp và lệnh tương đối dễ hiểu. Những điều này làm cho NLTK trở thành một trong những thư viện được sử dụng rỗng rãi nhất thế giới.

Tài liệu học: Tại đây

In [8]: import nltk # Khi chạy lần đầu cần download bộ data của nltk # nltk.download() s = 'Chào mừng các bạn đến với Machine Learning' tokens = nltk.word_tokenize(s) print(tokens) print(nltk.pos_tag(tokens)[:6]) ['Chào', 'mừng', 'các', 'bạn', 'đến', 'với', 'Machine', 'Learning'] [('Chào', 'NNP'), ('mừng', 'NN'), ('các', 'NN'), ('bạn', 'NN'), ('đến', 'NNP'), ('với', 'NN')]

Tóm Lại:¶

Sau khi tóm tắt sơ lược về 10 thư viện phổ biến dành cho Machine Learning thì có thể thấy được vì sau chúng lại phổ biến đến như vậy:

  • Đa số là thư viện mã nguồn mở, miễn phí và chúng được hoạt động trên môi trường Python.
  • Chúng được sử dụng rộng rãi vì tính đơn giản, dễ tìm hiểu, dễ tiếp cận và dễ sử dụng phù hợp với những người mới tiếp xúc với Machine Learning. Bên cạnh đó việc chúng dựa trên nền tản Python rất gần gũi với người sử dụng.
  • Các thư viện được tối ưu hóa cao, có thể xử lý các tác vụ nhanh chóng, cải thiện được tốc độ làm việc.

Từ khóa » Thư Viện Sklearn