Chủ Nhật, 24/03/2019 | 00:00 GMT+7

Cách tạo bộ phân loại học máy bằng Python với Scikit-learning

Máy học là một lĩnh vực nghiên cứu về khoa học máy tính, trí tuệ nhân tạo và thống kê. Trọng tâm của học máy là đào tạo các thuật toán để học các mẫu và đưa ra dự đoán từ dữ liệu. Máy học đặc biệt có giá trị vì nó cho phép ta sử dụng máy tính để tự động hóa các quy trình ra quyết định.

Bạn sẽ tìm thấy các ứng dụng học máy ở khắp mọi nơi. Netflix và Amazon sử dụng công nghệ máy học để đưa ra các đề xuất sản phẩm mới. Các ngân hàng sử dụng máy học để phát hiện hoạt động gian lận trong giao dịch thẻ tín dụng và các công ty chăm sóc sức khỏe đang bắt đầu sử dụng máy học để theo dõi, đánh giá và chẩn đoán bệnh nhân.

Trong hướng dẫn này, bạn sẽ triển khai một thuật toán học máy đơn giản trong Python bằng Scikit-learning , một công cụ học máy dành cho Python. Sử dụng database thông tin về khối u ung thư vú, bạn sẽ sử dụng bộ phân loại Naive Bayes (NB) để dự đoán khối u là ác tính hay lành tính.

Đến cuối hướng dẫn này, bạn sẽ biết cách xây dựng mô hình học máy của riêng mình bằng Python.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần :

  • Python 3 và môi trường lập trình local được cài đặt trên máy tính của bạn. Bạn có thể làm theo hướng dẫn cài đặt và cài đặt thích hợp cho hệ điều hành của bạn để cấu hình điều này.
  • Jupyter Notebook đã được cài đặt trong virtualenv cho hướng dẫn này. Notebook Jupyter cực kỳ hữu ích khi chạy các thử nghiệm học máy. Bạn có thể chạy các khối mã ngắn và xem kết quả nhanh chóng, giúp dễ dàng kiểm tra và gỡ lỗi mã của bạn.

Bước 1 - Nhập Scikit-learning

Hãy bắt đầu bằng cách cài đặt module Python Scikit-learning , một trong những phần mềm học máy tốt nhất và được tài liệu hóa nhiều nhất cho Python.

Để bắt đầu dự án mã hóa của ta , hãy kích hoạt môi trường lập trình Python 3 của ta . Đảm bảo rằng bạn đang ở trong folder chứa môi trường của bạn và chạy lệnh sau:

  • . my_env/bin/activate

Với môi trường lập trình của ta được kích hoạt, hãy kiểm tra xem module Sckikit-learning đã được cài đặt chưa:

  • python -c "import sklearn"

Nếu sklearn được cài đặt, lệnh này sẽ hoàn tất mà không có lỗi. Nếu nó chưa được cài đặt, bạn sẽ thấy thông báo lỗi sau:

Output
Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'

Thông báo lỗi cho biết sklearn chưa được cài đặt, vì vậy hãy download thư viện bằng cách sử dụng pip :

  • pip install scikit-learn[alldeps]

Khi quá trình cài đặt hoàn tất, hãy chạy Jupyter Notebook:

  • jupyter notebook

Trong Jupyter, tạo một Sổ tay Python mới có tên ML Tutorial . Trong ô đầu tiên của Notebook, nhập module sklearn :

Hướng dẫn ML
import sklearn 

Sổ ghi chép của bạn sẽ giống như hình sau:

 Notebook  Jupyter với một ô Python, nhập sklearn

Bây giờ ta đã nhập sklearn vào sổ ghi chép của bạn , ta có thể bắt đầu làm việc với tập dữ liệu cho mô hình học máy của bạn .

Bước 2 - Nhập Dataset của Scikit-learning

Bộ dữ liệu mà ta sẽ làm việc với trong hướng dẫn này là Database chẩn đoán ung thư vú Wisconsin . Bộ dữ liệu bao gồm nhiều thông tin khác nhau về các khối u ung thư vú, cũng như các nhãn phân loại ác tính hoặc lành tính . Tập dữ liệu có 569 trường hợp hoặc dữ liệu về 569 khối u và bao gồm thông tin về 30 thuộc tính hoặc đặc điểm, chẳng hạn như bán kính của khối u, kết cấu, độ mịn và diện tích.

Sử dụng bộ dữ liệu này, ta sẽ xây dựng một mô hình học máy để sử dụng thông tin về khối u để dự đoán khối u là ác tính hay lành tính.

Scikit-learning được cài đặt với nhiều bộ dữ liệu khác nhau mà ta có thể tải vào Python và bộ dữ liệu ta muốn được bao gồm. Nhập và tải tập dữ liệu:

