1. Trang chủ
  2. » Luận Văn - Báo Cáo

chương 19 xây dựng ứng dụng thông minh bằng thuật toán học máy

27 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

Nội dung

Microsoft đã tạo ra một thư viện học máy đa nền tảng có tên ML.NET, được thiết kế đặc biệt dành cho các nhà phát triển C# và .NET.Chương này sẽ đề cập đến các chủ đề sau: Hiểu về học má

Trang 1

Chương 19Xây dựng ứng dụng thôngminh bằng thuật toán học máy

Chương này hướng dẫn bạn tích hợp trí tuệ vào ứng dụng của mình bằng các thuật toán học máy Microsoft đã tạo ra một thư viện học máy đa nền tảng có tên ML.NET, được thiết kế đặc biệt dành cho các nhà phát triển C# và NET.

Chương này sẽ đề cập đến các chủ đề sau: Hiểu về học máy

 Hiểu về ML.NET Đưa ra đề xuất sản phẩm

Hiểu về học máy

Thường những người làm marketing thích sử dụng các thuật ngữ như trí tuệ nhân tạo (AI) hoặc khoa học dữ liệu trong tài liệu quảng cáo của họ Học máy là một nhánh của khoa học dữ liệu, là cách thực tế để thêm trí thông minh vào phần mềm.

Thông tin thêm: Bạn có thể học về khoa học đằng sau một trong những kỹ thuật khoa học dữ liệu phổ biến và thành công nhất bằng cách đăng ký khóa học Khoa học Dữ liệu: Học máy miễn phí 8 tuần của Đại học Harvard tạiliên kết sau: https://www.edx.org/course/data-science-machine-learning-2

Cuốn sách này không thể dạy học máy trong một chương Nếu bạn cần hiểu cách thức hoạt động bên trong của các thuật toán học máy, bạn sẽ cần nắm vững các chủ đề khoa học dữ liệu bao gồm vi tích phân, thống kê, lý thuyết xác suất và đại số tuyến tính Sau đó, bạn cần tìm hiểu sâu về học máy.

Mục tiêu của tôi với chương này là cung cấp cho bạn kiến thức khái niệm tối thiểu cần thiết để triển khai một ứng dụng học máy có giá trị và thực tiễn: đưa ra đề xuất sản phẩm trên trang web thương mại điện tử để tăng giá trị của mỗi đơn hàng Bằng cách xem tất cả các nhiệm vụ cần thiết, bạn có thể tự quyết định xem nỗ lực cần thiết để học đúng cách có xứng đáng với bạn hay không, hoặc liệu bạn có nên đầu tư vào các chủ đề khác như xây dựng trang web hoặc ứng dụng di động.

Hiểu về vòng đời của học máyVòng đời của học máy có bốn bước:

Phân tích vấn đề: Bạn đang cố gắng giải quyết vấn đề gì?

Trang 2

 Thu thập và xử lý dữ liệu: Dữ liệu thô cần thiết để giải quyết vấn đề thường cần được chuyển đổi thành các định dạng phù hợp để xử lý bằng thuật toán học máy.

 Mô hình được chia thành ba bước nhỏ:

o Xác định đặc điểm: Đặc điểm là các giá trị ảnh hưởng đến dự đoán, ví dụ nhưkhoảng cách di chuyển và thời gian trong ngày ảnh hưởng đến chi phí của chuyến đi taxi.

o Huấn luyện mô hình: Chọn và áp dụng thuật toán, đặt siêu tham số để tạo ra một hoặc nhiều mô hình Siêu tham số được đặt trước khi quá trình học bắt đầu, trái ngược với các tham số khác được suy ra trong quá trình huấn luyện.o Đánh giá mô hình: Chọn mô hình nào giải quyết tốt nhất vấn đề ban đầu

