1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Sử dụng PySpark xây dựng mô hình Logistic Regression, ID3 cho bài toán phân loại khách hàng đăng kí tài khoản tiền gửi có kỳ hạn

38 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Sử dụng PySpark xây dựng mô hình Logistic Regression, ID3 cho bài toán phân loại khách hàng đăng kí tài khoản tiền gửi có kỳ hạn
Tác giả Phan Quốc Anh - 60TH5, Nguyễn Hữu Hợp - 60TH5, Vương Anh Tuấn - 60TH5, Cấn Thị Thu Thảo - 60TH3
Người hướng dẫn TS. Nguyễn Quang Chiểu, ThS. Nguyễn Đắc Hiếu
Trường học Trường Đại Học Thủy Lợi
Thể loại báo cáo bài tập lớn
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 38
Dung lượng 1,03 MB

Cấu trúc

  • CHƯƠNG 1 GIỚI THIỆU (8)
    • 1.1 Mục tiêu nghiên cứu (9)
    • 1.2 Phương pháp nghiên cứu (10)
  • CHƯƠNG 2 CƠ SỞ LÝ THUYẾT (11)
    • 2.1 Giới thiệu về HDFS (11)
    • 2.2 Giới thiệu về Hadoop và MapReduce (14)
    • 2.3 Apache Spark (16)
      • 2.3.1 giới thiệu về Apache Spark (17)
      • 2.3.2 Các thành phần của Apache Spark (17)
      • 2.3.3 Những điểm nổi bật của Spark (19)
      • 2.3.4 So sánh giữa Spark và Hadoop MapReduce (19)
    • 2.4 Thuật toán ID3 (21)
      • 2.4.1 Giới thiệu thuật toán ID3 (21)
      • 2.4.2 Thuật toán phân lớp ID3 (0)
      • 2.4.3 Lưu đồ thuật toán ID3 (22)
    • 2.5 Thuật toán LR (23)
      • 2.5.1 Giới thiệu thuật toán LR (23)
      • 2.5.2 Thuật toán phân lớp LR (0)
      • 2.5.3 Lưu đồ thuật toán LR (24)
  • CHƯƠNG 3 TRIỂN KHAI THỰC NGHIỆM (25)
    • 3.1 Về bộ dữ liệu (25)
    • 3.2 Tiền xử lý dữ liệu bằng PySpark (26)
    • 3.3 Huấn luyện mô hình (31)
      • 3.3.2 LR (35)
    • 3.4 Đánh giá kết quả (36)
      • 3.4.1 ID3 (36)
      • 3.4.2 LR (36)
  • CHƯƠNG 4 KẾT LUẬN (37)
  • TÀI LIỆU THAM KHẢO (38)

Nội dung

Vì thế chúng em mong nhận được sự góp ý của hai thầy, vậy nênchúng em đã quyết định làm đề tài “ Sử dụng PySpark xây dựng mô hình LogisticRegression, ID3 cho bài toán phân loại khách hàn

GIỚI THIỆU

Mục tiêu nghiên cứu

Mục tiêu nghiên cứu của đề tài này là áp dụng các thuật toán ID3 và Logistic Regression trong thư viện PySpark để phân loại khách hàng đăng ký tài khoản tiền gửi có kỳ hạn.

 Tìm hiểu cách các thuật toán học máy áp dụng như thế nào trong những hệ thống phân tán.

Tiến hành thực nghiệm và chạy bộ dữ liệu thực tế trên các thuật toán đã chọn nhằm so sánh và rút ra kết luận về hiệu suất của các mô hình khi áp dụng với những tham số khác nhau.

 Rút ra kết luận về đề tài nghiên cứu, đưa ra định hướng trong tương lai.

Phương pháp nghiên cứu

Áp dụng kiến thức từ môn Big Data để nghiên cứu các thuật toán và cách triển khai chúng trên các hệ thống như HDFS và PySpark.

 Nghiên cứu từ những nguồn thông tin hữu ích trên nền tảng mạng để triển khai phần code thực nghiệm.

 Thực nghiệm và so sánh giữa những khía cạnh khác nhau của các công cụ là phương thức chính trong bài nghiên cứu này.

CƠ SỞ LÝ THUYẾT

Giới thiệu về HDFS

