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 1Chương 19 Xây dựng ứng dụng thông minh 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:
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-2Cuố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áy
Vò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 3giờ 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 5Thô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 6Hệ 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ên
mô 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 7muố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 8Và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 9khá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:
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 10Chú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:
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0" />
<PackageReference Include="Microsoft.ML" Version="1.3.1" />
Trang 11Trong 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ác câ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 12public 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 135 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:
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
{