Chương 1: CƠ SỞ LÝ THUYẾT 1. SPRING BOOT Java Spring Boot là một framework phổ biến, mã nguồn mở, enterprise – level (tập hợp các quy trình, công cụ, khuôn mẫu thường được sử dụng để xây dựng kế hoạch, xây dựng hệ thống kiến trúc ứng dụng mức độ doanh nghiệp) trong việc tạo ra một ứng dụng độc lập hoặc production – grade ( phần mềm chất lượng, làm việc mượt mà và xử lý được nhiều người dùng). Spring Boot là một công cụ hỗ trợ khiến cho quá trình phát triển ứng dựng web và các microsoftware trở nên nhanh hơn, dễ dàng hơn thông qua các điểm nổi bật sau đây: o Tự động cấu hình: Spring Boot cung cấp cơ chế tự động cấu hình các thành phần của ứng dụng dựa trên các thư viện dependencies. Điều này giúp người lập trình tiết kiệm thời gian, loại bỏ hầu hết cấu hình thủ công.
o Hỗ trợ những Server nhúng: Spring Boot hỗ trợ các servers nhúng như Tomcat, Jetty, Undertow. Có nghĩa là ứng dụng có thể được gói vào file jar hoặc war với server nhúng, và từ đó đơn giản giai đoạn triển khai ra thực tế, giảm sự phụ thuộc vào bên ngoài. o Kiến trúc microservices: Spring Boot rất phù hợp với việc xây dựng kiến trúc microservices. o Spring Boot Starter: là các bản mẫu đã được cấu hình trước đó và được sử dụng trong rất nhiều trường hợp, giúp đơn hóa việc cấu hình các dependencies, cho phép lập trình viên thêm trực tiếp những hàm chức năng mà không cần phải viết thủ công.
o Spring Boot CLI: cho phép lập trình viên xây dựng ứng dựng và chạy ứng dụng Spring Boot trực tiếp trên Command Line, hỗ trợ Groovy Script. Với những đặc tính và tiện ích mà Spring Boot mang lại, nó trở thành một lựa chọn mạnh mẽ cho việc phát triển ứng dụng Java hiện đại và dễ bảo trì. ANGULAR Angular là một frameword front-end phổ biến, được sử dụng để xây dựng các ứng dụng web dynamic. Angular cung cấp một tập các tính năng toàn diện, những tính năng này đã làm tăng độ phổ biến của Angular và khiến nó nổi trội hơn so với những framwork front-end khác.
Sau đây là một số điểm nổi bật: o Two-Way Data Binding: cho phép tự động đồng bộ hóa dữ liệu giữa các model và view. Những sự thay đổi trong dữ liệu model sẽ được phản ảnh trực tiếp trên view và ngược lại. Điều này đơn giản hóa việc quản lý và thiết kế giao diện người dùng và giảm đi việc thao tác với DOM. o Xem từng component là module: Angular sử dụng kiến trúc component-based.
Các phần khác nhau trên giao diện người dùng sẽ được đóng gói trong các phần riêng biệt và được xử lý riêng biệt, có thể tái sử dụng các thành phần này. o Dependency Injection: Angular có hệ thống dependency injection giúp có thể quản lý và sử dụng thư viện dễ dàng hơn. o Typescript language: Angular được phát triển dựa trên ngôn ngữ typescript, là một phân nhánh của javascript. Ngôn ngữ này giúp bắt lỗi trong quá trình phát triển một cách tốt hơn, cung cấp những công cụ hỗ trợ mạnh mẽ, cải thiện việc bảo trì.
o Angular CLI: Angular cung cấp tính năng làm việc trực tiếp với command line, đơn giản hóa việc tạo, xây dựng, triển khai, kiểm thử ứng dụng Angular. o RxJS và Observables: Angular tích hợp các thư viện này giúp xử lý các yêu cầu, sự kiện một cách bất đồng bộ, từ đó tăng khả năng trải nghiệm của người dùng. o Angular Universal: cho phép người dùng có thể tự render bên phía server. o Community mạnh mẽ: Cộng đồng lớn và tích cực của Angular đảm bảo rằng có nhiều tài nguyên học tập và hỗ trợ từ cộng đồng.
Angular là một lựa chọn mạnh mẽ cho việc phát triển các ứng dụng web phức tạp và hiện đại, đặc biệt là khi cần một framework linh hoạt, dễ bảo trì và có khả năng mở rộng. STRUCTURED QUERY LANGUAGE – SQL Structured Query Language (SQL) là một ngôn ngữ lập trình chuyên dụng được sử dụng để quản lý và tương tác với các hệ thống quản lý cơ sở dữ liệu quan hệ (Relational Database Management System - RDBMS). SQL cung cấp một phương tiện mạnh mẽ để thực hiện các thao tác như truy vấn dữ liệu, cập nhật dữ liệu, chèn dữ liệu mới, xóa dữ liệu, và quản lý cấu trúc của cơ sở dữ liệu. Dưới đây là một số điểm quan trọng về SQL: o Chia ra nhiều loại lệnh: Data Query Language (DQL) được sử dụng để truy vấn dữ liệu từ cơ sở dữ liệu, thường sử dụng lệnh SELECT; Data Definition Language (DDL) được sử dụng để định nghĩa cấu trúc của cơ sở dữ liệu, thường sử dụng lệnh CREATE, ALTER, DROP; Data Manipulation Language (DML) được sử dụng để thay đổi dữ liệu trong cơ sở dữ liệu, thường sử dụng lệnh INSERT, UPDATE, DELETE.
o Có khả năng mở rộng: SQL không chỉ được sử dụng cho hệ thống quản lý cơ sở dữ liệu quan hệ truyền thống mà còn có thể được áp dụng cho nhiều loại cơ sở dữ liệu khác nhau như cơ sở dữ liệu không quan hệ, cơ sở dữ liệu đối tượng. o Quản lý dữ liệu quan hệ: SQL chủ yếu được thiết kế để làm việc với dữ liệu quan hệ, trong đó dữ liệu được tổ chức thành các bảng có mối quan hệ với nhau. o Hỗ trợ truy vấn phức tạp: SQL hỗ trợ truy vấn dữ liệu phức tạp thông qua các câu lệnh JOIN, GROUP BY, HAVING, ORDER BY, giúp người phát triển thực hiện các tác vụ phức tạp trên dữ liệu. o An toàn và bảo mật: SQL cung cấp cơ chế an toàn và bảo mật để quản lý quyền truy cập dữ liệu, giúp bảo vệ thông tin quan trọng khỏi truy cập trái phép.
SQL đóng vai trò quan trọng trong quản lý và tương tác với cơ sở dữ liệu trong nhiều ứng dụng và hệ thống thông tin, là công cụ không thể thiếu cho các nhà phát triển và quản trị cơ sở dữ liệu. THUẬT TOÁN K-NEAREST NEIGHBORS KNN – RECOMMENDATION SYSTEM 1. Khái niệm Trong các bài toán hồi quy (regression) và bài toán phân loại (classification), Thuật toán K-Nearest Neighbor (KNN) được sử dụng rỗng rãi vì sự đơn giản và hiệu quả của ngôn ngữ học máy này. Với thông tin k điểm dữ liệu gần nhất, thuật toán này sẽ xác định được nhãn (đối với bài toán classification) hoặc xác định được giá trị (đối với bài toán hồi quy) của một điểm dữ liệu đầu vào.
Vì thuật toán dựa trên thông tin từ các thực thể trong không gian để xác định hoặc đưa ra các quyết định đối với thực thể mới, thuật toán K-Nearest Neighbor (KNN) là phương pháp học có giám sát. Như đã nói, cốt lõi của thuật toán này là dựa vào những thông tin có được từ k thực thể tồn tại trong không gian và từ những thông tin đó đưa ra dự đoán về giá trị hoặc phân loại cho dữ liệu mới. Vì tập dữ liệu không cần phải giả định cụ thể về cấu trúc dữ liệu khiến cho thuật toán KNN trở lên linh hoạt và áp dụng trong nhiều tình huống. Ví dụ về việc học có giám sát và không giám sát: Học có giám sát: Nhãn của một thực thể mới sẽ được quyết định dựa trên tập dữ liệu đã được cung cấp trước.
Ví dụ phân loại email có spam hay không dựa trên tập dữ liệu đã được cung cấp trước đó (từ khóa, tần suất lặp từ, địa chỉ người gửi) Học không giám sát: Làm việc với dữ liệu không được gắn nhãn và cố gắng tìm ra cấu trúc hoặc mẫu từ tập dữ liệu. Sau đó dựa vào mẫu mới tạo ra để xác định nhãn cho thực thể mới. Ví dụ như bài toán phân loại khách hàng, với tập dữ liệu khách hàng chưa được phân loại, thuật toán sẽ tiến hành học và phân cụm thành từng nhóm. Sau đó gán nhãn cho từng loại khách hàng.
Ví dụ về tập dữ liệu giải định cụ thể về cấu trúc dữ liệu và không giả định cụ thể về cấu trúc dữ liệu: Tập dữ liệu không giả định cụ thể về cấu trúc dữ liệu: Xác định chủ đề của một bài báo ("Thể thao", "Chính trị", "Kinh tế") dựa trên tập bài báo đã được cung cấp. Mỗi bài báo được biễu diễn bằng một vector dựa trên tần suất xuất hiện của các từ khóa. Ở đây, 20 ta không hề thấy bất kỳ ràng buộc gì giữa những từ khóa có trong tờ báo hoặc bất kỳ mối quan hệ tuyến tính nào giữa từ khóa (đặc trưng) và chủ đề tờ báo (nhãn). Chủ đề của một tờ báo không bị quyết định một cách rõ ràng bởi việc xuất hiện nhiều hay ít của một từ khóa nhất định.
Tập dữ liệu giả định cụ thể về cấu trúc dữ liệu: dự đoán giá nhà dựa trên diện tích, số căn phòng, cửa số, tiện ích, số tầng. Ở đây, ta thấy giữa các các đặc trưng và nhãn (giá nhà) có mối quan hệ tuyến tính. Nếu xét theo thực tế thì nếu diện tích càng tăng thì giá nhà càng tăng, hoặc tiện ích càng nhiều thì giá nhà càng tăng. Trong lĩnh vực hệ thống gợi ý (Recommendation System), thuật toán này dựa trên sở thích, hành vi của người dùng để đề xuất những sản phẩm, dịch vụ tương tự.
Dựa vào một số tiêu chí có giá trị tương đồng như khoảng cách Euclidean hoặc khoảng cách cosine, KNN sẽ chọn ra k người dùng hoặc sản phẩm tương tự với người dùng hoặc sản phẩm cụ thể. Từ đó sẽ đề xuất những sản phẩm hoặc dịch vụ này tới người dùng. Trong dự án này, KNN sẽ đánh giá sự tương đồng giữa các người dùng dựa trên việc đánh giá sản phẩm của họ. Qua đó, các sản phẩm mà một người dùng cụ thể có khả năng quan tâm được lấy từ sở thích của những người dùng gần giống họ sẽ được đề xuất.
Có hai loại hệ thống gợi ý dựa trên KNN: dựa trên người dùng (user-based) và dựa trên sản phẩm (item-based). Với hệ thống dựa trên người dùng, KNN sẽ tìm kiếm k người dùng gần tương đồng với người dùng cần xét và đề xuất những sản phẩm dựa trên sở thích của k người dùng đó. Với hệ thống dựa trên sản phẩm, KNN sẽ xác định K sản phẩm tương tự với những sản phẩm mà người dùng đó thích trước đó. Nhược điểm: Mặc dù đơn giản và hiệu quả nhưng KNN gặp vấn đề khi tiến hành mở rộng và tình trạng ma trận thưa.
Về khả năng mở rộng, theo đánh giá khách quanh thì thuật toán KNN là thuật toán lười biếng vì nó không tạo ra được mô hình dự đoán từ dữ liệu đã học trước đó mà lại tiến hành tìm k điểm dữ liệu tương đồng trong toàn bộ dữ liệu mỗi khi đưa ra dự đoán.