HDFS (Hadoop Distributed File System) là một hệ thống tập tin phân tán, cung cấp nền tảng lưu trữ hiệu quả cho khối lượng dữ liệu lớn với chi phí thấp Nhiều cụm Hadoop hiện đang hoạt động và sử dụng HDFS để quản lý dữ liệu.

 Các công ty khác nhưng Facebook, Adobe, Amazon cũng đã xây dựng các cluster chạy HDFS với dung lượng hàng trăm, hàng nghìn TB.

Về tổng quan thiết kế của HDFS:

HDFS, giống như các hệ thống file khác, duy trì cấu trúc cây phân cấp cho các file và thư mục, trong đó các file được xem như là các node lá.

Mỗi file được chia ra làm một hay nhiều block và mỗi block có một block ID để nhận diện.

Mỗi block của file được lưu trữ thành nhiều bản sao khác nhau vì mục đích an toàn dữ liệu.

Mỗi cluster có một NameNode và một/chiều DataNode

NameNode là thành phần chính trong hệ thống file, có nhiệm vụ quản lý thông tin về cấu trúc cây phân cấp của các file và thư mục, cùng với các siêu dữ liệu (metadata) khác của hệ thống.

Hình 2.1 Hình ảnh HDFS Architecture

Metadata mà Namenode lưu trữ gồm có:

File System Namespace là cấu trúc cây thư mục của hệ thống file tại một thời điểm nhất định, phản ánh toàn bộ các file và thư mục có trong hệ thống, cùng với mối quan hệ giữa chúng.

Để ánh xạ từ tên file sang danh sách các block, chúng ta cần có một danh sách sắp xếp các block, mỗi block được đại diện bởi một block ID tương ứng với file đó.

 Thông tin nơi lưu trữ các block: Mỗi block ta có một danh sách các Datanode lưu trữ các bản sao của block đó.

 Chịu trách nhiệm lưu trữ các block thật sự của từng file của hệ thống file phân tán lên hệ thống file cục bộ của Datanode

 Mỗi 1 block được lưu trữ như là 1 file riêng biệt trên hệ thống file cục bộ củaDatanode

Hình 2.2 Hình ảnh tương tác của client với NameNode và DataNode

Khi client của hệ thống muốn đọc 1 file trên hệ thống HDFS:

The client will send a request to the Namenode to retrieve the metadata of the file to be read, allowing it to identify the list of blocks that make up the file and the locations of the Datanodes that store the replicas of each block.

Khách hàng kết nối trực tiếp với các Datanode để thực hiện các yêu cầu đọc dữ liệu từ các block Định kỳ, mỗi Datanode báo cáo cho Namenode danh sách tất cả các block mà nó đang lưu trữ Namenode sử dụng thông tin này để cập nhật Metadata của nó, đảm bảo rằng Metadata đạt được trạng thái thống nhất với dữ liệu trên các Datanode Metadata ở trạng thái thống nhất được sử dụng để sao lưu và phục hồi Namenode trong trường hợp xảy ra lỗi.

Khả năng chịu lỗi của HDFS: NameNode và Datanode đều được thiết kết để có thể phục hồi nhanh chóng.

NameNode và Datanode liên lạc thông qua HeartBeat

HeartBeat là tín hiệu do Datanode gửi đến Namenode định kỳ để xác nhận sự tồn tại của nó, cho thấy rằng Datanode vẫn đang hoạt động.

 Nếu sau khoảng thời gian nhất định, Namenode không nhận được bất kỳ phản hồi nào từ Datanode thì Datanode đã ngưng hoạt động

Trường hợp Namenode ngừng hoạt động

 Chỉ cần phục hồi lại Namenode mà không cần phải restart tất cả các Datanode

Sau khi phục hồi, Namenode sẽ tự động thiết lập lại kết nối với các Datanode, qua đó hệ thống sẽ được phục hồi Thực tế, nhiệm vụ của Namenode trong quá trình này chỉ là đứng yên và lắng nghe các tín hiệu HeartBeat từ các Datanode.

Nếu một Datanode bất kỳ bị ngưng hoạt động

 Chỉ cần khởi động lại DataNode này

 Datanode sẽ tự động liên lạc với Namenode thông qua các HeartBeat để cập nhật lại tình trạng của mình trên Namenode.