Hướng dẫn ML
... from sklearn.datasets import load_breast_cancer   # Load dataset data = load_breast_cancer() 

Các data biến đại diện cho một đối tượng Python hoạt động như một từ điển . Các khóa từ điển quan trọng cần xem xét là tên nhãn phân loại ( target_names ), các nhãn thực tế ( target ), các tên thuộc tính / tính năng ( feature_names ) và các thuộc tính ( data ).

Các thuộc tính là một phần quan trọng của bất kỳ bộ phân loại nào. Các thuộc tính nắm bắt các đặc điểm quan trọng về bản chất của dữ liệu. Với nhãn mà ta đang cố gắng dự đoán (khối u ác tính so với lành tính), các thuộc tính hữu ích có thể có bao gồm kích thước, bán kính và kết cấu của khối u.

Tạo các biến mới cho từng bộ thông tin quan trọng và gán dữ liệu:

Hướng dẫn ML
... # Organize our data label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data'] 

Bây giờ ta có danh sách cho từng bộ thông tin. Để hiểu rõ hơn về tập dữ liệu của ta , hãy xem dữ liệu của ta bằng cách in nhãn lớp, nhãn của version dữ liệu đầu tiên, tên đối tượng của ta và giá trị đối tượng cho version dữ liệu đầu tiên:

Hướng dẫn ML
... # Look at our data print(label_names) print(labels[0]) print(feature_names[0]) print(features[0]) 

Bạn sẽ thấy các kết quả sau nếu bạn chạy mã:

Alt Jupyter Notebook với ba ô Python, in version  đầu tiên trong tập dữ liệu của  ta

Như hình ảnh cho thấy, tên lớp của ta là ác tínhlành tính , sau đó được ánh xạ tới các giá trị binary 01 , trong đó 0 đại diện cho khối u ác tính và 1 đại diện cho khối u lành tính. Do đó, trường hợp dữ liệu đầu tiên của ta là một khối u ác tính có bán kính trung bình1.79900000e+01 .

Bây giờ ta đã tải xong dữ liệu, ta có thể làm việc với dữ liệu của bạn để xây dựng bộ phân loại học máy của bạn .

Bước 3 - Tổ chức dữ liệu thành tập hợp

Để đánh giá trình phân loại hoạt động tốt như thế nào, bạn phải luôn kiểm tra mô hình trên dữ liệu không nhìn thấy. Do đó, trước khi xây dựng một mô hình, hãy chia dữ liệu thành hai phần: tập huấn luyệntập thử nghiệm .

Bạn sử dụng bộ đào tạo để đào tạo và đánh giá mô hình trong giai đoạn phát triển. Sau đó, bạn sử dụng mô hình đã được đào tạo để đưa ra dự đoán về tập kiểm tra chưa nhìn thấy. Cách tiếp cận này cho bạn cảm giác về hiệu suất và độ bền của mô hình.

May mắn là sklearn có một hàm gọi là train_test_split() , hàm này chia dữ liệu thành các bộ này. Nhập hàm và sau đó sử dụng nó để chia nhỏ dữ liệu:

Hướng dẫn ML
... from sklearn.model_selection import train_test_split   # Split our data train, test, train_labels, test_labels = train_test_split(features,                                                           labels,                                                           test_size=0.33,                                                           random_state=42) 

Hàm tách dữ liệu ngẫu nhiên bằng cách sử dụng tham số test_size . Trong ví dụ này, bây giờ ta có một tập test ( test ) đại diện cho 33% tập dữ liệu root . Dữ liệu còn lại ( train ) sau đó tạo thành dữ liệu đào tạo. Ta cũng có các nhãn tương ứng cho cả biến train / test, tức là train_labelstest_labels .

Bây giờ ta có thể chuyển sang đào tạo mô hình đầu tiên của ta .

Bước 4 - Xây dựng và Đánh giá Mô hình

Có rất nhiều mô hình cho học máy, và mỗi mô hình đều có điểm mạnh và điểm yếu riêng. Trong hướng dẫn này, ta sẽ tập trung vào một thuật toán đơn giản thường hoạt động tốt trong các nhiệm vụ phân loại binary , đó là Naive Bayes (NB) .

Đầu tiên, nhập module GaussianNB . Sau đó, khởi tạo mô hình bằng GaussianNB() , sau đó huấn luyện mô hình bằng cách điều chỉnh nó với dữ liệu bằng cách sử dụng gnb.fit() :

Hướng dẫn ML
... from sklearn.naive_bayes import GaussianNB   # Initialize our classifier gnb = GaussianNB()  # Train our classifier model = gnb.fit(train, train_labels) 

