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

Báo cáo bài tập lớn học phần dữ liệu lớn 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

35 0 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 đề 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
Chuyên ngành Dữ Liệu Lớn
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 35
Dung lượng 0,93 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 (20)
      • 2.4.1 Giới thiệu thuật toán ID3 (20)
      • 2.4.2 Thuật toán phân lớp ID3 (20)
      • 2.4.3 Lưu đồ thuật toán ID3 (21)
    • 2.5 Thuật toán LR (22)
      • 2.5.1 Giới thiệu thuật toán LR (22)
      • 2.5.2 Thuật toán phân lớp LR (22)
      • 2.5.3 Lưu đồ thuật toán LR (23)
  • CHƯƠNG 3 TRIỂN KHAI THỰC NGHIỆM (24)
    • 3.1 Về bộ dữ liệu (24)
    • 3.2 Tiền xử lý dữ liệu bằng PySpark (25)
    • 3.3 Huấn luyện mô hình (29)
      • 3.3.1 ID3 (30)
      • 3.3.2 LR (31)
    • 3.4 Đánh giá kết quả (32)
      • 3.4.1 ID3 (32)
      • 3.4.2 LR (32)
  • CHƯƠNG 4 KẾT LUẬN (33)
  • TÀI LIỆU THAM KHẢO (34)
  • PHỤ LỤC (35)

Nội dung

Những côngnghệ đó là Apache Hadoop, Apache Spark, Apache Kafka, v.v … Dưới đây là thông tintổng quan về các công nghệ này. Apache Hadoop Hadoop là một Apache framework mã nguồn mở được

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 phương pháp 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.

Chúng tôi sẽ thực hiện chạy và thử nghiệm bộ dữ liệu thực tế trên các thuật toán đã chọn, nhằm so sánh và đưa ra kết luận về hiệu suất của các mô hình khi áp dụng với các 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, chúng ta có thể khám phá 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. x

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, được thiết kế để lưu trữ và quản lý 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ới HDFS, cung cấp giải pháp hiệu quả cho việc xử lý dữ liệu quy mô lớn.

 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 duy trì một cấu trúc cây phân cấp cho các file và thư mục, trong đó các file hoạt động như các node lá.

Mỗi file trong hệ thống được phân chia thành một hoặc nhiều block, mỗi block được xác định bằng một block ID duy nhất Để đảm bảo an toàn dữ liệu, mỗi block của file được lưu trữ thành nhiều bản sao khác nhau Hệ thống cũng bao gồm một NameNode cho mỗi cluster và một hoặc nhiều DataNode để quản lý và lưu trữ dữ liệu.

NameNode là thành phần chính trong hệ thống file, có nhiệm vụ quản lý và duy trì thông tin về cấu trúc cây phân cấp của các tệp và thư mục, cũng như các metadata khác liên quan đến hệ thống file.

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 đến danh sách các block, mỗi file sẽ có một danh sách các block được sắp xếp theo thứ tự, với mỗi block được đại diện bởi một block id.

 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ủa Datanode xii

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, which provides the list of blocks of the file and the locations of the Datanodes that store 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 yêu cầu đọc dữ liệu từ các block định kỳ Mỗi Datanode sẽ báo cáo cho Namenode danh sách tất cả các block mà nó lưu trữ Namenode sử dụng thông tin này để cập nhật Metadata, đảm bảo rằng Metadata trên Namenode đạt trạng thái thống nhất với dữ liệu trên các Datanode Metadata thống nhất này được sử dụng để nhân bản và phục hồi lạ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 mà 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 kết nối lại với các Datanode, giúp hệ thống phục hồi Thực chất, Namenode chỉ đứ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ột mô hình do Google phát triển, 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 Gần đây, MapReduce đã trở thành một thuật ngữ phổ biến trong lĩnh vực xử lý dữ liệu.

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ập trung vào việc 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, mang lại những 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 thực hiện các giai đoạn liên tiếp trong quá trình xử lý dữ liệu Hàm Map() có nhiệm vụ phân tán dữ liệu và tạo ra các cặp khóa-giá trị, trong khi hàm Reduce() tổng hợp và xử lý các cặp khóa-giá trị này để trả về kết quả cuối cùng.

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

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