Nhân bản metadata trên Namenode với SecondaryNameNode:

 SecondaryNameNode là một node duy nhất trên Hadoop cluster Nhiệm vụ của SecondaryNameNode là lưu trữ lại checkpoint mới nhất trên NameNode.

 Khi NameNode gặp sự cố, checkpoint mới nhất này được import vào NameNode

=> NameNode trở lại hoạt động bình thường như thời điểm SecondaryNameNode tạo checkpoint.

Giới thiệu về Hadoop và MapReduce

MapReduce là mô hình độc quyền của Google, cho phép lập trình xử lý các tập dữ liệu lớn một cách song song và phân tán trên một cụm máy tính Mô hình này đã trở thành một trong những thuật ngữ phổ biến trong lĩnh vực xử lý dữ liệu gần đây.

Hình 2.3 Hình ảnh kiến trúc MapReduce

MapReduce bao gồm hai thủ tục chính: Map() và Reduce() Thủ tục Map() thực hiện việc lọc và phân loại dữ liệu, trong khi thủ tục Reduce() tổng hợp dữ liệu Mô hình này dựa trên các khái niệm đối lập của bản đồ và giảm thiểu, áp dụng các chức năng lập trình theo hướng chức năng.

Các hàm chính của MapReduce:

MapReduce bao gồm hai hàm chính là Map() và Reduce(), được định nghĩa bởi người dùng Hai hàm này đại diện cho hai giai đoạn liên tiếp trong quy trình xử lý dữ liệu của MapReduce Mỗi hàm có nhiệm vụ cụ thể trong việc xử lý và tổng hợp dữ liệu hiệu quả.

Hàm Map() nhận đầu vào các cặp giá trị/khóa và trả về tập hợp các cặp giá trị/khóa trung gian Sau đó, kết quả này được ghi xuống đĩa cứng và thông báo cho các hàm Reduce() để tiếp nhận dữ liệu trực tiếp.

Hàm Reduce() nhận các khóa trung gian cùng với giá trị tương ứng, sau đó kết hợp chúng để tạo ra một tập hợp khóa mới Các cặp khóa/giá trị này thường được truyền qua một con trỏ vị trí vào các hàm reduce.

Giữa hai bước Map và Reduce trong quy trình xử lý dữ liệu, có một bước quan trọng gọi là Shuffle Sau khi hoàn thành công việc của mình, bước Shuffle sẽ thu thập và tổng hợp các từ khóa cùng giá trị trung gian được tạo ra bởi Map, sau đó chuyển giao cho Reduce để tiếp tục xử lý.

Hình 2.4 Hình ảnh kiến trúc của MapReduce

Các ưu điểm nổi bật của MapReduce

Mapreduce được ưa chuộng sử dụng như vậy bởi nó sở hữu nhiều ưu điểm vượt trội như sau:

 MapReduce có khả năng xử lý dễ dàng mọi bài toán có lượng dữ liệu lớn nhờ khả năng tác vụ phân tích và tính toán phức tạp

 Với khả năng hoạt động độc lập kết hợp phân tán, xử lý các lỗi kỹ thuật để mang lại nhiều hiệu quả cho toàn hệ thống

 MapReduce có khả năng thực hiện trên nhiều nguồn ngôn ngữ lập trình khác nhau như: Java , C/ C++ , Python, tương ứng với nó là những thư viện hỗ trợ.

Apache Spark

Hadoop nổi bật với mô hình lập trình song song MapReduce, cho phép xử lý dữ liệu lớn với khả năng mở rộng, linh hoạt, chịu lỗi và chi phí thấp Tuy nhiên, để khắc phục những hạn chế này, Apache Spark đã ra đời, mang lại hiệu suất vượt trội, nhanh hơn 10 lần so với Hadoop khi sử dụng ổ cứng và 100 lần khi chạy trên bộ nhớ RAM.

2.3.1 giới thiệu về Apache Spark

Hình 2.5 Thời gian ra đời của tool Big Data

Tốc độ xử lý của Spark đạt được nhờ khả năng tính toán song song trên nhiều máy khác nhau, cùng với việc thực hiện các phép toán trong bộ nhớ (in-memory) hoặc hoàn toàn trên RAM.

Spark cho phép xử lý dữ liệu theo thời gian thực, cho phép nhận dữ liệu từ nhiều nguồn khác nhau và thực hiện xử lý ngay lập tức trên dữ liệu vừa được nhận thông qua Spark Streaming.