Sau khi ta đào tạo mô hình, ta có thể sử dụng mô hình đã đào tạo để đưa ra dự đoán trên tập thử nghiệm của ta , mà ta thực hiện bằng cách sử dụng hàm predict() . Hàm predict() trả về một mảng các dự đoán cho từng cá thể dữ liệu trong tập kiểm tra. Sau đó, ta có thể in các dự đoán của bạn để biết được những gì mô hình đã xác định.

Sử dụng hàm predict() với bộ test và in kết quả:

Hướng dẫn ML
... # Make predictions preds = gnb.predict(test) print(preds) 

Chạy mã và bạn sẽ thấy các kết quả sau:

 Notebook  Jupyter với ô Python in các giá trị dự đoán của bộ phân loại Naive Bayes trên dữ liệu thử nghiệm của  ta

Như bạn thấy trong kết quả của Notebook Jupyter, hàm predict() trả về một mảng 0 s và 1 s đại diện cho các giá trị dự đoán của ta cho loại khối u (ác tính so với lành tính).

Bây giờ ta đã có dự đoán của bạn , hãy đánh giá trình phân loại của ta đang hoạt động tốt như thế nào.

Bước 5 - Đánh giá độ chính xác của mô hình

Sử dụng mảng các nhãn lớp thực, ta có thể đánh giá độ chính xác của các giá trị dự đoán của mô hình bằng cách so sánh hai mảng ( test_labels so với preds ). Ta sẽ sử dụng hàm sklearn accuracy_score() để xác định độ chính xác của bộ phân loại học máy của ta .

Hướng dẫn ML
... from sklearn.metrics import accuracy_score   # Evaluate accuracy print(accuracy_score(test_labels, preds)) 

Bạn sẽ thấy các kết quả sau:

Alt Jupyter Notebook với ô Python in độ chính xác của trình phân loại NB của  ta

Như bạn thấy trong kết quả , bộ phân loại NB chính xác 94,15%. Điều này nghĩa là 94,15 phần trăm thời gian mà bộ phân loại có thể đưa ra dự đoán chính xác về việc khối u là ác tính hay lành tính. Những kết quả này cho thấy rằng tập hợp đặc điểm gồm 30 thuộc tính của ta là những chỉ số tốt về loại khối u.

Bạn đã tạo thành công bộ phân loại học máy đầu tiên của bạn . Hãy tổ chức lại mã bằng cách đặt tất cả các câu lệnh import ở đầu Notebook hoặc tập lệnh. Phiên bản cuối cùng của mã sẽ trông như thế này:

Hướng dẫn ML
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB from sklearn.metrics import accuracy_score   # Load dataset data = load_breast_cancer()  # Organize our data label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data']  # Look at our data print(label_names) print('Class label = ', labels[0]) print(feature_names) print(features[0])  # Split our data train, test, train_labels, test_labels = train_test_split(features,                                                           labels,                                                           test_size=0.33,                                                           random_state=42)  # Initialize our classifier gnb = GaussianNB()  # Train our classifier model = gnb.fit(train, train_labels)  # Make predictions preds = gnb.predict(test) print(preds)  # Evaluate accuracy print(accuracy_score(test_labels, preds))  

Đến đây bạn có thể tiếp tục làm việc với mã của bạn để xem liệu bạn có thể làm cho trình phân loại của bạn hoạt động tốt hơn nữa hay không. Bạn có thể thử nghiệm với các tập hợp con tính năng khác nhau hoặc thậm chí thử các thuật toán hoàn toàn khác. Hãy xem trang web của Scikit-learning để biết thêm ý tưởng về máy học.

Kết luận

Trong hướng dẫn này, bạn đã học cách xây dựng bộ phân loại học máy bằng Python. Như vậy, bạn có thể tải dữ liệu, sắp xếp dữ liệu, huấn luyện, dự đoán và đánh giá các bộ phân loại học máy bằng Python bằng Scikit-learning. Các bước trong hướng dẫn này sẽ giúp bạn tạo điều kiện thuận lợi cho quá trình làm việc với dữ liệu của bạn bằng Python.


Tags:

Các tin liên quan

Cách thiết lập sổ tay Jupyter cho Python 3
2019-03-21
Cách viết chương trình Python 3 đầu tiên của bạn
2019-02-22
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên Ubuntu 18.04
2019-02-22
Cách thiết lập notebook Jupyter với Python 3 trên Ubuntu 18.04
2018-11-28
Cách thực hiện chuyển kiểu neural với Python 3 và PyTorch
2018-09-13
Cách thực hiện chuyển kiểu neural với Python 3 và PyTorch
2018-09-13
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên Windows 10
2018-09-11
Cách cài đặt Python 3 và thiết lập môi trường lập trình cục bộ trên Windows 10
2018-09-11
Cách thiết lập một sổ ghi chép Jupyter với Python 3 trên Debian 9
2018-09-07
Cách cài đặt phân phối Python Anaconda trên Debian 9
2018-09-06