Giữa hai bước Map và Reduce trong quy trình xử lý dữ liệu, bước trung gian quan trọng là Shuffle Sau khi hoàn tất nhiệm vụ của mình, Shuffle sẽ thu thập và tổng hợp các khóa và giá trị trung gian được sinh ra từ bước Map, sau đó chuyển giao cho bước 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 một cách linh hoạt và mở rộng Mô hình này không chỉ đảm bảo khả năng chịu lỗi mà còn giúp giảm chi phí hiệu quả.

Apache Hadoop có một nhược điểm lớn là tất cả các thao tác đều phải thực hiện trên ổ đĩa cứng, dẫn đến việc giảm tốc độ tính toán đáng kể Để khắc phục nhược điểm này, Apache Spark đã được phát triển, cho phép thực hiện các tác vụ nhanh hơn gấp 10 lần so với Hadoop khi sử dụng ổ đĩa cứng và nhanh hơn 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 được cải thiện nhờ khả năng thực hiện tính toán song song trên nhiều máy khác nhau, đồng thời xử lý dữ liệu trực tiếp 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, giúp nhận và xử lý dữ liệu từ nhiều nguồn khác nhau một cách đồng thời thông qua tính năng Spark Streaming.

Spark không sở hữu hệ thống file riêng mà tích hợp với các hệ thống file khác như HDFS, Cassandra, và S3 Nó hỗ trợ nhiều định dạng file khác nhau, bao gồm 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 Tất cả các thành phần này đều cần phải thông qua Spark Core để thực hiện các tác vụ tính toán và xử lý dữ liệu trong bộ nhớ (In-memory computing).

Spark SQL introduces a new data abstraction type called SchemaRDD, which facilitates the handling of both structured and semi-structured data Additionally, it 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 luồng bằng cách xem các luồng dữ liệu như các mini-batches Kỹ thuật RDD transformation được áp dụng cho các mini-batches này nhằm xử lý và phân tích dữ liệu hiệu quả.

MLlib (Thư viện Học Máy) là một nền tảng học máy phân tán được xây dựng trên Spark, sử dụng kiến trúc phân tán dựa trên bộ nhớ Theo các so sánh benchmark, MLlib nhanh hơn 9 lần so với phiên bản chạy trên Hadoop (Apache Mahout).

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ẽ để thực hiện các phép toán trên đồ thị 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 cho phép phân tích dữ liệu thời gian thực, xử lý hàng triệu sự kiện mỗi giây từ các luồng sự kiện khác nhau.

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 chứng minh là có thể thực thi xử lí các công việc nhanh hơn gấp 10 cho đến 100 lần

Map Reduce thực hiện hoàn toàn trên đĩa cứng, có độ trễ cao hơn Không hỗ trợ caching dữ liệu.

Spark có độ trễ tính toán thấp hơn nhờ vào việc lưu trữ các phần kết quả trong bộ nhớ RAM của hệ thống phân tán Việc lưu trữ dữ liệu trong bộ nhớ RAM giúp tăng tốc độ xử lý Mặc dù MapReduce là lựa chọn tiết kiệm chi phí hơn, nhưng Spark lại có giá thành cao hơn.

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.

Thuật toán ID3

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

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

2.4.2 Thuật toán phân lớp ID3

Thuật toán ID3 bắt đầu với tập dữ liệu ban đầu S là nút gốc và thực hiện lặp lại 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) Thuật toá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, sau đó phân tách tập S theo thuộc tính đã chọn để tạo ra các tập con dữ liệu Quy trình này tiếp tục trên từng tập con, chỉ xem xét các thuộc tính chưa được chọn trước đó.

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

Trong ID3, tại mỗi node, thuộc tính được chọn được xác định dựa trên: 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.8 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 lượng 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 một 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 (hai lớp) hoặc biến liên tục với bất kỳ giá trị thực nào.

2.5.2 Thuật toán phân lớp LR xxii