Spark không sở hữu hệ thống file riêng mà thay vào đó, nó tích hợp với các hệ thống file khác như HDFS, Cassandra và S3 Ngoài ra, Spark hỗ trợ nhiều định dạng file khác nhau như text, csv và json, và hoàn toàn không phụ thuộc vào bất kỳ hệ thống file nào.

2.3.2 Các thành phần của Apache Spark

Hình 2.6 Hình ảnh kiến trúc của Apache Spark

Apache Spark gồm có 5 thành phần chính: Spark Core, Spark Streaming, Spark SQL,

MLlib và GraphX, trong đó:

Spark Core là nền tảng chính cho các thành phần khác trong hệ sinh thái Spark, đảm nhận vai trò quan trọng trong việc thực hiện tính toán và xử lý dữ liệu trong bộ nhớ (In-memory computing) Tất cả các thành phần muốn hoạt động hiệu quả đều phải thông qua Spark Core.

Spark SQL introduces a new data abstraction type called SchemaRDD, which facilitates the handling of both structured and semi-structured data It also supports a domain-specific language (DSL) for performing operations on DataFrames using Scala, Java, or Python.

Spark Streaming cho phép phân tích dữ liệu theo dạng stream bằng cách chia nhỏ stream thành các mini-batches, từ đó áp dụng kỹ thuật RDD transformation cho các dữ liệu này.

GrapX là nền tảng xử lý đồ thị được xây dựng trên công nghệ Spark, cung cấp các API mạnh mẽ cho phép người dùng thực hiện các tính toán trong đồ thị một cách hiệu quả thông qua Pregel API.

2.3.3 Những điểm nổi bật của Spark

 Xử lý dữ liệu: Spark xử lý dữ liệu theo lô và thời gian thực

 Tính tương thích: Có thể tích hợp với tất cả các nguồn dữ liệu và định dạng tệp được hỗ trợ bởi cụm Hadoop.

 Hỗ trợ ngôn ngữ: hỗ trợ Java, Scala, Python và R.

Apache Spark có khả năng phân tích dữ liệu thời gian thực, cho phép xử lý hàng triệu sự kiện mỗi giây từ các luồng sự kiện trực tiếp.

2.3.4 So sánh giữa Spark và Hadoop MapReduce

Hình 2.7 Hình ảnh hoạt động của Spark Job vs Hadoop Job

Map Reduce thì nhanh hơn những hệ thống truyền thống nhưng nó không tận dụng tối đa bộ nhớ của các hadoop cluster

Spark có khả năng thực thi xử lý công việc nhanh hơn từ 10 đến 100 lần so với các phương pháp truyền thống, mặc dù có độ trễ cao hơn và không hỗ trợ caching dữ liệu Nó tối ưu hóa hiệu suất bằng cách caching các kết quả vào bộ nhớ RAM của hệ thống phân tán, cho phép lưu trữ dữ liệu trong bộ nhớ RAM Mặc dù MapReduce là một lựa chọn tiết kiệm hơn, Spark lại có giá thành cao hơn nhưng mang lại hiệu quả vượt trội.

Viết xử lí cho Map Reduce rất phức tạp và dài bởi lẽ nó thuần Java

Viết code Spark thì luôn dễ hơn và chúng ta có thể viết với 4 ngôn ngữ

Batch processing Batch /Iteractive /Real Time /Interactive

MapReduce không tích hợp cho những thứ khác như SQL, ML, RT

Spark được tích hợp sẵn cho SQL, ML, RT

Nó xử lí dữ liệu đơn giản Hỗ trợ engine phân tích dữ liệu Vì thế mà được lựa chọn rất nhiều trong ngành khoa học dữ liệu.

Bảng 2.1 So sánh giữa Apache Hadoop và Apache Spark

Từ những ưu điểm trên của Spark mà trong bài nghiên cứu này hầu hết các thuật toán sẽ được sử dụng và tính toán trên spark.

Tập dữ liệu phân tán có khả năng phục hồi (RDD) là một trong những tính năng cốt lõi của Apache Spark, cho phép người dùng xử lý dữ liệu một cách song song trên một cụm máy tính Mỗi ứng dụng Spark bao gồm một chương trình điều khiển, thực hiện các chức năng chính và quản lý các hoạt động phân tán, giúp tối ưu hóa hiệu suất xử lý dữ liệu RDD được thiết kế để phân vùng các phần tử trên các nút trong cụm, đảm bảo tính khả dụng và độ tin cậy trong quá trình xử lý.