Đánh giá mô hình là một nhiệm vụ thủ công có thể mất hàng tháng.

 Triển khai mô hình: Tích hợp mô hình vào ứng dụng, nơi nó được sử dụng đểđưa ra dự đoán dựa trên đầu vào dữ liệu thực tế.

Nhưng ngay cả khi đã triển khai, công việc của bạn vẫn chưa hoàn thành!Sau khi triển khai mô hình, bạn nên thường xuyên đánh giá lại mô hình để duy trì hiệu quả của nó Theo thời gian, các dự đoán của nó có thể bị lệch và kém chính xác hơn vì dữ liệu có thể thay đổi theo thời gian.

Bạn không nên giả định mối quan hệ tĩnh giữa đầu vào và đầu ra, đặc biệt là khi dự đoán hành vi của con người, vì xu hướng thay đổi Chỉ vì phim siêu anh hùng phổ biến vào năm 2019 không có nghĩa là chúng sẽ phổ biến vào năm 2020 Vấn đề này được gọi là chuyển động khái niệm (concept drift) hoặc suy giảm mô hình (model decay) Nếu bạn nghi ngờ vấn đề này thì bạn nên huấn luyện lại mô hình hoặc thậm chí chuyển sang thuật toán hoặc giá trịsiêu tham số tốt hơn.

Quyết định sử dụng thuật toán nào và giá trị cho các siêu tham số của nó rất khó vì sự kết hợp giữa các thuật toán tiềm năng và giá trị siêu tham số là vô hạn Đây là lý do tại sao học máy và lĩnh vực khoa học dữ liệu rộng hơn của nó là một nghề chuyên môn toàn thời gian.

Hiểu về bộ dữ liệu để huấn luyện và kiểm tra

Bạn không được sử dụng toàn bộ bộ dữ liệu của mình để huấn luyện mô hình Bạn cần chia bộ dữ liệu của mình thành bộ dữ liệu huấn luyện và bộ dữ liệu kiểm tra Không ngạc nhiên, bộ dữ liệu huấn luyện được dùng để huấn luyện mô hình Sau đó, bộ dữ liệu kiểm tra được sử dụng để đánh giá xem mô hình có đưa ra dự đoán đủ tốt trước khi triển khai hay không Nếu bạn sử dụng toàn bộ bộ dữ liệu để huấn luyện, thì bạn sẽ không còn dữ liệu để kiểm tra mô hình của mình.

Việc chia tách giữa huấn luyện và kiểm tra có thể là ngẫu nhiên cho một số tình huống, nhưng hãy cẩn thận! Bạn phải xem xét liệu bộ dữ liệu có thể có những biến thể thông thường hay không Ví dụ, việc sử dụng taxi khác nhau tùy theo thời gian trong ngày, và thậm chí còn khác nhau tùy theo mùa và thành phố Ví dụ, New York City thường bận rộn với taxi cả năm, bất kể

Trang 3

giờ nào, nhưng Munich có thể trở nên đông đúc hơn với taxi trong thời gian Oktoberfest.

Khi bộ dữ liệu của bạn bị ảnh hưởng bởi tính theo mùa và các yếu tố khác, bạn phải chia tách bộ dữ liệu một cách chiến lược Bạn cũng cần đảm bảo rằng mô hình không bị quá khớp (overfit) với dữ liệu huấn luyện Hãy nói về một ví dụ về overfitting.

Khi tôi học Khoa học Máy tính tại Đại học Bristol từ năm 1990 đến năm 1993, chúng tôi được kể một câu chuyện trong lớp Mạng Nơ-ron (có thể là ngụy tạo, nhưng nó minh họa một điểm quan trọng) Quân đội Anh đã thuê các nhà khoa học dữ liệu để xây dựng một mô hình học máy để phát hiện xe tăng Nga ngụy trang trong rừng ở Đông Âu Mô hình được cung cấp hàng nghìn hình ảnh, nhưng khi đến lúc thể hiện khả năng trong thế giới thực, nó lại thất bại thảm hại.