Logistic Regression là một 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.v Ví dụ điển hình bao gồm phân loại email thành email công việc, email gia đình và email spam Thuật toán này cũng được áp dụng để đánh giá tính an toàn của giao dịch trực tuyến hoặc phân loại khối u lành tính hay ác tính Logistic Regression sử dụng hàm sigmoid logistic để đưa ra các đánh giá xác suất.

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

Hình 2.9 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 lấy 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 Bồ Đào Nha, chủ yếu thông qua các cuộc gọi điện thoại Các chiến dịch này thường yêu cầu nhiều liên hệ với khách hàng để xác định khả năng đăng ký sản phẩm tiền gửi có kỳ hạn ngân hàng, với kết quả có thể là 'có' hoặc '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ó nhiều loại công việc khác nhau, bao gồm quản trị viên, công nhân tay nghề (blue-collar), doanh nhân, người giúp việc, quản lý, nhân viên nghỉ hưu, tự kinh doanh, dịch vụ, sinh viên, kỹ thuật viên, và cả những người thất nghiệp hoặc không xác định nghề nghiệp Mỗi loại công việc đều có đặc điểm và yêu cầu riêng, phản ánh sự đa dạng trong nhu cầu tuyển dụng và phát triển nghề nghiệp.

Tình trạng hôn nhân được phân loại thành bốn nhóm chính: 'đã ly hôn', 'đã kết hôn', 'độc thân' và 'không rõ' Trong đó, 'đã ly hôn' bao gồm cả những người đã ly hôn hoặc là 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', 'dec')

 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): xxiv

 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ài đặt 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 Để đọc file dữ liệu CSV, bạn có thể sử dụng lệnh 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 provides a more visually appealing display compared to Spark's DataFrame.show() Use the command pd.DataFrame(df.take(5), columns=columns) for this purpose.

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 xxvi

Chúng tôi nhận thấy rằng không có các biến số nào có 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 cần thiết cho phân tích bao gồm: tuổi, nghề nghiệp, tình trạng hôn nhân, trình độ học vấn, mặc định, số dư, vay mượn, liên hệ, thời gian, chiến dịch, ngày trước, số lần trước đó, kết quả trước đó và tiền gửi.

Quá trình này bao gồm Category Indexing, One-Hot Encodingvà VectorAssembler – Transformer có tính năng hợp nhất nhiều cột thành một cột vectơ.

The process begins by indexing categorical columns using StringIndexer, which then converts the indexed categories into one-hot encoded variables, resulting in binary vectors appended to each row We apply StringIndexer again to encode our labels for indexing purposes Subsequently, VectorAssembler is utilized 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, a StringIndexer and OneHotEncoder are created, while the label for 'deposit' is also indexed Numeric columns such as 'age', 'balance', 'duration', 'campaign', 'pdays', and 'previous' are combined with the one-hot encoded vectors to form the final feature set.

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, allowing for a structured approach to data processing After fitting the Pipeline to the DataFrame, we transform the data and select the relevant columns, including 'label' and 'features,' ensuring an organized schema for further analysis.

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

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

Decision trees are widely used due to their interpretability and ability to handle classification tasks, including multi-class classification They do not require feature scaling and can capture interactions and non-linear relationships effectively In PySpark, a DecisionTreeClassifier can be implemented with the following code: `dt = DecisionTreeClassifier(featuresCol='features', labelCol='label', maxDepth=3)`, followed by fitting the model to the training data using `dtModel = dt.fit(train)` Predictions can then be made on the test dataset with `predictions = dtModel.transform(test)`, allowing users to view selected outputs such as age, job, label, raw predictions, predictions, and probabilities 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

To train a logistic regression model, use the LogisticRegression class with specified feature and label columns, followed by fitting the model to the training data After training, generate predictions on the test dataset and display the selected attributes, including age, job, label, raw prediction, and probability, for the first ten entries.

Hình 3.8: 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. evaluator = BinaryClassificationEvaluator() print('Test Area Under ROC', evaluator.evaluate(predictions))

Test Area Under ROC 0.885643189559481 xxxii

Ngày đăng: 19/12/2024, 22:34

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

TÀI LIỆU LIÊN QUAN

w