Spark duy trì RDD trong bộ nhớ để tối ưu hóa việc sử dụng lại trong các hoạt động song song, đồng thời các RDD cũng tự động phục hồi sau khi xảy ra lỗi nút.

Trong Spark, sự trừu tượng thứ hai là các biến được chia sẻ, cho phép sử dụng trong các hoạt động song song Mặc định, khi chạy một hàm song song, Spark sẽ gửi một bản sao của từng biến cho mỗi tác vụ trên các nút khác nhau Tuy nhiên, đôi khi cần chia sẻ biến giữa các tác vụ hoặc giữa các tác vụ và chương trình điều khiển Spark hỗ trợ hai loại biến được chia sẻ: biến quảng bá, dùng để lưu trữ giá trị trong bộ nhớ trên tất cả các nút, và bộ tích lũy, là những biến chỉ được “thêm vào”, như bộ đếm và tổng.

Hướng dẫn này trình bày các tính năng của các ngôn ngữ hỗ trợ trong Spark Để dễ dàng thực hiện, bạn có thể khởi chạy trình bao tương tác của Spark bằng cách sử dụng lệnh bin/spark-shell cho Scala hoặc bin/pyspark cho Python.

Hình 2.8: Hoạt động của RDD trong Spark

Thuật toán ID3

2.4.1 Giới thiệu thuật toán ID3

ID3 (Iterative Dichotomiser 3) là thuật toán do Ross Quinlan phát minh, được sử dụng để xây dựng cây quyết định từ tập dữ liệu Là tiền thân của C4.5, ID3 thường được áp dụng trong học máy và xử lý ngôn ngữ tự nhiên.

Thuật toán ID3 bắt đầu với tập dữ liệu gốc S và lặp qua các thuộc tính chưa sử dụng để tính toán entropy H(S) hoặc mức tăng thông tin IG(S) Sau đó, nó chọn thuộc tính có entropy nhỏ nhất hoặc mức tăng thông tin lớn nhất Tiếp theo, tập S được phân tách theo thuộc tính đã chọn, tạo ra các tập con dữ liệu Thuật toán tiếp tục lặp lại trên từng tập con, chỉ xem xét các thuộc tính chưa được chọn trước đó.

Trong bài viết này, p đại diện cho phân phối xác suất, trong khi H(p) là hệ số Entropy của phân phối đó Hàm logarit log(pi) được áp dụng cho từng giá trị của phân phối p tại chỉ số i Cuối cùng, ∑ biểu thị tổng của phân phối xác suất p.

Tiếp theo, ta định nghĩa information gain dựa trên thuộc tính

In this context, G(x, S) represents the information gain function of the attribute x, based on the dataset S H(S) denotes the entropy coefficient of the dataset S, while H(x, S) indicates the entropy coefficient of the attribute x within the dataset S.

Trong ID3, tại mỗi node, thuộc tính được chọn được xác định dựa trên:

(2-3) tức thuộc tính khiến cho information gain đạt giá trị lớn nhất.

2.4.3 Lưu đồ thuật toán ID3

Hình 2.9 Lưu đồ thuật toán Decision Tree

Thuật toán LR

2.5.1 Giới thiệu thuật toán LR

Hồi quy logistic, hay còn gọi là hồi quy logit, là phương pháp ước tính các tham số của mô hình logistic, bao gồm các hệ số trong tổ hợp tuyến tính Trong hồi quy logistic nhị phân, biến phụ thuộc duy nhất là nhị phân, được mã hóa bằng biến chỉ số với hai giá trị "0" và "1" Các biến độc lập có thể là biến nhị phân hoặc biến liên tục, cho phép linh hoạt trong việc phân tích dữ liệu.

Logistic Regression là thuật toán phân loại dùng để gán các đối tượng vào các giá trị rời rạc như 0, 1, 2, Ví dụ điển hình bao gồm phân loại email thành công việc, gia đình và spam, cũng như xác định tính an toàn của giao dịch trực tuyến hay phân loại khối u lành tính và ác tính Thuật toán này sử dụng hàm sigmoid logistic để đưa ra các đánh giá xác suất.