Trong quá trình khám nghiệm dự án, các nhà khoa học nhận ra rằng tất cả hình ảnh họ sử dụng để huấn luyện mô hình đều từ mùa xuân khi tán lá cómàu xanh lá cây sống động, nhưng bài kiểm tra trực tiếp diễn ra vào mùa thu khi tán lá có màu đỏ, vàng và nâu Mô hình đã bị overfit với tán lá mùa xuân Nếu mô hình tổng quát hơn, thì nó có thể hoạt động tốt hơn trong các mùa khác Underfitting là ngược lại; nó mô tả một mô hình quá tổng quát và khôngcung cấp kết quả thỏa đáng khi áp dụng vào các ngữ cảnh cụ thể.

Hồi quy (Regression): Dự đoán các giá trị số từ dữ liệu đầu vào Được sử

dụng để dự báo, đề xuất giá bán sản phẩm, ước tính giá taxi từ sân bay Heathrow đến trung tâm London, hoặc dự đoán số lượng xe đạp cần thiết trong một khu vực cụ thể của Amsterdam cho chương trình chia sẻ xe đạp. Phát hiện anomalya (Anomaly detection): Xác định các điểm dữ liệu bất

thường có thể cho biết vấn đề cần khắc phục, hữu ích trong các lĩnh vực y tế, tài chính và bảo trì cơ khí.

Học sâu (Deep Learning): Xử lý dữ liệu nhị phân lớn và phức tạp thay vì dữ

liệu đầu vào có cấu trúc hơn, ví dụ như các tác vụ thị giác máy tính như phát hiện đối tượng và phân loại hình ảnh, hoặc các tác vụ xử lý ngôn ngữ tự nhiên như nhận dạng giọng nói và dịch văn bản.

Hiểu về Microsoft Azure Machine Learning và ML.NET: Các lựa chọn để triển khai học máy

Azure Machine Learning:

 Cung cấp các mô hình học máy được xây dựng sẵn cho các tác vụ thông thường như nhận dạng khuôn mặt và xử lý ngôn ngữ.

 Cho phép các tổ chức không có chuyên gia khoa học dữ liệu tận dụng dữ liệucủa họ mà không cần xây dựng mô hình tùy chỉnh.

 Cho phép tích hợp các mô hình tùy chỉnh do các nhà khoa học dữ liệu tạo ra khi chuyên môn của tổ chức phát triển.

 Thích hợp cho các tổ chức tìm kiếm một nền tảng với đường cong học tập nhẹ nhàng cho các nhà phát triển hiện có.

Trang 4

 Một khung học máy đa nền tảng, mã nguồn mở cho NET.

 Cho phép các nhà phát triển C# sử dụng các kỹ năng hiện có và quen thuộc với API NET Standard để tích hợp học máy tùy chỉnh trong ứng dụng của họ mà không cần biết chi tiết về cách xây dựng và duy trì mô hình học máy. Cung cấp các thư viện từ Microsoft Research và các thư viện phổ biến khác

như Accord.NET và TensorFlow.

 Cung cấp quy trình học tập gồm sáu bước: tải dữ liệu, chuyển đổi, huấn luyện, đánh giá và triển khai.

Infer.NET: Một lựa chọn khác cho các mô hình tùy chỉnh

 Được tạo bởi Microsoft Research, cho phép các nhà phát triển kết hợp kiến thức chuyên môn vào mô hình.

 Được sử dụng bởi các sản phẩm của Microsoft như Azure, Xbox và Bing search và dịch.

 Không được đề cập trong chương cụ thể này.

Thông tin thêm: Bạn có thể đọc thông báo chính thức về ML.NET tại liên kết sau: [[invalid URL removed]]([invalid URL removed])net-cross-platform-proven-and-open-source-machinelearning-framework/

