Hồi quy logistic bằng Python - Hướng dẫn nhanh
Logistic Regression là một phương pháp thống kê phân loại các đối tượng. Chương này sẽ giới thiệu về hồi quy logistic với sự trợ giúp của một số ví dụ.
Phân loại
Để hiểu hồi quy logistic, bạn nên biết phân loại nghĩa là gì. Chúng ta hãy xem xét các ví dụ sau để hiểu rõ hơn về điều này -
- Một bác sĩ phân loại khối u là ác tính hoặc lành tính.
- Giao dịch ngân hàng có thể là gian lận hoặc giả mạo.
Trong nhiều năm, con người đã thực hiện những công việc như vậy - mặc dù chúng dễ xảy ra lỗi. Câu hỏi đặt ra là chúng ta có thể huấn luyện máy móc làm những công việc này cho chúng ta với độ chính xác tốt hơn không?
Một ví dụ về máy thực hiện phân loại là email Clienttrên máy của bạn phân loại mọi thư đến là "thư rác" hoặc "không phải thư rác" và nó thực hiện điều đó với độ chính xác khá lớn. Kỹ thuật thống kê hồi quy logistic đã được áp dụng thành công trong ứng dụng email. Trong trường hợp này, chúng tôi đã huấn luyện máy của mình giải quyết vấn đề phân loại.
Hồi quy logistic chỉ là một phần của máy học được sử dụng để giải quyết loại vấn đề phân loại nhị phân này. Có một số kỹ thuật học máy khác đã được phát triển và đang trong thực tế để giải quyết các loại vấn đề khác.
Nếu bạn đã lưu ý, trong tất cả các ví dụ trên, kết quả của phép dự đoán chỉ có hai giá trị - Có hoặc Không. Chúng tôi gọi chúng là các lớp - để nói rằng chúng tôi nói rằng trình phân loại của chúng tôi phân loại các đối tượng trong hai lớp. Về mặt kỹ thuật, chúng ta có thể nói rằng biến kết quả hoặc biến mục tiêu có bản chất là lưỡng phân.
Có những vấn đề phân loại khác trong đó đầu ra có thể được phân loại thành nhiều hơn hai lớp. Ví dụ, được đưa cho một giỏ đầy trái cây, bạn được yêu cầu tách các loại trái cây khác nhau. Bây giờ, giỏ có thể chứa Cam, Táo, Xoài, v.v. Vì vậy, khi bạn tách các quả ra, bạn tách chúng ra thành nhiều hơn hai lớp. Đây là một bài toán phân loại đa biến.
Hãy xem xét rằng một ngân hàng tiếp cận bạn để phát triển một ứng dụng học máy sẽ giúp họ xác định những khách hàng tiềm năng sẽ mở một Khoản tiền gửi có kỳ hạn (còn được gọi là Tiền gửi cố định của một số ngân hàng) với họ. Ngân hàng thường xuyên thực hiện một cuộc khảo sát bằng cách gọi điện thoại hoặc biểu mẫu web để thu thập thông tin về khách hàng tiềm năng. Cuộc khảo sát này mang tính chất chung và được thực hiện trên một đối tượng rất lớn, trong đó có nhiều người có thể không quan tâm đến việc giao dịch với chính ngân hàng này. Trong số những người còn lại, chỉ một số ít quan tâm đến việc mở Tiền gửi có kỳ hạn. Những người khác có thể quan tâm đến các tiện ích khác do ngân hàng cung cấp. Vì vậy, cuộc khảo sát không nhất thiết phải được thực hiện để xác định khách hàng mở TDs. Nhiệm vụ của bạn là xác định tất cả những khách hàng có khả năng mở TD cao từ dữ liệu khảo sát khổng lồ mà ngân hàng sẽ chia sẻ với bạn.
May mắn thay, một loại dữ liệu như vậy được công bố rộng rãi cho những người có nguyện vọng phát triển mô hình học máy. Dữ liệu này được chuẩn bị bởi một số sinh viên tại UC Irvine với sự tài trợ bên ngoài. Cơ sở dữ liệu có sẵn như một phần củaUCI Machine Learning Repositoryvà được sử dụng rộng rãi bởi sinh viên, nhà giáo dục và nhà nghiên cứu trên toàn thế giới. Dữ liệu có thể được tải xuống từ đây .
Trong các chương tiếp theo, bây giờ chúng ta hãy thực hiện phát triển ứng dụng bằng cách sử dụng cùng một dữ liệu.
Trong chương này, chúng ta sẽ hiểu chi tiết về quy trình liên quan đến việc thiết lập một dự án để thực hiện hồi quy logistic trong Python.
Cài đặt Jupyter
Chúng tôi sẽ sử dụng Jupyter - một trong những nền tảng được sử dụng rộng rãi nhất để học máy. Nếu bạn chưa cài đặt Jupyter trên máy của mình, hãy tải xuống từ đây . Để cài đặt, bạn có thể làm theo hướng dẫn trên trang web của họ để cài đặt nền tảng. Như trang web gợi ý, bạn có thể thích sử dụngAnaconda Distributionđi kèm với Python và nhiều gói Python thường được sử dụng cho tính toán khoa học và khoa học dữ liệu. Điều này sẽ làm giảm nhu cầu cài đặt các gói này riêng lẻ.
Sau khi cài đặt thành công Jupyter, hãy bắt đầu một dự án mới, màn hình của bạn ở giai đoạn này sẽ giống như sau sẵn sàng chấp nhận mã của bạn.
Bây giờ, hãy thay đổi tên của dự án từ Untitled1 to “Logistic Regression” bằng cách nhấp vào tên tiêu đề và chỉnh sửa nó.
Đầu tiên, chúng tôi sẽ nhập một số gói Python mà chúng tôi sẽ cần trong mã của mình.
Nhập các gói Python
Với mục đích này, hãy nhập hoặc cắt và dán đoạn mã sau vào trình chỉnh sửa mã -
In [1]: # import statements
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import preprocessing
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
Của bạn Notebook sẽ trông giống như sau ở giai đoạn này:
Chạy mã bằng cách nhấp vào Runcái nút. Nếu không có lỗi nào được tạo ra, bạn đã cài đặt thành công Jupyter và hiện đã sẵn sàng cho phần còn lại của quá trình phát triển.
Ba câu lệnh nhập đầu tiên nhập các gói gấu trúc, numpy và matplotlib.pyplot trong dự án của chúng tôi. Ba câu lệnh tiếp theo nhập các mô-đun được chỉ định từ sklearn.
Nhiệm vụ tiếp theo của chúng tôi là tải xuống dữ liệu cần thiết cho dự án của chúng tôi. Chúng ta sẽ tìm hiểu điều này trong chương tiếp theo.
Các bước liên quan đến việc lấy dữ liệu để thực hiện hồi quy logistic trong Python được thảo luận chi tiết trong chương này.
Tải xuống tập dữ liệu
Nếu bạn chưa tải xuống bộ dữ liệu UCI được đề cập trước đó, hãy tải xuống ngay từ đây . Bấm vào Thư mục Dữ liệu. Bạn sẽ thấy màn hình sau:
Tải xuống tệp bank.zip bằng cách nhấp vào liên kết đã cho. Tệp zip chứa các tệp sau:
Chúng tôi sẽ sử dụng tệp bank.csv để phát triển mô hình của mình. Tệp bank-names.txt chứa mô tả của cơ sở dữ liệu mà bạn sẽ cần sau này. Bank-full.csv chứa tập dữ liệu lớn hơn nhiều mà bạn có thể sử dụng cho các phát triển nâng cao hơn.
Ở đây chúng tôi đã bao gồm tệp bank.csv trong zip nguồn có thể tải xuống. Tệp này chứa các trường được phân tách bằng dấu phẩy. Chúng tôi cũng đã thực hiện một số sửa đổi trong tệp. Bạn nên sử dụng tệp có trong zip nguồn dự án để phục vụ cho việc học của mình.
Đang tải dữ liệu
Để tải dữ liệu từ tệp csv mà bạn vừa sao chép, hãy nhập câu lệnh sau và chạy mã.
In [2]: df = pd.read_csv('bank.csv', header=0)
Bạn cũng sẽ có thể kiểm tra dữ liệu đã tải bằng cách chạy câu lệnh mã sau:
IN [3]: df.head()
Khi lệnh được chạy, bạn sẽ thấy kết quả sau:
Về cơ bản, nó đã in năm hàng đầu tiên của dữ liệu được tải. Kiểm tra 21 cột hiện có. Chúng tôi sẽ chỉ sử dụng một số cột từ những cột này để phát triển mô hình của chúng tôi.
Tiếp theo, chúng ta cần làm sạch dữ liệu. Dữ liệu có thể chứa một số hàng vớiNaN. Để loại bỏ các hàng như vậy, hãy sử dụng lệnh sau:
IN [4]: df = df.dropna()
May mắn thay, bank.csv không chứa bất kỳ hàng nào có NaN, vì vậy bước này không thực sự bắt buộc trong trường hợp của chúng tôi. Tuy nhiên, nói chung rất khó để phát hiện ra các hàng như vậy trong một cơ sở dữ liệu khổng lồ. Vì vậy, luôn an toàn hơn khi chạy câu lệnh trên để làm sạch dữ liệu.
Note - Bạn có thể dễ dàng kiểm tra kích thước dữ liệu tại bất kỳ thời điểm nào bằng cách sử dụng câu lệnh sau:
IN [5]: print (df.shape)
(41188, 21)
Số hàng và cột sẽ được in trong đầu ra như thể hiện ở dòng thứ hai ở trên.
Điều tiếp theo cần làm là kiểm tra sự phù hợp của từng cột đối với mô hình mà chúng ta đang cố gắng xây dựng.
Bất cứ khi nào tổ chức thực hiện một cuộc khảo sát, họ cố gắng thu thập càng nhiều thông tin càng tốt từ khách hàng, với ý tưởng rằng thông tin này sẽ hữu ích cho tổ chức theo cách này hay cách khác, vào thời điểm sau này. Để giải quyết vấn đề hiện tại, chúng tôi phải thu thập thông tin có liên quan trực tiếp đến vấn đề của chúng tôi.
Hiển thị tất cả các trường
Bây giờ, chúng ta hãy xem cách chọn các trường dữ liệu hữu ích cho chúng ta. Chạy câu lệnh sau trong trình soạn thảo mã.
In [6]: print(list(df.columns))
Bạn sẽ thấy kết quả sau:
['age', 'job', 'marital', 'education', 'default', 'housing', 'loan',
'contact', 'month', 'day_of_week', 'duration', 'campaign', 'pdays',
'previous', 'poutcome', 'emp_var_rate', 'cons_price_idx', 'cons_conf_idx',
'euribor3m', 'nr_employed', 'y']
Kết quả hiển thị tên của tất cả các cột trong cơ sở dữ liệu. Cột cuối cùng “y” là một giá trị Boolean cho biết liệu khách hàng này có gửi tiền có kỳ hạn với ngân hàng hay không. Các giá trị của trường này là “y” hoặc “n”. Bạn có thể đọc mô tả và mục đích của từng cột trong tệp bank-name.txt đã được tải xuống như một phần của dữ liệu.
Loại bỏ các trường không mong muốn
Kiểm tra tên cột, bạn sẽ biết rằng một số trường không có ý nghĩa gì đối với vấn đề hiện tại. Ví dụ, các trường nhưmonth, day_of_week, chiến dịch, v.v. không có ích gì cho chúng tôi. Chúng tôi sẽ loại bỏ các trường này khỏi cơ sở dữ liệu của chúng tôi. Để thả một cột, chúng ta sử dụng lệnh drop như hình dưới đây:
In [8]: #drop columns which are not needed.
df.drop(df.columns[[0, 3, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19]],
axis = 1, inplace = True)
Lệnh nói rằng thả số cột 0, 3, 7, 8, v.v. Để đảm bảo rằng chỉ mục được chọn đúng, hãy sử dụng câu lệnh sau:
In [7]: df.columns[9]
Out[7]: 'day_of_week'
Điều này sẽ in tên cột cho chỉ mục đã cho.
Sau khi loại bỏ các cột không bắt buộc, hãy kiểm tra dữ liệu bằng câu lệnh head. Kết quả màn hình được hiển thị ở đây -
In [9]: df.head()
Out[9]:
job marital default housing loan poutcome y
0 blue-collar married unknown yes no nonexistent 0
1 technician married no no no nonexistent 0
2 management single no yes no success 1
3 services married no no no nonexistent 0
4 retired married no yes no success 1
Giờ đây, chúng tôi chỉ có những trường mà chúng tôi cảm thấy quan trọng đối với việc phân tích và dự đoán dữ liệu của chúng tôi. Tầm quan trọng củaData Scientistđi vào hình ảnh ở bước này. Nhà khoa học dữ liệu phải chọn các cột thích hợp để xây dựng mô hình.
Ví dụ, loại jobMặc dù thoạt nhìn có thể không thuyết phục được mọi người đưa vào cơ sở dữ liệu, nhưng nó sẽ là một trường rất hữu ích. Không phải tất cả các loại khách hàng sẽ mở TD. Những người có thu nhập thấp hơn có thể không mở TDs, trong khi những người có thu nhập cao hơn thường sẽ gửi tiền thừa của họ vào TDs. Vì vậy, loại công việc trở nên phù hợp đáng kể trong kịch bản này. Tương tự như vậy, hãy chọn cẩn thận các cột mà bạn cảm thấy có liên quan cho phân tích của mình.
Trong chương tiếp theo, chúng ta sẽ chuẩn bị dữ liệu để xây dựng mô hình.
Để tạo bộ phân loại, chúng ta phải chuẩn bị dữ liệu ở định dạng được yêu cầu bởi mô-đun xây dựng bộ phân loại. Chúng tôi chuẩn bị dữ liệu bằng cáchOne Hot Encoding.
Mã hóa dữ liệu
Chúng ta sẽ thảo luận ngay về ý nghĩa của việc mã hóa dữ liệu. Đầu tiên, hãy để chúng tôi chạy mã. Chạy lệnh sau trong cửa sổ mã.
In [10]: # creating one hot encoding of the categorical columns.
data = pd.get_dummies(df, columns =['job', 'marital', 'default', 'housing', 'loan', 'poutcome'])
Như nhận xét cho biết, câu lệnh trên sẽ tạo một mã hóa dữ liệu nóng nhất. Hãy để chúng tôi xem nó đã tạo ra những gì? Kiểm tra dữ liệu đã tạo được gọi là“data” bằng cách in các bản ghi đầu trong cơ sở dữ liệu.
In [11]: data.head()
Bạn sẽ thấy kết quả sau:
Để hiểu dữ liệu trên, chúng tôi sẽ liệt kê các tên cột bằng cách chạy data.columns lệnh như hình dưới đây -
In [12]: data.columns
Out[12]: Index(['y', 'job_admin.', 'job_blue-collar', 'job_entrepreneur',
'job_housemaid', 'job_management', 'job_retired', 'job_self-employed',
'job_services', 'job_student', 'job_technician', 'job_unemployed',
'job_unknown', 'marital_divorced', 'marital_married', 'marital_single',
'marital_unknown', 'default_no', 'default_unknown', 'default_yes',
'housing_no', 'housing_unknown', 'housing_yes', 'loan_no',
'loan_unknown', 'loan_yes', 'poutcome_failure', 'poutcome_nonexistent',
'poutcome_success'], dtype='object')
Bây giờ, chúng tôi sẽ giải thích cách một mã hóa nóng được thực hiện bởi get_dummieschỉ huy. Cột đầu tiên trong cơ sở dữ liệu mới được tạo là trường “y” cho biết liệu khách hàng này đã đăng ký TD hay chưa. Bây giờ, chúng ta hãy xem xét các cột được mã hóa. Cột được mã hóa đầu tiên là“job”. Trong cơ sở dữ liệu, bạn sẽ thấy rằng cột “việc làm” có nhiều giá trị có thể có như “quản trị viên”, “cổ xanh”, “doanh nhân”, v.v. Đối với mỗi giá trị có thể, chúng tôi có một cột mới được tạo trong cơ sở dữ liệu, với tên cột được thêm vào dưới dạng tiền tố.
Do đó, chúng ta có các cột được gọi là “job_admin”, “job_blue-Neck”, v.v. Đối với mỗi trường được mã hóa trong cơ sở dữ liệu gốc của chúng tôi, bạn sẽ tìm thấy danh sách các cột được thêm vào cơ sở dữ liệu đã tạo với tất cả các giá trị có thể có mà cột đó nhận trong cơ sở dữ liệu gốc. Kiểm tra cẩn thận danh sách các cột để hiểu cách dữ liệu được ánh xạ tới cơ sở dữ liệu mới.
Hiểu về ánh xạ dữ liệu
Để hiểu dữ liệu được tạo, chúng ta hãy in ra toàn bộ dữ liệu bằng lệnh data. Kết quả một phần sau khi chạy lệnh được hiển thị bên dưới.
In [13]: data
Màn hình trên hiển thị mười hai hàng đầu tiên. Nếu bạn cuộn xuống thêm, bạn sẽ thấy rằng ánh xạ được thực hiện cho tất cả các hàng.
Một phần màn hình xuất ra bên dưới cơ sở dữ liệu được hiển thị ở đây để bạn tham khảo nhanh.
Để hiểu dữ liệu được ánh xạ, chúng ta hãy kiểm tra hàng đầu tiên.
Nó nói rằng khách hàng này chưa đăng ký TD như được chỉ ra bởi giá trị trong trường "y". Nó cũng chỉ ra rằng khách hàng này là khách hàng "cổ xanh". Cuộn xuống theo chiều ngang, nó sẽ cho bạn biết rằng anh ta có "nhà ở" và không có "khoản vay" nào.
Sau một lần mã hóa nóng này, chúng tôi cần xử lý thêm một số dữ liệu trước khi có thể bắt đầu xây dựng mô hình của mình.
Bỏ thông tin "không xác định"
Nếu chúng tôi kiểm tra các cột trong cơ sở dữ liệu được ánh xạ, bạn sẽ thấy sự hiện diện của một số cột kết thúc bằng "không xác định". Ví dụ: kiểm tra cột ở chỉ mục 12 bằng lệnh sau được hiển thị trong ảnh chụp màn hình:
In [14]: data.columns[12]
Out[14]: 'job_unknown'
Điều này cho thấy công việc cho khách hàng được chỉ định là không xác định. Rõ ràng, không có ích gì khi đưa các cột như vậy vào phân tích và xây dựng mô hình của chúng tôi. Do đó, tất cả các cột có giá trị "không xác định" sẽ bị loại bỏ. Điều này được thực hiện với lệnh sau:
In [15]: data.drop(data.columns[[12, 16, 18, 21, 24]], axis=1, inplace=True)
Đảm bảo rằng bạn chỉ định số cột chính xác. Trong trường hợp nghi ngờ, bạn có thể kiểm tra tên cột bất cứ lúc nào bằng cách chỉ định chỉ mục của nó trong lệnh cột như được mô tả trước đó.
Sau khi loại bỏ các cột không mong muốn, bạn có thể kiểm tra danh sách cuối cùng của các cột như được hiển thị trong kết quả bên dưới:
In [16]: data.columns
Out[16]: Index(['y', 'job_admin.', 'job_blue-collar', 'job_entrepreneur',
'job_housemaid', 'job_management', 'job_retired', 'job_self-employed',
'job_services', 'job_student', 'job_technician', 'job_unemployed',
'marital_divorced', 'marital_married', 'marital_single', 'default_no',
'default_yes', 'housing_no', 'housing_yes', 'loan_no', 'loan_yes',
'poutcome_failure', 'poutcome_nonexistent', 'poutcome_success'],
dtype='object')
Tại thời điểm này, dữ liệu của chúng tôi đã sẵn sàng để xây dựng mô hình.
Chúng tôi có khoảng bốn mươi mốt bản ghi lẻ. Nếu chúng tôi sử dụng toàn bộ dữ liệu để xây dựng mô hình, chúng tôi sẽ không còn lại bất kỳ dữ liệu nào để thử nghiệm. Vì vậy, nói chung, chúng tôi chia toàn bộ tập dữ liệu thành hai phần, giả sử 70/30 phần trăm. Chúng tôi sử dụng 70% dữ liệu để xây dựng mô hình và phần còn lại để kiểm tra độ chính xác trong dự đoán của mô hình đã tạo của chúng tôi. Bạn có thể sử dụng một tỷ lệ tách khác theo yêu cầu của bạn.
Tạo mảng tính năng
Trước khi chúng tôi chia dữ liệu, chúng tôi tách dữ liệu thành hai mảng X và Y. Mảng X chứa tất cả các tính năng (cột dữ liệu) mà chúng tôi muốn phân tích và mảng Y là mảng một chiều gồm các giá trị boolean là đầu ra của Dự đoán. Để hiểu điều này, chúng ta hãy chạy một số mã.
Đầu tiên, hãy thực thi câu lệnh Python sau để tạo mảng X:
In [17]: X = data.iloc[:,1:]
Để kiểm tra nội dung của X sử dụng headđể in một vài bản ghi ban đầu. Màn hình sau đây hiển thị nội dung của mảng X.
In [18]: X.head ()
Mảng có một số hàng và 23 cột.
Tiếp theo, chúng tôi sẽ tạo mảng đầu ra chứa “y”.
Tạo mảng đầu ra
Để tạo một mảng cho cột giá trị dự đoán, hãy sử dụng câu lệnh Python sau:
In [19]: Y = data.iloc[:,0]
Kiểm tra nội dung của nó bằng cách gọi head. Màn hình đầu ra bên dưới hiển thị kết quả:
In [20]: Y.head()
Out[20]: 0 0
1 0
2 1
3 0
4 1
Name: y, dtype: int64
Bây giờ, hãy chia nhỏ dữ liệu bằng lệnh sau:
In [21]: X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state=0)
Điều này sẽ tạo ra bốn mảng được gọi là X_train, Y_train, X_test, and Y_test. Như trước đây, bạn có thể kiểm tra nội dung của các mảng này bằng cách sử dụng lệnh head. Chúng tôi sẽ sử dụng các mảng X_train và Y_train để đào tạo mô hình của chúng tôi và các mảng X_test và Y_test để kiểm tra và xác thực.
Bây giờ, chúng tôi đã sẵn sàng xây dựng bộ phân loại của mình. Chúng ta sẽ xem xét nó trong chương tiếp theo.
Không bắt buộc bạn phải xây dựng bộ phân loại từ đầu. Việc xây dựng bộ phân loại rất phức tạp và đòi hỏi kiến thức về một số lĩnh vực như Thống kê, lý thuyết xác suất, kỹ thuật tối ưu hóa, v.v. Có một số thư viện được tạo sẵn trên thị trường có khả năng triển khai các bộ phân loại này đã được kiểm tra đầy đủ và rất hiệu quả. Chúng tôi sẽ sử dụng một mô hình được tạo sẵn như vậy từsklearn.
Bộ phân loại sklearn
Việc tạo bộ phân loại hồi quy Logistic từ bộ công cụ sklearn là không cần thiết và được thực hiện trong một câu lệnh chương trình duy nhất như được hiển thị ở đây -
In [22]: classifier = LogisticRegression(solver='lbfgs',random_state=0)
Khi trình phân loại được tạo, bạn sẽ cung cấp dữ liệu đào tạo của mình vào trình phân loại để nó có thể điều chỉnh các thông số bên trong và sẵn sàng cho các dự đoán về dữ liệu trong tương lai của bạn. Để điều chỉnh trình phân loại, chúng tôi chạy câu lệnh sau:
In [23]: classifier.fit(X_train, Y_train)
Bộ phân loại hiện đã sẵn sàng để thử nghiệm. Đoạn mã sau là kết quả của việc thực thi hai câu lệnh trên:
Out[23]: LogisticRegression(C = 1.0, class_weight = None, dual = False,
fit_intercept=True, intercept_scaling=1, max_iter=100,
multi_class='warn', n_jobs=None, penalty='l2', random_state=0,
solver='lbfgs', tol=0.0001, verbose=0, warm_start=False))
Bây giờ, chúng tôi đã sẵn sàng để kiểm tra trình phân loại đã tạo. Chúng ta sẽ giải quyết vấn đề này trong chương tiếp theo.
Chúng ta cần kiểm tra trình phân loại đã tạo ở trên trước khi đưa vào sử dụng sản xuất. Nếu quá trình kiểm tra cho thấy mô hình không đạt độ chính xác mong muốn, chúng tôi sẽ phải quay lại quá trình trên, chọn một tập hợp các tính năng khác (trường dữ liệu), xây dựng lại mô hình và kiểm tra nó. Đây sẽ là một bước lặp đi lặp lại cho đến khi trình phân loại đáp ứng yêu cầu của bạn về độ chính xác mong muốn. Vì vậy, hãy để chúng tôi kiểm tra trình phân loại của chúng tôi.
Dự đoán dữ liệu thử nghiệm
Để kiểm tra trình phân loại, chúng tôi sử dụng dữ liệu kiểm tra được tạo ở giai đoạn trước. Chúng tôi gọi làpredict phương thức trên đối tượng đã tạo và chuyển X mảng dữ liệu thử nghiệm như được hiển thị trong lệnh sau:
In [24]: predicted_y = classifier.predict(X_test)
Điều này tạo ra một mảng một chiều cho toàn bộ tập dữ liệu huấn luyện đưa ra dự đoán cho mỗi hàng trong mảng X. Bạn có thể kiểm tra mảng này bằng cách sử dụng lệnh sau:
In [25]: predicted_y
Sau đây là kết quả khi thực hiện hai lệnh trên:
Out[25]: array([0, 0, 0, ..., 0, 0, 0])
Kết quả chỉ ra rằng ba khách hàng đầu tiên và cuối cùng không phải là ứng viên tiềm năng cho Term Deposit. Bạn có thể kiểm tra toàn bộ mảng để phân loại khách hàng tiềm năng. Để làm như vậy, hãy sử dụng đoạn mã Python sau:
In [26]: for x in range(len(predicted_y)):
if (predicted_y[x] == 1):
print(x, end="\t")
Kết quả của việc chạy mã trên được hiển thị bên dưới:
Kết quả đầu ra hiển thị chỉ mục của tất cả các hàng là ứng cử viên có thể đăng ký TD. Bây giờ bạn có thể cung cấp kết quả này cho nhóm tiếp thị của ngân hàng, những người sẽ lấy chi tiết liên hệ của từng khách hàng trong hàng đã chọn và tiến hành công việc của họ.
Trước khi đưa mô hình này vào sản xuất, chúng tôi cần xác minh tính chính xác của dự đoán.
Xác minh độ chính xác
Để kiểm tra độ chính xác của mô hình, hãy sử dụng phương pháp cho điểm trên bộ phân loại như hình dưới đây:
In [27]: print('Accuracy: {:.2f}'.format(classifier.score(X_test, Y_test)))
Đầu ra màn hình của việc chạy lệnh này được hiển thị bên dưới:
Accuracy: 0.90
Nó cho thấy độ chính xác của mô hình của chúng tôi là 90%, được coi là rất tốt trong hầu hết các ứng dụng. Do đó, không cần điều chỉnh thêm. Giờ đây, khách hàng của chúng tôi đã sẵn sàng chạy chiến dịch tiếp theo, lấy danh sách khách hàng tiềm năng và theo đuổi họ để mở TD với tỷ lệ thành công cao.
Như bạn đã thấy từ ví dụ trên, áp dụng hồi quy logistic cho học máy không phải là một nhiệm vụ khó khăn. Tuy nhiên, nó đi kèm với những hạn chế của riêng nó. Hồi quy logistic sẽ không thể xử lý một số lượng lớn các tính năng phân loại. Trong ví dụ mà chúng ta đã thảo luận cho đến nay, chúng ta đã giảm số lượng các tính năng xuống mức rất lớn.
Tuy nhiên, nếu các tính năng này quan trọng trong dự đoán của chúng tôi, chúng tôi sẽ buộc phải đưa chúng vào, nhưng sau đó hồi quy logistic sẽ không cung cấp cho chúng tôi độ chính xác tốt. Hồi quy logistic cũng dễ bị trang bị quá mức. Nó không thể được áp dụng cho một bài toán phi tuyến tính. Nó sẽ hoạt động kém với các biến độc lập không tương quan với mục tiêu và tương quan với nhau. Do đó, bạn sẽ phải đánh giá cẩn thận mức độ phù hợp của hồi quy logistic đối với vấn đề mà bạn đang cố gắng giải quyết.
Có rất nhiều lĩnh vực học máy nơi các kỹ thuật khác được chỉ định được phát minh ra. Để kể tên một số, chúng tôi có các thuật toán như k-láng giềng gần nhất (kNN), Hồi quy tuyến tính, Máy vectơ hỗ trợ (SVM), Cây quyết định, Naive Bayes, v.v. Trước khi hoàn thiện một mô hình cụ thể, bạn sẽ phải đánh giá khả năng áp dụng của các kỹ thuật khác nhau này đối với vấn đề mà chúng tôi đang cố gắng giải quyết.
Hồi quy logistic là một kỹ thuật thống kê của phân loại nhị phân. Trong hướng dẫn này, bạn đã học cách huấn luyện máy sử dụng hồi quy logistic. Tạo mô hình học máy, yêu cầu quan trọng nhất là tính sẵn có của dữ liệu. Nếu không có dữ liệu phù hợp và đầy đủ, bạn không thể đơn giản làm cho máy học.
Khi bạn có dữ liệu, nhiệm vụ chính tiếp theo của bạn là làm sạch dữ liệu, loại bỏ các hàng, trường không mong muốn và chọn các trường thích hợp để phát triển mô hình của bạn. Sau khi hoàn thành việc này, bạn cần ánh xạ dữ liệu sang định dạng mà bộ phân loại yêu cầu để đào tạo. Vì vậy, chuẩn bị dữ liệu là một nhiệm vụ chính trong bất kỳ ứng dụng học máy nào. Khi bạn đã sẵn sàng với dữ liệu, bạn có thể chọn một loại phân loại cụ thể.
Trong hướng dẫn này, bạn đã học cách sử dụng bộ phân loại hồi quy logistic được cung cấp trong sklearnthư viện. Để huấn luyện bộ phân loại, chúng tôi sử dụng khoảng 70% dữ liệu để huấn luyện mô hình. Chúng tôi sử dụng phần còn lại của dữ liệu để thử nghiệm. Chúng tôi kiểm tra độ chính xác của mô hình. Nếu điều này không nằm trong giới hạn có thể chấp nhận được, chúng tôi quay lại chọn bộ tính năng mới.
Một lần nữa, hãy theo dõi toàn bộ quá trình chuẩn bị dữ liệu, đào tạo mô hình và kiểm tra nó, cho đến khi bạn hài lòng với độ chính xác của nó. Trước khi thực hiện bất kỳ dự án học máy nào, bạn phải học và tiếp xúc với nhiều loại kỹ thuật đã được phát triển cho đến nay và đã được áp dụng thành công trong ngành.