(2-4) Trong đó: z là hàm số của mô hình Logistic Regression.

2.5.3 Lưu đồ thuật toán LR

Hình 2.10 Lưu đồ thuật toán Logistic Regression

TRIỂN KHAI THỰC NGHIỆM

Về bộ dữ liệu

Dữ liệu thô được thu thập từ Kaggle liên quan đến các chiến dịch tiếp thị trực tiếp của một ngân hàng tại Bồ Đào Nha Các chiến dịch này chủ yếu dựa vào các cuộc gọi điện thoại, trong đó thường cần nhiều lần liên hệ với cùng một khách hàng để xác định xem sản phẩm tiền gửi có kỳ hạn ngân hàng sẽ được đăng ký hay không.

Dữ liệu khách hàng của ngân hàng:

Trong thị trường lao động hiện nay, công việc được phân loại thành nhiều loại khác nhau, bao gồm quản trị viên, lao động phổ thông (blue-collar), doanh nhân, người giúp việc, quản lý, người nghỉ hưu, tự kinh doanh, dịch vụ, sinh viên, kỹ thuật viên, người thất nghiệp và những người có tình trạng không xác định Mỗi loại công việc mang đến những cơ hội và thách thức riêng, phản ánh sự đa dạng trong nhu cầu và kỹ năng của người lao động.