Hiện nay, ML.NET chứa các thư viện học máy do Microsoft Research tạo ra và được sử dụng bởi các sản phẩm của Microsoft như PowerPoint để đề xuất các mẫu kiểu thông minh dựa trên nội dung của bản trình bày Sắp tới, ML.NET cũng sẽ hỗ trợ các thư viện phổ biến khác như Accord.NET, CNTK, Light GBM và TensorFlow, nhưng chúng tôi sẽ không đề cập đến chúng trongcuốn sách này.

Thông tin thêm: Accord.NET Framework là một framework học máy NET kết hợp với các thư viện xử lý âm thanh và hình ảnh được viết hoàn toàn bằng C# Bạn có thể đọc thêm tại liên kết sau: http://accord-framework.net

Hiểu về Infer.NET

Infer.NET được Microsoft Research ở Cambridge tạo ra vào năm 2004 Nó được cung cấp cho các học giả vào năm 2008 Kể từ đó, hàng trăm bài báo học thuật đã được viết về Infer.NET.

Trang 5

Thông tin thêm: Bạn có thể đọc thêm về Microsoft Infer.NET tại liên kết sau: https://www.microsoft.com/enus/research/blog/the-microsoft-infer-net-machinelearning-framework-goes-open-source/

Các nhà phát triển có thể kết hợp kiến thức chuyên môn vào mô hình để tạo các thuật toán tùy chỉnh thay vì ánh xạ vấn đề của bạn với các thuật toán hiện có như bạn sẽ làm với ML.NET.

Infer.NET được Microsoft sử dụng cho các sản phẩm bao gồm Microsoft Azure, Xbox và tìm kiếm và dịch Bing.

Infer.NET có thể được sử dụng để phân loại, đề xuất và cụm.Chúng tôi sẽ không xem xét Infer.NET trong cuốn sách này.

Thông tin thêm: Bạn có thể đọc cách tạo ứng dụng danh sách xếp hạng trò chơi với Infer.NET và lập trình xác suất tại liên kết sau: [[invalid URL removed]]([invalid URL removed])infer-net.

Hiểu về các pipeline học tập ML.NET

Một pipeline học tập điển hình bao gồm sáu bước:

• Tải dữ liệu - ML.NET hỗ trợ tải dữ liệu từ các định dạng sau: văn bản (CSV, TSV), Parquet, nhị phân, IEnumerable<T> và bộ tập tin.

• Chuyển đổi - ML.NET hỗ trợ các phép biến đổi sau: thao tác văn bản, sửa đổi lược đồ (tức là cấu trúc), xử lý các giá trị thiếu, mã hóa giá trị theo danh mục, chuẩn hóa và chọn tính năng.

• Thuật toán - ML.NET hỗ trợ các thuật toán sau: tuyến tính, cây được tăng cường, k-means, Hỗ trợ vectơ máy (SVM) và perceptron trung bình.• Huấn luyện mô hình - Gọi phương thức Train của ML.NET để tạo PredictionModel mà bạn có thể sử dụng để đưa ra dự đoán.

• Đánh giá mô hình - ML.NET hỗ trợ nhiều bộ đánh giá để đánh giá độ chính xác của mô hình của bạn theo các số liệu khác nhau.

• Triển khai mô hình - ML.NET cho phép bạn xuất mô hình dưới dạng tệp nhị phân để triển khai với bất kỳ loại ứng dụng NET nào.

Thông tin thêm: Ứng dụng "Hello World" truyền thống cho học máy là ứngdụng có thể dự đoán loại hoa diên vĩ dựa trên bốn đặc điểm: chiều dài cánh hoa, chiều rộng cánh hoa, chiều dài đài hoa và chiều rộng đài hoa Bạn có thểtheo dõi hướng dẫn 10 phút cho nó tại liên kết sau: [[invalid URL removed]]([invalid URL removed])

Hiểu về các khái niệm huấn luyện mô hình

Trang 6

