TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNGKHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO MÔN HỌC: PHÂN TÍCH DỮ LIỆU LỚN ĐỀ TÀI: XÂY DỰNG ỨNG DỤNG HỌC MÁY SVM DÙNG THƯ VIỆN MLLIB TRONG SPARK TR
CƠ SỞ LÝ THUYẾT
Tổng quan về dữ liệu lớn (Bigdata)
1.1.1 Khái niệm về dữ liệu lớn
Dữ liệu lớn (Big data) là thuật ngữ chỉ những bộ dữ liệu có kích thước lớn hoặc phức tạp, mà các phương pháp truyền thống không thể xử lý hiệu quả.
Theo Gartner, dữ liệu lớn là những nguồn thông tin có khối lượng lớn, tốc độ nhanh và đa dạng về định dạng Để khai thác hiệu quả, cần có phương pháp xử lý mới nhằm đưa ra quyết định, khám phá và tối ưu hóa quy trình.
1.1.2 Nguồn hình thành và phương pháp khai thác, quản lý dữ liệu lớn
Qua thống kê và tổng hợp, dữ liệu lớn được hình thành chủ yếu từ 6 nguồn:
Dữ liệu hành chính được phát sinh từ các chương trình của tổ chức, bao gồm cả chính phủ và phi chính phủ Ví dụ điển hình là hồ sơ y tế điện tử tại bệnh viện, hồ sơ bảo hiểm và hồ sơ ngân hàng, tất cả đều là những loại dữ liệu quan trọng trong quản lý và cung cấp dịch vụ.
Dữ liệu thương mại được tạo ra từ các giao dịch giữa hai thực thể, bao gồm các giao dịch thẻ tín dụng và giao dịch trực tuyến, cả từ thiết bị di động.
- Dữ liệu từ các thiết bị cảm biến như thiết bị chụp hình ảnh vệ tinh, cảm biến đường, cảm biến khí hậu;
- Dữ liệu từ các thiết bị theo dõi, ví dụ theo dõi dữ liệu từ điện thoại di động, GPS;
- Dữ liệu từ các hành vi, ví dụ như tìm kiếm trực tuyến (tìm kiếm sản phẩm, dịch vụ hay thông tin khác), đọc các trang mạng trực tuyến ;
- Dữ liệu từ các thông tin về ý kiến, quan điểm của các cá nhân, tổ chức,trên các phương tiện thông tin xã hội.
Phương pháp khai thác và quản lý dữ liệu lớn hiện nay được thiết kế phù hợp với từng nguồn dữ liệu khác nhau Mỗi loại nguồn dữ liệu lớn yêu cầu các phương pháp khai thác và quản lý riêng biệt Tuy nhiên, hầu hết các tổ chức trên thế giới hiện nay đều chọn sử dụng hệ sinh thái Hadoop như một giải pháp tối ưu cho việc khai thác và quản lý dữ liệu lớn.
1.1.3 Đặc trưng 5V của dữ liệu lớn
Dữ liệu lớn có 5 đặc trưng cơ bản như sau:
Khối lượng dữ liệu là đặc điểm nổi bật nhất của dữ liệu lớn, với kích thước ngày càng tăng, có thể lên đến hàng chục terabyte hoặc nhiều petabyte (1 petabyte = 1024 terabyte) chỉ cho một tập hợp dữ liệu tính đến năm 2012 Trong khi dữ liệu truyền thống có thể lưu trữ trên các thiết bị như đĩa mềm và đĩa cứng, dữ liệu lớn yêu cầu công nghệ “đám mây” để đáp ứng nhu cầu lưu trữ khổng lồ này.
Tốc độ trong xử lý dữ liệu lớn được hiểu qua hai khía cạnh: sự gia tăng nhanh chóng của khối lượng dữ liệu, với 72.9 triệu yêu cầu truy cập tìm kiếm trên Amazon mỗi giây, và khả năng xử lý dữ liệu thời gian thực (real-time), cho phép dữ liệu được xử lý ngay khi phát sinh chỉ trong mili giây Các lĩnh vực như Internet, Tài chính, Ngân hàng, Hàng không, Quân sự và Y tế đang ứng dụng công nghệ này, cho phép xử lý dữ liệu ngay lập tức trước khi lưu trữ Về đa dạng, hơn 80% dữ liệu hiện nay là phi cấu trúc, bao gồm tài liệu, blog, hình ảnh, video và dữ liệu từ thiết bị cảm biến Big data giúp liên kết và phân tích nhiều dạng dữ liệu khác nhau, như bình luận trên Facebook kết hợp với video từ YouTube và Twitter Độ tin cậy và chính xác của dữ liệu cũng là yếu tố quan trọng trong việc xử lý và phân tích dữ liệu lớn.
Một trong những thách thức lớn nhất của Dữ liệu lớn là đảm bảo độ tin cậy và chính xác của dữ liệu Sự phát triển mạnh mẽ của phương tiện truyền thông xã hội và mạng xã hội, cùng với mức độ tương tác và chia sẻ cao từ người dùng di động, đã làm cho việc xác định độ tin cậy và chính xác của dữ liệu trở nên phức tạp hơn Do đó, việc phân tích và loại bỏ dữ liệu không chính xác và nhiễu trở thành một yếu tố quan trọng trong lĩnh vực Dữ liệu lớn.
Giá trị của dữ liệu lớn là yếu tố quan trọng nhất cần xác định trước khi triển khai, vì nó quyết định liệu có nên đầu tư vào dữ liệu lớn hay không Nếu chỉ thu được 1% lợi ích từ dữ liệu lớn, việc phát triển nó sẽ không hợp lý Kết quả dự báo chính xác là minh chứng rõ ràng cho giá trị mà dữ liệu lớn mang lại Chẳng hạn, dữ liệu từ quá trình khám, chữa bệnh có thể giúp dự đoán tình trạng sức khỏe một cách chính xác hơn, từ đó giảm chi phí điều trị và các chi phí y tế liên quan.
1.1.4 Sự khác biệt giữa dữ liệu lớn với dữ liệu truyền thống
Dữ liệu lớn (Big Data) khác biệt với dữ liệu truyền thống, chẳng hạn như kho dữ liệu (Data Warehouse), ở bốn điểm chính: tính đa dạng của dữ liệu cao hơn, khả năng lưu trữ lớn hơn, tốc độ truy vấn nhanh hơn và độ chính xác được cải thiện.
Dữ liệu lớn mang lại sự đa dạng vượt trội so với dữ liệu truyền thống, cho phép chúng ta không cần phải bận tâm đến kiểu dữ liệu hay định dạng khi khai thác và phân tích Thay vào đó, điều quan trọng là giá trị mà dữ liệu cung cấp có đáp ứng được nhu cầu cho công việc hiện tại và tương lai hay không.
Lưu trữ dữ liệu lớn hơn hiện nay trở nên đơn giản hơn nhờ công nghệ lưu trữ đám mây và phân phối dữ liệu phân tán Các giải pháp này giúp giải quyết những thách thức của lưu trữ truyền thống, như xác định dung lượng lưu trữ cần thiết và chi phí đầu tư Công nghệ mới cho phép kết hợp và xử lý dữ liệu phân tán một cách chính xác và nhanh chóng trong thời gian thực, mang lại hiệu quả cao cho việc quản lý dữ liệu.
Truy vấn dữ liệu nhanh chóng và chính xác là ưu điểm nổi bật của dữ liệu lớn so với kho dữ liệu truyền thống Dữ liệu lớn được cập nhật liên tục, giúp người dùng truy xuất thông tin một cách hiệu quả, trong khi kho dữ liệu truyền thống thường xuyên gặp phải tình trạng lỗi cấu trúc do không được theo dõi thường xuyên Bên cạnh đó, dữ liệu lớn được kiểm định chặt chẽ trước khi sử dụng, đảm bảo độ chính xác cao nhờ vào quy trình kiểm tra nghiêm ngặt và nguồn dữ liệu không bị tác động bởi con người.
1.1.5 Ứng dụng dữ liệu lớn
Dữ liệu lớn mang lại nhiều lợi ích cho tổ chức và cá nhân, với nhiều ứng dụng phổ biến.
Phân tích dữ liệu khách hàng là một yếu tố quan trọng mà các doanh nghiệp áp dụng để khai thác dữ liệu lớn, giúp họ nắm bắt hành vi và nhu cầu của khách hàng Qua đó, doanh nghiệp có thể tối ưu hóa chiến lược tiếp thị và cung cấp dịch vụ cá nhân hóa, nâng cao trải nghiệm khách hàng.
Giới thiệu về Apache Hadoop
Hadoop là một framework mã nguồn mở của Apache, chuyên phát triển ứng dụng phân tán để lưu trữ và quản lý tập dữ liệu lớn Nó thực hiện mô hình MapReduce, cho phép chia nhỏ ứng dụng thành nhiều phân đoạn chạy song song trên nhiều node khác nhau Được viết bằng Java, Hadoop cũng hỗ trợ các ngôn ngữ như C++, Python và Perl thông qua cơ chế streaming.
1.2.2 Các thành phần chính của Hadoop:
Hadoop được xây dựng dựa trên ba phần chính là Hadoop DistributesFileSystem (HDFS), YARN và MapReduce a, HDFS (Hadoop Distributed File System)
Hệ thống tập tin phân tán Hadoop (HDFS) là nền tảng lưu trữ chính cho các ứng dụng Hadoop, sử dụng kiến trúc NameNode và DataNode HDFS cung cấp khả năng truy cập dữ liệu hiệu suất cao và hỗ trợ các cụm Hadoop có khả năng mở rộng, giúp tối ưu hóa quy trình xử lý dữ liệu.
Hadoop là một framework mã nguồn mở cho phép xử lý và lưu trữ dữ liệu phân tán, phù hợp cho các ứng dụng dữ liệu lớn Hệ thống tệp phân tán Hadoop (HDFS) đóng vai trò quan trọng trong hệ sinh thái Hadoop, cung cấp giải pháp đáng tin cậy để quản lý khối lượng dữ liệu lớn và hỗ trợ các ứng dụng phân tích dữ liệu hiệu quả.
HDFS cho phép truyền dữ liệu nhanh chóng giữa các nút tính toán và được liên kết chặt chẽ với MapReduce, một framework xử lý dữ liệu phân tán MapReduce giúp phân chia và phân tích công việc giữa các nút trong cụm, đồng thời tổ chức và tổng hợp kết quả thành một câu trả lời hoàn chỉnh cho truy vấn Khi nhận dữ liệu, HDFS sẽ phân tách thông tin thành các khối riêng biệt và phân phối chúng đến các nút khác nhau trong cụm.
HDFS cho phép ghi dữ liệu một lần trên máy chủ, sau đó dữ liệu có thể được đọc và tái sử dụng nhiều lần Hệ thống này bao gồm một NameNode chính, có nhiệm vụ theo dõi vị trí của các tập tin dữ liệu được lưu trữ trong cụm.
HDFS được cấu trúc với nhiều DataNode trên một cụm phần cứng thông thường, thường là một DataNode cho mỗi nút trong cụm, và các DataNode thường được đặt trong cùng một tủ tại trung tâm dữ liệu Dữ liệu được chia thành các khối riêng biệt và phân phối giữa các DataNode để lưu trữ, với việc sao chép các khối trên nhiều nút nhằm tối ưu hóa khả năng xử lý song song NameNode giữ vai trò quan trọng trong việc xác định vị trí của các khối dữ liệu trên các DataNode, đồng thời quản lý quyền truy cập vào các tập tin, bao gồm các thao tác đọc, ghi, tạo, xóa và sao chép khối dữ liệu.
NameNode phối hợp chặt chẽ với các DataNodes, cho phép cụm linh hoạt điều chỉnh yêu cầu năng lượng của máy chủ theo thời gian thực Điều này đạt được thông qua việc thêm hoặc loại bỏ các nút khi cần thiết.
Các DataNodes liên tục tương tác với NameNode để xác định nhiệm vụ cần thực hiện, giúp NameNode luôn nắm rõ trạng thái của từng DataNode Khi NameNode phát hiện một DataNode không hoạt động đúng, nó có thể nhanh chóng chuyển nhiệm vụ sang một nút khác có cùng khối dữ liệu Ngoài ra, các DataNodes cũng giao tiếp với nhau để hợp tác trong các hoạt động quản lý tệp tin.
Hệ thống HDFS được thiết kế với tính năng chịu lỗi cao, cho phép sao chép mỗi phần dữ liệu nhiều lần và phân phối các bản sao đến các nút khác nhau Điều này đảm bảo rằng ít nhất một bản sao của dữ liệu được lưu trữ trên một tủ máy chủ khác, giúp tăng cường độ tin cậy và bảo vệ dữ liệu.
HDFS sử dụng kiến trúc primary/secondary, trong đó NameNode là máy chủ chính chịu trách nhiệm quản lý không gian tên của hệ thống tập tin và kiểm soát quyền truy cập của người dùng vào các tập tin Đây là thành phần trung tâm của HDFS, đảm bảo tính toàn vẹn và an ninh cho dữ liệu.
Hệ thống tập tin phân tán Hadoop sử dụng NameNode để duy trì và quản lý không gian tên, đồng thời cung cấp quyền truy cập phù hợp cho khách hàng Các DataNode chịu trách nhiệm quản lý bộ nhớ gắn liền với các nút mà chúng hoạt động trên đó.
HDFS cung cấp một không gian tên cho hệ thống tập tin, cho phép lưu trữ dữ liệu của người dùng trong các tập tin Mỗi tập tin được chia thành nhiều khối và lưu trữ trên các DataNode NameNode quản lý không gian tên hệ thống tập tin, thực hiện các chức năng như mở, đóng và đổi tên tập tin và thư mục, đồng thời điều chỉnh ánh xạ các khối tới các DataNode Các DataNode chịu trách nhiệm phục vụ các yêu cầu đọc và ghi từ khách hàng, cũng như thực hiện việc tạo, xóa và sao chép khối theo chỉ dẫn của NameNode.
HDFS cung cấp khả năng tổ chức tập tin theo cách truyền thống, cho phép người dùng hoặc ứng dụng tạo thư mục và lưu trữ tập tin bên trong Cấu trúc thư mục của HDFS tương tự như hầu hết các hệ thống tập tin khác, người dùng có thể thực hiện các thao tác như tạo, xóa, đổi tên và di chuyển tập tin giữa các thư mục.
NameNode ghi nhận mọi thay đổi trong không gian tên của hệ thống tập tin và các thuộc tính liên quan Ứng dụng có thể xác định số lượng bản sao mà HDFS cần duy trì cho một tập tin NameNode lưu trữ thông tin về số lượng bản sao, được gọi là hệ số nhân bản của tập tin đó YARN (Yet Another Resource Negotiator) là một thành phần quan trọng trong việc quản lý tài nguyên trong hệ thống.
YARN (Yet-Another-Resource-Negotiator) is a framework designed to support the development of distributed applications It provides essential daemons and APIs for building these applications while effectively managing and scheduling computational resources such as CPU and memory Additionally, YARN monitors the execution processes of these applications, ensuring efficient resource utilization.
Bên trong YARN, chúng ta có hai trình quản lý ResourceManager và NodeManage
ResourceManager: Quản lý toàn bộ tài nguyên tính toán của cluster.
NodeManger: Giám sát việc sử dụng tài nguyên của container và báo cáo với ResourceManger Các tài nguyên ở đây là CPU, memory, disk, network,
Quá trình 1 ứng dụng chạy trên YARN được mô tả bằng sơ đồ trên qua các bước sau:
- Client giao 1 task cho Resource Manager
Apache Spark
Apache, officially known as Apache HTTP Server, is a free and open-source web server software developed by the Apache Software Foundation since 1995 It holds approximately 46% of the global website market share, enabling webmasters to efficiently and securely publish content online while minimizing costs.
Apache Spark là một framework mã nguồn mở chuyên xử lý dữ liệu quy mô lớn, cho phép người dùng nhanh chóng xây dựng các mô hình dự đoán và thực hiện tính toán trên nhiều máy tính hoặc tập dữ liệu mà không cần phải trích xuất mẫu thử nghiệm Được phát triển ban đầu bởi AMPLab vào năm 2009, Apache Spark đã được chuyển giao cho Apache Software Foundation vào năm 2013.
1.3.2 Các thành phần của Apache Spark
Một Apache Spark sẽ có 5 thành phần:
Spark Core là nền tảng thiết yếu cho mọi thành phần trong Apache Spark, chịu trách nhiệm cho việc tính toán và xử lý dữ liệu trong bộ nhớ (In-memory computing) Nó cũng đảm bảo khả năng tham chiếu dữ liệu từ các hệ thống lưu trữ bên ngoài.
Spark SQL: Đây là thành phần cung cấp kiểu data abstraction mới
SchemaRDD hỗ trợ xử lý dữ liệu cấu trúc và nửa cấu trúc trong Spark SQL Các thao tác trên DataFrames được thực hiện bằng ngôn ngữ Java, Python hoặc Scala, thông qua DSL (ngôn ngữ chuyên biệt cho miền) và SQL.
Spark Streaming cho phép phân tích dữ liệu theo dạng stream bằng cách chia nhỏ thành các mini batches, từ đó áp dụng các kỹ thuật RDD transformation Điều này giúp các đoạn mã xử lý batch có thể được tái sử dụng cho xử lý stream, làm cho việc phát triển kiến trúc lambda trở nên thuận tiện hơn Tuy nhiên, việc này cũng dẫn đến một độ trễ nhất định trong quá trình xử lý dữ liệu.
Spark Mllib là nền tảng học máy phân tán dựa trên bộ nhớ, cho phép xử lý dữ liệu nhanh chóng So với phiên bản chạy trên Hadoop, Spark Mllib đạt tốc độ nhanh hơn gấp 9 lần, mang lại hiệu suất tối ưu cho các ứng dụng học máy.
GraphX: là nền tảng xử lý đồ họa, cung cấp các Api diễn tả tính toán trong đồ thị bằng cách sử dụng Pregel Api.
1.3.3 Kiến trúc của Apache Spark
Apache Spark bao gồm hai thành phần chính: trình điều khiển (driver) và trình thực thi (executors) Trình điều khiển có nhiệm vụ chuyển đổi mã người dùng thành nhiều tác vụ (tasks) và phân phối chúng trên các nút xử lý (worker nodes).
Kiến trúc của Apache Spark
Trình thực thi thực hiện nhiệm vụ trên các nút xử lý được giao bởi trình điều khiển, và Spark có thể hoạt động ở chế độ cụm độc lập chỉ cần JVM và khung Apache Spark trên mỗi máy Tuy nhiên, việc sử dụng công cụ quản lý cụm làm trung gian giữa hai thành phần giúp phân bổ tài nguyên hiệu quả hơn và tận dụng tốt hơn các nguồn lực có sẵn.
Apache Spark sử dụng đồ thị vòng có hướng (DAG) để xây dựng các lệnh xử lý dữ liệu DAG đóng vai trò là lớp lập lịch của Spark, xác định các tác vụ sẽ được thực hiện trên từng nút xử lý và trình tự thực hiện của chúng.
1.3.4 Ưu điểm của Apache Spark
Apache Spark không chỉ sở hữu các tính năng hữu ích mà còn mang lại nhiều ưu điểm vượt trội Với thiết kế đơn giản và dễ sử dụng, Apache Spark giúp người dùng dễ dàng tiếp cận công nghệ tính toán song song Chỉ cần nắm vững kiến thức cơ bản về cơ sở dữ liệu và lập trình Python hoặc Scala, người dùng có thể sử dụng Apache Spark một cách hiệu quả Đây là điểm khác biệt lớn nhất giữa Apache Spark và Hadoop.
Apache Spark nổi bật với khả năng phân tích thời gian thực ấn tượng, cho phép xử lý hàng triệu sự kiện mỗi giây từ các luồng dữ liệu thời gian thực Quá trình nhận và xử lý dữ liệu diễn ra gần như đồng thời, điều này rất hữu ích trong việc phát hiện gian lận trong các giao dịch ngân hàng Thêm vào đó, Apache Spark được hỗ trợ bởi các thư viện cấp cao như truyền dữ liệu trực tuyến, truy vấn SQL, học máy và xử lý đồ thị, giúp tăng hiệu suất cho nhà phát triển và đảm bảo sự kết nối liền mạch cho các quy trình làm việc phức tạp.
Khả năng tương thích cao và hỗ trợ nhiều ngôn ngữ lập trình: Apache
Spark tương thích với tất cả các định dạng tệp và nguồn dữ liệu mà cụm Hadoop hỗ trợ Người dùng có thể lập trình bằng các ngôn ngữ như Scala, Java, Python và R.
Apache Spark cung cấp giải pháp tối ưu cho phân tích và xử lý dữ liệu lớn, với nhiều lợi thế nổi bật Sự phát triển mạnh mẽ của Apache Spark trong tương lai, đặc biệt trong lĩnh vực công nghệ thông tin và các ngành công nghệ cốt lõi, hứa hẹn sẽ mang lại những tiến bộ đáng kể cho ngành này.
1.3.5 Đánh giá về Spark và MLlib
Hiệu suất và Tốc độ:
Spark được tối ưu hóa để xử lý dữ liệu phân tán hiệu quả, với khả năng xử lý dữ liệu trong bộ nhớ, giúp cải thiện tốc độ và hiệu suất của các hoạt động xử lý dữ liệu.
MLlib sử dụng các thuật toán tối ưu hóa và triển khai song song để cải thiện hiệu suất huấn luyện mô hình trên dữ liệu phân tán.
Spark và MLlib đều có khả năng mở rộng linh hoạt, cho phép xử lý dữ liệu lớn trên các cluster có kích thước lớn.
Khả năng mở rộng này giúp Spark và MLlib phù hợp với các ứng dụng học máy có quy mô lớn và đòi hỏi khả năng mở rộng cao.
Hỗ trợ đa loại thuật toán:
MLlib cung cấp nhiều thuật toán học máy mạnh mẽ và phổ biến, bao gồm các phương pháp phân loại, hồi quy, gom cụm, xử lý dữ liệu và đánh giá mô hình.
Bài toán phân loại dữ liệu và Support Vector Machines (SVM)
1.4.1 Bài toán phân loại dữ liệu
Phân loại dữ liệu là quá trình xác định nhãn cho điểm dữ liệu dựa trên các đặc trưng của nó Thông qua việc áp dụng các thuật toán máy học, quá trình này giúp xây dựng mô hình có khả năng phân loại các điểm dữ liệu mới vào các lớp đã biết từ dữ liệu huấn luyện.
Một số phương pháp phổ biến để phân loại dữ liệu:
Support Vector Machines (SVM) là một phương pháp phân loại hiệu quả trong học máy, nổi bật với khả năng tìm kiếm siêu phẳng tối ưu để phân chia các điểm dữ liệu thành các lớp khác nhau trong không gian đặc trưng.
Hồi quy logistic là một phương pháp đơn giản và hiệu quả cho phân loại nhị phân, sử dụng hàm logistic để ước lượng xác suất thuộc về từng lớp Phương pháp này dựa vào ngưỡng xác suất để quyết định lớp cuối cùng cho dữ liệu.
Cây quyết định và Rừng ngẫu nhiên là hai phương pháp phân loại hiệu quả, sử dụng cấu trúc cây quyết định để phân tích dữ liệu Các thuật toán này xây dựng một chuỗi quy tắc quyết định dựa trên các đặc điểm của dữ liệu, giúp phân loại các điểm dữ liệu vào các lớp khác nhau một cách chính xác.
Mạng nơ-ron, đặc biệt là mạng nơ-ron sâu, là công cụ mạnh mẽ cho việc phân loại dữ liệu Chúng có khả năng học các biểu diễn phức tạp và tự động trích xuất các đặc trưng quan trọng từ dữ liệu, giúp cải thiện hiệu quả trong các tác vụ phân tích.
Naive Bayes Classifier là một phương pháp phân loại dựa trên định lý Bayes, với giả định rằng các đặc trưng đầu vào độc lập Phương pháp này sử dụng công thức Bayes để tính toán xác suất cho mỗi lớp, giúp xác định khả năng thuộc về từng loại.
K-Nearest Neighbors (KNN): KNN là một phương pháp dựa trên cơ sở của việc tìm các điểm dữ liệu gần nhất trong không gian đặc trưng và sử dụng đa số của các lớp của các điểm lân cận để quyết định lớp của điểm dữ liệu mới.
Các phương pháp phân loại dữ liệu trong học máy rất đa dạng và phong phú Việc chọn lựa phương pháp phù hợp thường dựa vào đặc điểm của dữ liệu và yêu cầu cụ thể của từng bài toán.
Support Vector Machines (SVM) là một kỹ thuật học máy phổ biến cho phân loại và hồi quy, được phát triển bởi Vapnik và Cortes vào cuối những năm 1990 SVM đã nhanh chóng trở thành một trong những phương pháp phân loại hiệu quả nhất, nhờ vào khả năng tìm kiếm siêu phẳng tối ưu để phân tách các lớp dữ liệu.
Nguyên lý hoạt động của SVM là xác định một siêu phẳng (hyperplane) trong không gian đặc trưng nhằm tối ưu hóa việc phân chia các lớp Siêu phẳng này tối đa hóa khoảng cách (margin) giữa nó và các điểm dữ liệu gần nhất, được gọi là vector hỗ trợ (support vectors), từ đó SVM có tên gọi "Support Vector Machines".
Hyperplane là một khái niệm quan trọng trong không gian đa chiều, nơi trong không gian hai chiều, nó thể hiện dưới dạng một đường thẳng, trong không gian ba chiều là một mặt phẳng, và trong không gian nhiều chiều hơn, nó được gọi là siêu phẳng Trong bối cảnh của SVM, mục tiêu là xác định một hyperplane để phân chia dữ liệu thành các lớp khác nhau.
Tối ưu hóa margin là mục tiêu chính của SVM, nhằm xác định một hyperplane với margin lớn nhất, tức là khoảng cách nhỏ nhất từ hyperplane đến các điểm dữ liệu gần nhất của hai lớp Việc này giúp đảm bảo hyperplane đạt hiệu suất phân loại cao trên dữ liệu mới.
Support Vectors: Các điểm dữ liệu gần nhất đến hyperplane được gọi là support vectors Chúng đóng vai trò quan trọng trong việc xác định hyperplane tối ưu.
SVM có khả năng phân loại dữ liệu phi tuyến tính thông qua việc sử dụng hàm kernel để chuyển đổi dữ liệu vào không gian đặc trưng cao hơn, nơi một hyperplane tuyến tính có thể phân chia các lớp dữ liệu Mục tiêu chính của SVM là tìm kiếm hyperplane tối ưu để phân chia các lớp dữ liệu với margin lớn nhất, và các support vectors sẽ được sử dụng để xác định vị trí của hyperplane này.
Hàm mất mát (loss function) trong SVM thường áp dụng hàm mất mát hinge loss để đánh giá sự mất mát trong quá trình huấn luyện Hinge loss giúp đo lường mức độ "lỗi" khi một điểm dữ liệu bị phân loại sai hoặc nằm trong vùng margin xung quanh hyperplane.
Trong bài viết này, yi đại diện cho nhãn của điểm dữ liệu thứ i với các giá trị {−1,1} Vector trọng số w được sử dụng để xác định hyperplane, trong khi xi là vectơ đặc trưng của điểm dữ liệu thứ i Hệ số bias b cũng đóng vai trò quan trọng trong mô hình Giá trị biểu thức tuyến tính của điểm dữ liệu xi theo hyperplane được tính bằng w⋅xi+b.
XÂY DỰNG MỘT ỨNG DỤNG HỌC MÁY SVM SỬ DỤNG THƯ VIỆN MLLIB TRONG SPARK
SỬ DỤNG THƯ VIỆN MLLIB TRONG SPARK 2.1 Tạo entry point trong Spark
Tạo một entry point trong Spark là bước thiết yếu khi phát triển ứng dụng hoặc xử lý dữ liệu Entry point đánh dấu điểm khởi đầu cho quá trình thực thi ứng dụng Spark và cung cấp các cấu hình cần thiết cho phiên làm việc.
Khởi tạo SparkSession là bước đầu tiên trong việc sử dụng Apache Spark, cho phép người dùng tạo một đối tượng SparkSession Đây là điểm khởi đầu cho tất cả các hoạt động trên Spark, bao gồm việc đọc và ghi dữ liệu, thực hiện các phép biến đổi và hành động trên dữ liệu, cũng như thao tác với DataFrame.
Cài đặt cấu hình Spark là bước quan trọng để tối ưu hiệu suất, bao gồm việc thiết lập entry point, số lượng core, dung lượng bộ nhớ và các thuộc tính khác Việc cấu hình đúng sẽ giúp Spark hoạt động hiệu quả hơn trong quá trình xử lý dữ liệu.
Để xác định tên ứng dụng và cụm Spark, bạn có thể đặt tên cho ứng dụng của mình và chỉ định master của cụm Spark mà bạn muốn sử dụng thông qua entry point.
Entry point trong Spark cho phép quản lý hiệu quả các tài nguyên như bộ nhớ, core CPU và vị trí lưu trữ, giúp tối ưu hóa quá trình chạy ứng dụng trên cụm Spark.
Cuối cùng, bạn có thể sử dụng entry point để dừng hoặc đóng tất cả các tài nguyên Spark khi ứng dụng của bạn đã hoàn thành.
2.2.1 Lưu trữ file trên HDFS
Dữ liệu cần được lưu trữ trên HDFS ở định dạng có thể đọc được bởi Spark Ví dụ: định dạng CSV hoặc Parquet.
- Client gửi 1 request ghi file đến cho hệ thống qua cácDistributed File System APIs.
- Distributed File System APIs tạo ra 1 yêu cầu RPC gửi tới cho Namenode
The client will write files using FSDataOutputStream, where the data intended for writing is pushed into a Queue Subsequently, DataStreamer retrieves the data from the Queue to write it to the DataNode.
- Dữ liệu sẽ được ghi trên 1 DataNode và hệ thống tự replicate data thành 2 bằng cách lưu trên các DataNode
- Tiếp tục replicate xong bản 3 thì DataNode sẽ phản hồi lại cho FSDataStream
- Client thực hiện close file vừa ghi
- Hệ thống DFS sẽ phản hồi lại cho NameNode về việc ghi xong dữ liệu
2.2.2 Đọc dữ liệu trên HDFS và tiền xử lý dữ liệu
- Client gửi request đọc file cho hệ thống qua các DFS APIs
- DFS gửi request cho NameNode để lấy thông tin về location của Block
- DFS tạo ra FSDataInputStream lưu các location gần với client nhất để đọc dữ liệu
- Dữ liệu được đọc trong các DataNode, khi đọc xong block này sẽ chuyển sang đọc block khác (nếu lỗi sẽ chuyển sang đọc block của DataNode gần nhất)
- Client gửi lệnh close cho hệ thống khi đọc xong
Dữ liệu sau khi đọc xong sẽ được tiến hành tiền xử lý để phù hợp với bài toán, bao gồm các bước như xử lý giá trị thiếu, chuẩn hóa, lọc dữ liệu và loại bỏ những dữ liệu không cần thiết.
2.3 Xây dựng và huấn luyện mô hình SVM
- Import thư viện MLLib: Bắt đầu bằng cách import thư viện MLLib của Spark, cung cấp các lớp cần thiết cho học máy.
Để khởi tạo mô hình SVM, bạn có thể sử dụng lớp LinearSVC từ MLLib nhằm xây dựng mô hình SVM tuyến tính Mô hình này cho phép tùy chỉnh các tham số quan trọng như maxIter, đại diện cho số lần lặp tối đa, và regParam, tham số điều chỉnh L2.
- Huấn luyện mô hình: Sử dụng phương thức fit của mô hìnhSVM để huấn luyện nó trên tập dữ liệu huấn luyện.
CHƯƠNG TRÌNH THỰC NGHIỆM
Chuẩn bị dữ liệu
Bộ dữ liệu Titanic là một tài nguyên quan trọng trong khoa học dữ liệu và học máy, cung cấp thông tin chi tiết về hành khách trên tàu Titanic, bao gồm các thuộc tính như tuổi tác, giới tính, hạng ghế và tình trạng sống sót.
- PassengerId: ID của hành khách.
- Survived: Biến nhị phân (0 hoặc 1) chỉ ra liệu hành khách đã sống sót hay không.
- Pclass: Hạng vé của hành khách (1, 2 hoặc 3).
- Name: Tên của hành khách.
- Sex: Giới tính của hành khách.
- Age: Tuổi tác của hành khách.
- SibSp: Số lượng anh chị em hoặc vợ chồng đi cùng trên tàu.
- Parch: Số lượng phụ thuộc (cha mẹ, con cái) đi cùng trên tàu.
- Cabin: Số phòng trên tàu.
- Embarked: Cảng mà hành khách lên tàu (C = Cherbourg, Q Queenstown, S = Southampton).
3.1.2 Lưu trữ dữ liệu lên HDFS
Khởi động Hadoop bao gồm việc khởi động các thành phần chính của Hệ thống Tệp Phân Tán Hadoop (HDFS), như NameNode, DataNode và Secondary NameNode (nếu có).
Sao chép dữ liệu từ máy cục bộ (D:\titanic.csv) vào hệ thống phân tán Hadoop HDFS tại thư mục /user/tienphuckhai/data để thực hiện xử lý và phân tích dữ liệu một cách phân tán và hiệu quả.
Để xử lý các giá trị Null trong dữ liệu, chúng ta có thể thay thế bằng độ tuổi trung bình, tuy nhiên, điều này không hợp lý khi có sự chênh lệch lớn về độ tuổi giữa các cá nhân Thay vào đó, chúng ta có thể sử dụng thông tin từ tên, như tiền tố Mr hoặc Mrs, để phân nhóm và gán độ tuổi trung bình tương ứng cho từng nhóm.
Một số từ viết tắt như "Mlle" và "Mme" thường được sử dụng sai chính tả để chỉ "Miss" Chúng ta sẽ thay thế các từ viết tắt này bằng "Miss" và áp dụng tương tự cho các giá trị khác.
Chỉ có hai giá trị Null trong trường Địa điểm lên tàu Phần lớn hành khách đều lên tàu từ thành phố 'S' (Southampton), vì vậy chúng ta sẽ điền hai giá trị trống này theo xu hướng đa số.
- Chuyển đổi các cột Sex, Embarked & Initial từ chuỗi sang số bằng StringIndexer:
- Xóa các cột không cần thiết: "PassengerId", "Name",
"Ticket","Cabin", "Embarked", "Sex", "Initial"
- Biểu diễn tất cả các đặc trưng của dữ liệu dưới dạng một vector:
- Cuối cùng chia dữ liệu thành tập huấn luyện và tập kiểm tra với tỉ lệ 80:20
Huấn luyện mô hình
Trong bước này, chúng ta sẽ sử dụng tập huấn luyện để đào tạo mô hình SVM thông qua thư viện Mllib, cụ thể là LinearSVC từ pyspark.ml.classification trong môi trường Apache Spark.
Để xây dựng ứng dụng Spark, cần thực hiện các bước thiết yếu như tạo entry point với SparkSession từ thư viện pyspark.sql, tiến hành tiền xử lý dữ liệu, huấn luyện mô hình và đánh giá mô hình trong file train.py Việc chạy file này và huấn luyện mô hình được thực hiện thông qua lệnh spark-submit.
Lệnh spark-submit là công cụ chính để gửi ứng dụng Spark chạy trên cụm Spark Câu lệnh này có nhiều tham số và đối số, nhưng dưới đây là cú pháp để chạy một ứng dụng đơn giản: spark-submit master "" > .
Sử dụng câu lệnh spark-submit để gửi ứng dụng Spark thực thi trên cụm máy chủ Bằng cách chỉ định tùy chọn master "yarn", bạn xác định YARN là môi trường quản lý tài nguyên cho Spark, giúp khai thác hiệu quả các nguồn lực phân tán trên cụm.
The image above displays the successful submission (SUCCEEDED) of a Spark application named SupportVectorMachine, which has an application priority of 0 and an execution time of 36 seconds (Elapsed).
Đánh giá mô hình
Kết quả của ứng dụng Spark được ghi vào tệp văn bản output.txt Mô hình SVM đã được huấn luyện và đánh giá với độ chính xác đạt khoảng 80.85% Độ chính xác này phản ánh khả năng của mô hình trong việc dự đoán, cho thấy nó dự đoán đúng hơn 80% các trường hợp trong tập dữ liệu đánh giá.
Lỗi thử nghiệm của mô hình SVM là tỷ lệ dự đoán không chính xác trên tập dữ liệu kiểm tra, với mức lỗi khoảng 19.15% Điều này có nghĩa là mô hình đã dự đoán sai hơn 19% các trường hợp trong tập dữ liệu thử nghiệm.