Tình trạng hôn nhân bao gồm các phân loại như 'đã ly hôn', 'đã kết hôn', 'độc thân' và 'không rõ' Cần lưu ý rằng 'đã ly hôn' không chỉ đơn thuần là đã ly hôn mà còn có thể ám chỉ đến trường hợp góa vợ.

 Education (phân loại: 'basic.4y', 'basic.6y', 'basic.9y', 'high.school', 'illiterate', 'professional.course', 'university.degree', 'chưa biết')

 default: có tín dụng trong tình trạng vỡ nợ? (phân loại: 'không', 'có', 'không xác định')

 house: có cho vay mua nhà không? (phân loại: 'không', 'có', 'không xác định')

 loan: có khoản vay cá nhân? (phân loại: 'không', 'có', 'không xác định')

 contact: kiểu liên lạc liên lạc (phân loại: 'cellular', 'phone')

 month: tháng liên hệ cuối cùng trong năm (phân loại: 'jan', 'feb', 'mar', , 'nov',

 day_of_week: ngày liên hệ cuối cùng trong tuần (phân loại: 'mon', 'tue', 'wed', 'thu', 'fri')

Biến đầu ra (mục tiêu mong muốn):

 y - khách hàng đã đăng ký tiền gửi có kỳ hạn chưa? (nhị phân: 'yes', 'no')

Tiền xử lý dữ liệu bằng PySpark

Môi trường sử dụng: Google Colab / Anaconda Enviroment sử dụng Visual Studio và Terminal để code

Để bắt đầu với PySpark, trước tiên bạn cần tải PySpark nếu chưa có Tiếp theo, hãy khởi tạo SparkSession, lớp chính cho tất cả các chức năng trong Spark Để tạo một SparkSession cơ bản, bạn chỉ cần sử dụng SparkSession.builder Cuối cùng, bạn có thể đọc file dữ liệu CSV bằng cách sử dụng spark.read.csv().

!pip install pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('ml-bank').getOrCreate() df = spark.read.csv('bank.csv', header = True, inferSchema = True) df.printSchema()

In ra xem tập dữ liệu và data type của từng field

Hình 3.1: Tập các trường dữ liệu

Utilize Pandas to load the first five rows of the dataset and review the initial five observations The Pandas DataFrame presents data in a more visually appealing format compared to Spark's DataFrame.show() Use the command `pd.DataFrame(df.take(5), columns=columns)` to achieve this.

Hình 3.2: Top 5 rows trong tập dữ liệu

Mối tương quan giữa các biến độc lập.

Hình 3.3: Biểu đồ tương quan độc lập giữa các trường

Chúng tôi nhận thấy rằng không có các biến số nào có mối tương quan cao, vì vậy sẽ giữ lại tất cả các biến cho mô hình Tuy nhiên, cột ngày và tháng không mang lại giá trị hữu ích, do đó chúng tôi quyết định loại bỏ hai cột này Cuối cùng, chúng tôi chọn các cột: tuổi, nghề nghiệp, tình trạng hôn nhân, trình độ học vấn, khoản vay mặc định, số dư, vay thế chấp, vay, liên hệ, thời gian, chiến dịch, số ngày kể từ lần liên hệ trước, số lần liên hệ trước và kết quả cuối cùng để xây dựng mô hình.

The process begins with indexing each categorical column using StringIndexer, followed by converting the indexed categories into one-hot encoded variables, resulting in binary vectors appended to each row We then reapply StringIndexer to encode our labels for indexing Subsequently, we utilize VectorAssembler to merge all object columns into a single vector column The categorical columns include 'job', 'marital', 'education', 'default', 'housing', 'loan', 'contact', and 'poutcome' For each categorical column, we create a StringIndexer and a OneHotEncoder, adding them to our stages Additionally, we employ StringIndexer for the 'deposit' label The numeric columns involved are 'age', 'balance', 'duration', 'campaign', 'pdays', and 'previous', and we compile the assembler inputs from the one-hot encoded categorical variables and numeric columns to generate the final feature vector.

We utilize a Pipeline to connect multiple Transformers and Estimators, defining our machine learning workflow The stages of the Pipeline are specified as an ordered array We create the Pipeline with the command `pipeline = Pipeline(stages = stages)` and fit it to our data using `pipelineModel = pipeline.fit(df)` Subsequently, we transform the data with `df = pipelineModel.transform(df)`, selecting the relevant columns with `selectedCols = ['label', 'features'] + cols`, and finally, we display the schema of the DataFrame using `df.printSchema()`.

Hình 3.4: Dữ liệu sau khi làm sạch và có trường features và label

Như bạn có thể thấy, bây giờ chúng ta có cột tính năng và cột nhãn.

Tách ngẫu nhiên dữ liệu thành các tập huấn luyện và thử nghiệm. pd.DataFrame(df.take(5), columnscolumns)

Hình 3.5: Hiển thị dữ liệu 5 hàng đầu dưới dạng bảng

Sử dụng trường features và label để train model train, test = df.randomSplit([0.7, 0.3], seed = 2018) print("Training Dataset Count: " + str(train.count())) print("Test Dataset Count: " + str(test.count()))

Huấn luyện mô hình

Dữ liệu để train model

Hình 3.6: Tập dữ liệu train 20 dòng đầu 3.3.1 ID3

Cây quyết định là một công cụ phổ biến trong phân tích dữ liệu nhờ vào khả năng dễ hiểu và dễ xử lý Chúng có thể thực hiện phân loại nhiều lớp mà không cần mở rộng đối tượng, đồng thời nắm bắt được các tương tác giữa các đối tượng và tính phi tuyến tính.

Cây quyết định (Decision Tree) là một cấu trúc dạng cây, trong đó mỗi nút biểu thị một thuộc tính, các nhánh thể hiện các giá trị khả dĩ của thuộc tính, và các lá đại diện cho các lớp quyết định Đỉnh trên cùng của cây được gọi là gốc.

Cây quyết định là một mô hình dự báo trong học máy, chuyển đổi các quan sát thành kết luận về giá trị mục tiêu Mỗi nút trong cây tương ứng với một biến, và các đường nối thể hiện giá trị cụ thể của biến đó Nút lá đại diện cho giá trị dự đoán của biến mục tiêu dựa trên các giá trị của các biến khác Kỹ thuật học máy này, gọi là học bằng cây quyết định, đã trở thành một công cụ mạnh mẽ và phổ biến trong nhiều lĩnh vực, đặc biệt trong phân lớp dữ liệu Các mô hình như mạng nơ-ron, mô hình thống kê tuyến tính bậc 2 và mô hình di truyền cũng được đề xuất, nhưng cây quyết định nổi bật nhờ tính hiệu quả và khả năng ứng dụng rộng rãi.

Có rất nhiều giải thuật đã được cài đặt sẵn như: CART (Breiman), C4.5 (Quinlan), ID3…

MLlib 1.2 bổ sung một số tính năng để mở rộng quy mô lên các cây lớn hơn (sâu hơn) và quần thể cây Khi maxDepthđược đặt thành lớn, có thể hữu ích khi bật bộ nhớ đệm ID nút và điểm kiểm tra

Việc xây dựng cây đệ quy bị dừng tại một nút khi một trong các điều kiện sau được đáp ứng:

 Độ sâu của nút bằng maxDepththam số huấn luyện.

 Không có ứng cử viên phân tách nào dẫn đến thu được thông tin lớn hơn minInfoGain.

 Không có ứng cử viên phân tách nào tạo ra các nút con mà mỗi nút có ít nhất minInstancesPerNodecác trường hợp đào tạo.

Các tham số này xác định thời điểm cây ngừng xây dựng và thêm các nút mới Khi điều chỉnh, cần cẩn thận xác nhận trên dữ liệu thử nghiệm bị giữ lại để tránh tình trạng trang bị quá nhiều.

maxDepth là độ sâu tối đa của cây, với cây sâu hơn mang lại biểu cảm tốt hơn và khả năng chính xác cao hơn Tuy nhiên, việc đào tạo những cây này tốn kém hơn và dễ bị quá tải.

Để một nút trong mô hình RandomForest có thể được chia nhỏ hơn, mỗi nút con cần nhận được ít nhất một số lần huấn luyện nhất định, được gọi là minInstancesPerNode Quy tắc này thường áp dụng cho RandomForest vì các mô hình này thường được đào tạo sâu hơn so với các cây quyết định riêng lẻ.

 minInfoGain: Để một nút có thể được chia nhỏ hơn nữa, sự phân tách ít nhất phải cải thiện nhiều điều này (về mặt thu được thông tin).

Khi sử dụng tính năng lưu vào bộ nhớ đệm và kiểm tra useNodeIdCache, nếu được thiết lập là true, thuật toán sẽ ngăn việc chuyển đổi mô hình hiện tại (cây hoặc các cây) cho người thực thi trong mỗi lần lặp.

Việc áp dụng công nghệ này có thể mang lại lợi ích cho cây sâu, giúp tăng tốc độ tính toán đối với nhân công, đồng thời cũng hỗ trợ Rừng ngẫu nhiên lớn bằng cách giảm thiểu giao tiếp trong mỗi lần lặp lại.

Theo mặc định, thuật toán giao tiếp giữa mô hình hiện tại và những người thực thi, cho phép họ khớp các phiên bản huấn luyện với các nút cây Khi cài đặt này được bật, thuật toán sẽ lưu trữ thông tin này vào bộ nhớ cache.

Bộ nhớ đệm ID nút tạo ra một chuỗi RDD cho mỗi lần lặp, có thể gây ra vấn đề về hiệu suất Tuy nhiên, việc kiểm tra các RDD trung gian có thể giúp giảm thiểu những vấn đề này Lưu ý rằng điểm kiểm tra chỉ có hiệu lực khi useNodeIdCache được thiết lập là true.

The `checkpointDir` is the directory used to check the cached RDD ID of the node, while `checkpointInterval` defines the frequency of this check Setting the interval too low can incur additional costs due to frequent writes to HDFS, whereas a high setting may lead to failures if the executor crashes and the RDD needs to be recalculated To make predictions on the test dataset, you can utilize the `DecisionTreeClassifier` from `pyspark.ml.classification`, applying the model with `predictions = dtModel.transform(test)` and displaying the results with `predictions.select('age', 'job', 'label', 'rawPrediction', 'prediction', 'probability').show(10)`.

Hình 3.7: Dữ liệu được dự đoán bằng mô hình ID3 3.3.2 LR

Hình 3.8: Tính toán phân tán mô hình LR

To train a logistic regression model, use the command `lr = LogisticRegression(featuresCol = 'features', labelCol = 'label', maxIter)` Once the model is trained, make predictions on the test dataset with `predictions = lrModel.transform(test)` Finally, display the results by selecting relevant columns such as 'age', 'job', 'label', 'rawPrediction', 'prediction', and 'probability' using `predictions.select( ).show(10)`.

Hình 3.9: Dữ liệu được dự đoán bằng mô hình Logistic Regression

Đánh giá kết quả

Evaluate our Decision Tree model evaluator = BinaryClassificationEvaluator() print("Test Area Under ROC: " + str(evaluator.evaluate(predictions, {evalu ator.metricName: "areaUnderROC"})))

Evaluate our Logistic Regression model.

Ngày đăng: 04/12/2024, 17:07

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w