Hệ thống kiểu NET không được thiết kế cho học máy và phân tích dữ liệu, vì vậy nó cần một số kiểu chuyên biệt để phù hợp hơn với các tác vụ này.

ML.NET sử dụng các kiểu NET sau khi làm việc với mô hình:

• Giao diện IDataView:

 Biểu diễn một tập dữ liệu:

o Không thay đổi, nghĩa là nó không thể thay đổi.

o Có thể di chuột, nghĩa là con trỏ có thể lặp lại trên dữ liệu.

o Được đánh giá một cách lười biếng, nghĩa là công việc như chuyển đổi chỉ được thực hiện khi con trỏ lặp lại trên dữ liệu.

o Không đồng nhất, nghĩa là dữ liệu có thể có các kiểu hỗn hợp.o Được lược đồ, nghĩa là nó có một cấu trúc được xác định rõ ràng.

• DataViewType: Tất cả các kiểu cột IDataView đều bắt nguồn từ lớp trừu

tượng DataViewType Kiểu vector yêu cầu thông tin về kích thước để chỉ ra độ dài của kiểu vector.

• Giao diện ITransformer:

 Biểu diễn một thành phần chấp nhận dữ liệu đầu vào, thay đổi nó theo một cách nào đó và trả về dữ liệu đầu ra Ví dụ, một bộ chuyển đổi phân tách từ ngữ lấy một cột văn bản chứa các cụm từ làm đầu vào và xuất ra một cột vector với các từ riêng lẻ được trích xuất từ các cụm từ và được sắp xếp theochiều dọc trong một cột Hầu hết các bộ chuyển đổi hoạt động trên một cột tạimột thời điểm Bộ chuyển đổi mới có thể được xây dựng bằng cách kết hợp các bộ chuyển đổi khác trong một chuỗi.

• Giao diện IDataReader<T>:

 Biểu diễn một thành phần để tạo dữ liệu Nó lấy một thể hiện của T và trả về dữ liệu từ nó.

• Giao diện IEstimator<T>:

 Biểu diễn một đối tượng học hỏi từ dữ liệu Kết quả của việc học là một bộ chuyển đổi Ước lượng là háo hức, nghĩa là mọi cuộc gọi đến phương thức Fit của chúng đều khiến việc học xảy ra, điều này có thể mất nhiều thời gian!

• Lớp PredictionEngine<TSrc, TDst>:

 Biểu diễn một hàm có thể được coi như một máy áp dụng bộ chuyển đổi cho một hàng tại thời điểm dự đoán Nếu bạn có nhiều dữ liệu đầu vào mà bạn muốn đưa ra dự đoán, bạn sẽ tạo một chế độ xem dữ liệu, gọi Transform trênmô hình để tạo các hàng dự đoán,然后使用光标读取结果。 Trong thế giới thực, một kịch bản thông thường là có một hàng dữ liệu làm đầu vào mà bạn

Trang 7

muốn đưa ra dự đoán, vì vậy để đơn giản hóa quá trình, bạn có thể sử dụng công cụ dự đoán.

Hiểu các giá trị thiếu và các kiểu key

Ngôn ngữ R phổ biến cho học máy và nó sử dụng giá trị đặc biệt NA để biểu thị một giá trị thiếu ML.NET tuân theo quy ước đó.

Các kiểu key được sử dụng cho dữ liệu được biểu diễn dưới dạng giá trị số trong một tập hợp số lượng, như được hiển thị trong đoạn mã sau:

[KeyType(10)]public uint NumberInRange1To10 { get; set; }

Kiểu biểu diễn, còn được gọi là kiểu nền, phải là một trong bốn kiểu số nguyên không dấu của NET: byte, ushort, uint và ulong Giá trị bằng không luôn có nghĩa là NA, cho biết giá trị của nó bị thiếu Giá trị biểu diễn một luôn là giá trị hợp lệ đầu tiên của kiểu key.

Số lượng nên được đặt thành nhiều hơn một so với giá trị tối đa để tính đến việc đếm bắt đầu từ 1, vì 0 được dành riêng cho các giá trị thiếu Ví dụ, số lượng của phạm vi 0-9 phải là 10 Bất kỳ giá trị nào nằm ngoài số lượng được chỉ định sẽ được ánh xạ sang biểu diễn giá trị thiếu: 0.

Hiểu các features và labels

Các đầu vào của mô hình học máy được gọi là features (tính năng) Ví dụ, nếu có hồi quy tuyến tính, trong đó một lượng liên tục, giống như giá của một chai rượu, tỉ lệ thuận với một lượng khác, giống như xếp hạng do các nhà sản xuất rượu vang đưa ra, thì giá là features duy nhất.

Các giá trị được sử dụng để huấn luyện mô hình học máy được gọi là labels (nhãn) Trong ví dụ về rượu vang, các giá trị xếp hạng trong tập dữ liệuhuấn luyện là các nhãn.

Trong một số mô hình, giá trị nhãn không quan trọng, vì sự tồn tại của một hàng biểu thị một sự khớp Điều này đặc biệt phổ biến trong các đề xuất.**Xây dựng các ứng dụng thông minh bằng cách sử

Xây dựng đề xuất sản phẩm

Ứng dụng thực tế của học máy mà chúng tôi sẽ triển khai là đưa ra đề xuất sản phẩm trên trang web thương mại điện tử với mục tiêu là tăng giá trị đơn hàng của khách hàng.

Vấn đề là làm thế nào để quyết định nên đề xuất sản phẩm nào cho khách truy cập.

Phân tích vấn đề

Trang 8

Vào ngày 2 tháng 10 năm 2006, Netflix bắt đầu một cuộc thi thử thách giải thưởng mở cho thuật toán tốt nhất để dự đoán xếp hạng khách hàng cho phim chỉ dựa trên xếp hạng trước đó Bộ dữ liệu mà Netflix cung cấp có 17.000 phim, 500.000 người dùng và 100 triệu xếp hạng Ví dụ, người dùng 437822 cho phim 12934 xếp hạng 4 trên 5.

Phân tích giá trị kỳ dị (SVD) là một phương pháp phân tích để giảm một ma trận nhằm đơn giản hóa các tính toán sau này và Simon Funk đã chia sẻ với cộng đồng cách anh và nhóm của mình sử dụng nó để đạt được thứ hạnggần đầu trong cuộc thi.

Để tìm hiểu thêm về việc sử dụng SVD của Simon Funk, bạn có thể tham khảo liên kết sau: [[invalid URL removed]]([invalid URL removed])

Kể từ công việc ban đầu của Funk, các cách tiếp cận tương tự đã được đề xuất cho các hệ thống đề xuất Phân tích ma trận là một lớp thuật toán lọc cộng tác được sử dụng trong các hệ thống đề xuất sử dụng SVD.

Để tìm hiểu thêm về việc sử dụng phân tích ma trận trong các hệ thống đề xuất, bạn có thể tham khảo liên kết sau: [[invalid URL removed]]([invalid URL removed]))

Chúng tôi sẽ sử dụng thuật toán Phân tích ma trận một lớp vì chúng tôi chỉ có thông tin về lịch sử đơn hàng mua Các sản phẩm chưa được xếp hạng hoặc các yếu tố khác có thể được sử dụng trong các cách tiếp cận phântích đa lớp khác.

Điểm số do phân tích ma trận tạo ra cho chúng tôi biết khả năng là một trường hợp tích cực Giá trị điểm càng lớn thì xác suất càng cao Điểm khôngphải là một xác suất, vì vậy khi đưa ra dự đoán, chúng ta phải dự đoán nhiều điểm mua hàng chung của sản phẩm và sắp xếp với điểm cao nhất ở trên cùng.

Phân tích ma trận sử dụng phương pháp lọc cộng tác có giám sát, giả định rằng nếu Alice có cùng quan điểm với Bob về một sản phẩm, thì Alice cónhiều khả năng có ý kiến của Bob về một sản phẩm khác hơn so với người khác ngẫu nhiên Do đó, họ có nhiều khả năng thêm sản phẩm mà Bob thích vào giỏ hàng của mình hơn.

Thu thập và xử lý dữ liệu

Cơ sở dữ liệu mẫu Northwind có các bảng sau:

• Products có 77 hàng, mỗi hàng có một ID sản phẩm dạng số nguyên • Orders có 830 hàng, mỗi đơn hàng có một hoặc nhiều hàng chi tiết liên quan • Order Details có 2.155 hàng, mỗi hàng có một ID sản phẩm dạng số nguyêncho biết sản phẩm đã được đặt hàng.

Chúng tôi có thể sử dụng dữ liệu này để tạo các tập dữ liệu cho các mô hình đào tạo và thử nghiệm, sau đó có thể đưa ra dự đoán về các sản phẩm

Trang 9

khác mà khách hàng có thể muốn thêm vào giỏ hàng của họ dựa trên những gì họ đã thêm vào giỏ hàng.

Ví dụ, đơn hàng 10248 được đặt bởi khách hàng VINET cho ba sản phẩm có ID là 11, 42 và 72, như được hiển thị trong ảnh chụp màn hình sau:

Chúng tôi sẽ viết một truy vấn LINQ để liên kết chéo dữ liệu này để tạo một tệp văn bản đơn giản với hai cột hiển thị các sản phẩm được mua cùng nhau,như được hiển thị trong đầu ra sau:

ProductID CoboughtProductID

11 42 11 72 42 11 42 72 72 11 72 42

Xây dựng đề xuất sản phẩm (tiếp theo)

Không may, cơ sở dữ liệu Northwind khớp gần như mọi sản phẩm với mọi sản phẩm khác Để tạo ra các tập dữ liệu thực tế hơn, chúng tôi sẽ lọc theo quốc gia Chúng tôi sẽ tạo một tập dữ liệu cho Đức, một cho Vương quốc Anh và một cho Hoa Kỳ Tập dữ liệu của Hoa Kỳ sẽ được sử dụng để thử nghiệm.

Tạo dự án website NorthwindML

Trang 10

Chúng tôi sẽ xây dựng một website ASP.NET Core MVC hiển thị danh sách tất cả các sản phẩm, được nhóm theo danh mục và cho phép khách truycập thêm sản phẩm vào giỏ hàng Giỏ hàng của họ sẽ được lưu trữ trong cookie tạm thời dưới dạng danh sách các ID sản phẩm được phân cách bằngdấu gạch ngang.

1 Trong thư mục có tên PracticalApps, tạo một thư mục có tên NorthwindML.

2 Trong Visual Studio Code, mở không gian làm việc PracticalApps và thêm thưmục NorthwindML vào không gian làm việc.

3 Điều hướng đến Terminal | New Terminal và chọn NorthwindML.

4 Trong Terminal, nhập lệnh sau để tạo một dự án ASP.NET Core MVC mới, như được hiển thị trong lệnh sau:

dotnet new mvc

1 Mở tệp dự án NorthwindML.csproj, thêm tham chiếu vào các gói SQLite, ML.NET và ML.NET Recommender, cũng như các dự án thư viện ngữ cảnh và lớp thực thể Northwind mà bạn đã tạo trong Chương 14, Ứng dụng thực tế của C# và NET, như được đánh dấu nổi bật trong đánh dấu sau:

<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup>

<TargetFramework>netcoreapp3.0</TargetFramework> </PropertyGroup>

<ItemGroup>

<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.0.0" />

<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0" />

<PackageReference Include="Microsoft.ML" Version="1.3.1" /> <PackageReference Include="Microsoft.ML.Recommender" Version="0.15.1" />

</ItemGroup> <ItemGroup>

<ProjectReference Include=" \NorthwindContextLib\NorthwindContextLib.csproj" />

<ProjectReference Include=" \NorthwindEmployees\NorthwindEmployees.csproj" />

</ItemGroup></Project>

Trang 11

Trong Terminal, khôi phục các gói và biên dịch dự án, như được hiển thị trong lệnh sau:

Tạo dữ liệu và mô hình xem

Dự án NorthwindML sẽ mô phỏng một trang web thương mại điện tử cho phép khách truy cập thêm các sản phẩm họ muốn đặt hàng vào giỏ hàng Chúng tôi sẽ bắt đầu bằng cách định nghĩa một số mô hình để đại diện cho việc này.

1.Trong thư mục Models, tạo một tệp lớp có tên CartItem.cs và thêm cáccâu lệnh để định nghĩa một lớp với các thuộc tính cho ID và tên của sản phẩm, như được hiển thị trong đoạn mã sau:

namespace NorthwindML.Models{

public class CartItem {

public int ProductID { get; set; } public string ProductName { get; set; } }

2 Trong thư mục Models, tạo một tệp lớp có tên Cart.cs và thêm các câu lệnh để định nghĩa một lớp với các thuộc tính cho các mặt hàng trong giỏ hàng, như được hiển thị trong đoạn mã sau:

using System.Collections.Generic;namespace NorthwindML.Models{

public class Cart {

Trang 12

public IEnumerable<CartItem> Items { get; set; } }

3 Trong thư mục Models, tạo một tệp lớp có tên ProductCobought.cs vàthêm các câu lệnh để định nghĩa một lớp với các thuộc tính được sử dụng để ghi lại khi một sản phẩm được mua cùng với một sản phẩm khác và số lượng (hay còn gọi là giá trị tối đa có thể) của thuộc tính ProductID, như được hiển thị trong đoạn mã sau:

using Microsoft.ML.Data;namespace NorthwindML.Models{

public class ProductCobought {

[KeyType(77)] // giá trị tối đa có thể của ProductID public uint ProductID { get; set; }

namespace NorthwindML.Models{

public class Recommendation {

public uint CoboughtProductID { get; set; } public float Score { get; set; }

}}

Trang 13

5 Trong thư mục Models, tạo một tệp lớp có tên

EnrichedRecommendation.cs và thêm các câu lệnh để kế thừa từ lớp Recommendation với một thuộc tính bổ sung để hiển thị tên sản phẩm để hiển thị, như được hiển thị trong đoạn mã sau:

namespace NorthwindML.Models{

public class EnrichedRecommendation : Recommendation {

public string ProductName { get; set; } }

6 Trong Terminal, biên dịch dự án, như được hiển thị trong lệnh sau:

dotnet build

7 Trong thư mục Models, tạo một tệp lớp có tên

HomeCartViewModel.cs và thêm các câu lệnh để định nghĩa một lớp với các thuộc tính để lưu trữ giỏ hàng của khách truy cập và danh sách các đề xuất, như được hiển thị trong đoạn mã sau:

using System.Collections.Generic;namespace NorthwindML.Models{

public class HomeCartViewModel {

public Cart Cart { get; set; }

public List<EnrichedRecommendation> Recommendations { get; set; } }

8 Trong thư mục Models, tạo một tệp lớp có tên

HomeIndexViewModel.cs và thêm các câu lệnh để định nghĩa một lớp với các thuộc tính để hiển thị xem các tập dữ liệu đào tạo đã được tạo hay chưa, như được hiển thị trong đoạn mã sau:

using System.Collections.Generic;using Packt.Shared;namespace NorthwindML.Models

{

Ngày đăng: 19/05/2024, 21:41

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

TÀI LIỆU LIÊN QUAN

w