Báo cáo Đồ án Lập trình TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG □□□□ BÁO CÁO ĐỒ ÁN LẬP TRÌNH Đề tài Lập trình Python và Xây dựng Cấu trúc dữ liệu và Giải thuật với Py.
Báo cáo Đồ án Lập trình TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG -□□&□□ - BÁO CÁO ĐỒ ÁN LẬP TRÌNH Đề tài: Lập trình Python Xây dựng Cấu trúc liệu Giải thuật với Python Tìm hiểu Machine Learning Giảng viên hướng dẫn: PGS.TS Đỗ Phan Thuận Mơn học: Đồ án lập trình – IT3914 Viện: Công nghệ thông tin truyền thông Sinh viên thực Đỗ Trường Thịnh – 20193124 HÀ NỘI, tháng 8, năm 2022 Báo cáo Đồ án Lập trình Nội dung LỜI MỞ ĐẦU CHƯƠNG TỔNG QUAN VỀ PYTHON 1.1 Giới thiệu 1.2 Một số khái niệm Python 1.3 1.4 1.5 1.2.1 Comment 1.2.2 Biến .6 1.2.3 Đầu vào .6 1.2.4 Các toán tử Cấu trúc liệu Python 1.3.1 Một số kiểu liệu 1.3.2 Cấu trúc điều khiển 1.3.3 Các cấu trúc liệu Một số thư viện Python 1.4.1 NumPy 1.4.2 SciPy 1.4.3 Pandas 1.4.4 Scikit-learn 10 1.4.5 Matplotlib 10 Hàm Python 10 CHƯƠNG 2: XÂY DỰNG CÁC CTDL> VỚI PYTHON 12 2.1 2.2 Cấu trúc liệu giải thuật 12 2.1.1 Mảng 12 2.1.2 Ngăn xếp 12 2.1.3 Hàng đợi 14 2.1.4 Danh sách liên kết đơn 15 2.1.5 Giải thuật tìm kiếm 19 2.1.6 Giải thuật xếp 23 2.1.7 Cấu trúc liệu .26 Giải thuật nâng cao .30 2.2.1 Thuật toán tham lam 30 2.2.2 Thuật toán quay lui 32 2.2.3 Thuật tốn Quy hoạch đợng 34 Báo cáo Đồ án Lập trình 2.2.4 Thuật toán Chia để trị 36 2.2.5 Thuật toán BFS DFS đồ thị 37 CHƯƠNG 3: TÌM HIỂU VỀ MACHINE LEARNING 42 3.1 Giới thiệu Machine Learning 42 3.2 Dữ liệu Machine Learning 43 3.2.1 Làm việc với file csv 43 3.2.2 Hình dung liệu .44 3.2.3 Chuyển đổi liệu .45 KẾT LUẬN 49 DANH MỤC THAM KHẢO 50 Báo cáo Đồ án Lập trình LỜI MỞ ĐẦU Ngày sống 4.0 gần thiếu khái niệm liên quan đến công nghệ thông tin, từ phương tiện truyền thông, xã hội lĩnh vực kinh doanh, quản lý… Mọi thứ cần phần mềm sản phẩm công nghệ thông tin đễ hỗ trợ giúp nâng cao phát triển vững mạnh hơn.Ví dụ lĩnh vực kinh doanh bn bán hàng hóa theo cách truyền thống cịn tồn nhiều nhược điểm thống kê chi tiết chưa xác, quy trình tốn chưa chặt chẽ nhanh chóng Cùng với phát triển nhiều ngơn ngữ lập trình web PHP, Ruby, Scheme Python tên đáng ý Hiện ngôn ngữ Python xếp hạng thứ Top 10 ngơn ngữ lập trình phổ biến giới sử dụng Python ngôn ngữ có hình thái sáng sủa, cấu trúc rõ ràng, thuận tiện cho người bắt đầu học lập trình Cấu trúc Python cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu Python ngơn ngữ lập trình đơn giản lại hiệu Bên cạnh đó, Python ngơn ngữ có tính hướng đối tượng cao Với ngơn ngữ lập trình python ngơn ngữ lập trình đa với nhiều ưu điểm vượt trội, đứng vị trí số top ngơn ngữ lập trình Trong báo cáo này, em trình bày kiến thức em tìm hiểu học kỳ vừa qua ngơn ngữ lập trình Python Học máy Bài báo cáo tổ chức sau: CHƯƠNG 1: TỔNG QUAN VỀ PYTHON Chương nghiên cứu tìm hiểu ngơn ngữ lập trình Python gồm khái niệm, cấu trúc liệu, số thư viện phổ biến CHƯƠNG 2: XÂY DỰNG CÁC CTDL> VỚI PYTHON Chương xây dựng lại số giải thuật nâng cao với ngơn ngữ lập trình Python CHƯƠNG 3: TÌM HIỂU VỀ MACHINE LEARNING Chương nghiên cứu tìm hiểu khái niệm tổng quan Học máy Báo cáo Đồ án Lập trình CHƯƠNG TỔNG QUAN VỀ PYTHON 1.1 Giới thiệu Lịch sử hình thành Python hình thành vào cuối năm 1980 bắt đầu thực vào tháng 12/1989 Guido van Rossum CWI Hà Lan người kế thừa ngơn ngữ ABC (tự lấy cảm hứng từ SETL) có khả xử lý ngoại lệ giao tiếp với hệ điều hành Amoeba Van Rossum tác giả Python, vai trị trung tâm ơng tiếp tục việc định hướng phát triển Python phản ánh tiêu đề mà cộng đồng Python dành cho ông “Độc tài nhân từ cho sống” (benevolent dictator for life)(BDFL) Python phát hành vào ngày 16/10/2000, với nhiều tính bao gồm dọn rác đầy đủ hỗ trợ Unicode Với phiên này, trình phát triển thay đổi trở thành minh bạch cộng đồng ủng hộ Python (còn gọi Python 3000 Py3k), phát hành lớn, khơng tương thích ngược, phát hành vào ngày 03/12/2008 sau thời gian dài thử nghiệm Nhiều số tính điều chỉnh để tương thích ngược với Python Các tính triết lý phát triển Python ngơn ngữ lập trình đa hình: lập trình hướng đối tượng hướng cấu trúc hỗ trợ đầy đủ, có số tính ngơn ngữ hỗ trợ lập trình theo chức lập trình hướng khía cạnh (Aspect-oriented programming) Nhiều mơ hình khác hỗ trợ việc sử dụng phần mở rộng, bao gồm thiết kế theo hợp đồng (design by contract) lập trình luận lý Các trang Mozilla, Reddit, Instagram PBS viết Python Ngơn ngữ lập trình Python dùng vào mục đích: Phát triển web (trên máy chủ) Phát triển phần mềm 17 Tính tốn cách khoa học Lên kịch cho hệ thống Python hỗ trợ hàm, thủ tục, hay kể lập trình hướng đối tượng Để viết mã nguồn Python, ta sử dụng trình soạn thảo nào, kể trình soạn thảo đơn giản NotePad Tuy nhiên, để phát triển ứng Báo cáo Đồ án Lập trình dụng cách hiệu hơn, ta nên sử dụng IDE, để tiết kiệm thời gian công sức viết code 1.2 Một số khái niệm Python 1.2.1 Comment Comment hay cịn gọi thích dùng để giải thích dịng code, giúp cho người đọc hay người viết code sau hiểu source code dễ dàng Các ký tự đoạn code comment khơng ảnh hưởng tới kết chương trình Trong Python có loại comment comment dòng comment nhiều dòng Comment dòng: Comment dòng bắt đầu với ký tự # Comment nhiều dòng: Comment nhiều dòng ngơn ngữ lập trình Python bắt đầu dấu nháy đơn (''') dấu nháy kép (""") kết thúc dấu nháy đơn (''') dấu nháy kép (""") 1.2.2 Biến Khái niệm biến lập trình giống khái niệm biến toán học, biến sử dụng để lưu trữ liệu chương trình Dữ liệu lưu trữ biến thay đổi chạy chương trình 1.2.3 Đầu vào Để nhập liệu đầu vào, ta dùng hàm input() Ví dụ: # Nhập liệu cho biến name từ bàn phím name = input() print("Hello " + name) Khi nhập liệu cho biến từ bàn phím kiểu liệu biến ln str (kể bạn có nhập giá trị số cho biến đó) Vì muốn kiểu liệu nhập vào dạng khác int, float,… cần ép kiểu cho đầu vào Ví dụ ép kiểu với kiểu liệu int: age = int(input()) 1.2.4 Các toán tử Báo cáo Đồ án Lập trình Python xây dựng loại hình tính tốn tốn tử sau: Python Arithmetic Operator (toán tử số học): +, -, *, /, **, //, % Python Relational Operator (toán tử quan hệ): >, =, 0, -> 2, -> 2, -> 1, -> 3, -> Output: DFS từ đỉnh 2: Giải thích: Sơ đồ DFS: from collections import defaultdict # This class represents a directed graph using adjacency list representation class Graph: # Constructor def init (self): # default dictionary to store graph self.graph = defaultdict(list) # function to add an edge to graph def addEdge(self, u, v): self.graph[u].append(v) # A function used by DFS def DFSUtil(self, v, visited): # Mark the current node as visited and print it visited.add(v) print(v, end=' ') # Recur for all the vertices adjacent to this vertex 41 Báo cáo Đồ án Lập trình for neighbour in self.graph[v]: if neighbour not in visited: self.DFSUtil(neighbour, visited) # The function to DFS traversal It uses recursive DFSUtil() def DFS(self, v): # Create a set to store visited vertices visited = set() # Call the recursive helper function to print DFS traversal self.DFSUtil(v, visited) # Driver code # Create a graph given in the above diagram g = Graph() g.addEdge(0, 1) g.addEdge(0, 2) g.addEdge(1, 2) g.addEdge(2, 0) g.addEdge(2, 3) g.addEdge(3, 3) print("Following is DFS from (starting from vertex 2)") g.DFS(2) 42 Báo cáo Đồ án Lập trình CHƯƠNG 3: TÌM HIỂU VỀ MACHINE LEARNING 3.1 Giới thiệu Machine Learning Machine learning lĩnh vực trí tuệ nhân tạo (AI) Mục tiêu machine learning nói chung hiểu cấu trúc liệu điều chỉnh liệu thành model mà người hiểu sử dụng Mặc dù machine learning lĩnh vực khoa học máy tính, khác với phương pháp tính tốn truyền thống Trong tính tốn truyền thống, thuật tốn tập hợp hướng dẫn lập trình rõ ràng sử dụng máy tính để tính tốn giải vấn đề Thay vào đó, thuật tốn machine learning cho phép máy tính đào tạo liệu đầu vào sử dụng phân tích thống kê để đưa giá trị nằm phạm vi cụ thể Do đó, machine learning tạo điều kiện cho máy tính xây dựng model từ liệu mẫu để tự động hóa quy trình định dựa liệu đầu vào Có hai cách phổ biến phân nhóm thuật tốn Học máy Một dựa phương thức học (learning style), hai dựa chức (function) (của thuật toán) a Theo phương thức học, thuật toán Machine Learning thường chia làm nhóm: Supervised learning, Unsupervised learning, Semi-supervised learning Reinforcement learning Có số cách phân nhóm khơng có Semi-supervised learning Reinforcement learning - Supervised learning thuật toán dự đoán đầu (outcome) liệu (new input) dựa cặp (input, outcome) biết từ trước Cặp liệu gọi (data, label), tức (dữ liệu, nhãn) Supervised learning nhóm phổ biến thuật tốn Machine Learning - Trong thuật tốn Unsupervised learning, khơng biết outcome hay nhãn mà có liệu đầu vào Thuật toán unsupervised learning dựa vào cấu trúc liệu để thực công việc đó, ví dụ phân nhóm (clustering) giảm số chiều liệu (dimension reduction) để thuận tiện việc lưu trữ tính tốn - Các tốn có lượng lớn liệu X phần chúng gán nhãn gọi Semi-Supervised Learning Những tốn thuộc nhóm nằm hai nhóm nêu bên - Reinforcement learning toán giúp cho hệ thống tự động xác định hành vi dựa hoàn cảnh để đạt lợi ích cao (maximizing 43 Báo cáo Đồ án Lập trình the performance) Hiện tại, Reinforcement learning chủ yếu áp dụng vào Lý Thuyết Trò Chơi (Game Theory), thuật toán cần xác định nước để đạt điểm số cao b Phân nhóm dựa chức thuật toán - Regression Algorithms - Classification Algorithms - Clustering Algorithms - Instance-based Algorithms,… 3.2 Dữ liệu Machine Learning 3.2.1 Làm việc với file csv Trong báo cáo này, liệu sử dụng việc minh họa thuật tốn dạng file csv Vì vậy, báo cáo cách làm việc với file có định dạng csv bước tiền xử lý liệu áp dụng thuật toán Học máy a Đọc file csv với Standard Library Python cung cấp CSV mô-đun trình đọc hàm reader () sử dụng để tải tệp CSV Sau tải, chuyển đổi liệu CSV sang mảng NumPy sử dụng để học máy Ví dụ, b Đọc file csv với Numpy Có thể tải liệu CSV NumPy hàm numpy.loadtxt () Hàm giả định khơng có hàng tiêu đề tất liệu có định dạng Ví dụ, 44 Báo cáo Đồ án Lập trình c Đọc file csv với Pandas Có thể tải liệu CSV cách sử dụng Pandas hàm pandas.read_csv () Chức linh hoạt có lẽ cách tiếp cận khuyến nghị báo cáo để tải liệu máy học Hàm trả pandas.DataFrame mà bạn bắt đầu tóm tắt vẽ biểu đồ Ví dụ, Ngồi ra, người dùng sửa đổi để tải liệu CSV trực tiếp từ URL Ví dụ, 3.2.2 Hình dung liệu Người dùng phải hiểu liệu để có kết tốt từ thuật tốn máy học Cách nhanh để tìm hiểu thêm liệu sử dụng trực quan hóa liệu Trong phần này, báo cáo cách chúng hình dung liệu học máy Python Pandas 45 Báo cáo Đồ án Lập trình Univariate Plot: Histograms Density Plots Box and Whisker Plots Multivariate Plots: Correlation Matrix Plot Scatter Plot Matrix Ví dụ Histograms, 3.2.3 Chuyển đổi liệu Chúng ta cần xử lý trước liệu bước bắt buộc Một khó khăn thuật tốn khác đưa giả định khác liệu yêu cầu phép chuyển đổi Hơn nữa, chúng tuân theo tất quy tắc chuẩn bị liệu, thuật tốn mang lại kết tốt mà khơng cần xử lý trước Nói chung, người dùng khuyên nên tạo nhiều chế độ xem chuyển đổi liệu khác nhau, sau thực số thuật toán chế độ xem tập liệu 46 Báo cáo Đồ án Lập trình Trong báo cáo này, làm việc với công thức xử lý preprocessing khác cho máy học Rescale Data Standardize Data Normalize Data a Rescale Data Khi tập liệu bao gồm thuộc tính với tỷ lệ khác nhau, nhiều thuật tốn học máy cho kết tốt từ việc thay đổi tỷ lệ thuộc tính để tất thuộc tính có tỷ lệ, thường thuộc phạm vi từ đến Đây việc hữu ích cho thuật tốn tối ưu hóa sử dụng thuật toán học máy gradient descent Chúng ta định lại liệu sử dụng scikit-learning MinMaxScaler class Scaled value = (value – min) / (max – min) Ví dụ, b Standardize Data Standardization kỹ thuật hữu ích để biến đổi thuộc tính với phân phối Gaussian với giá trị trung bình độ lệch chuẩn khác so với phân phối Gaussian chuẩn với giá trị trung bình độ lệch chuẩn Nó phù hợp cho kỹ thuật giả định phân phối Gaussian biến đầu vào hoạt 47 Báo cáo Đồ án Lập trình động tốt với liệu thay đổi tỷ lệ, chẳng hạn hồi quy tuyến tính, hồi quy logistic Bạn chuẩn hóa liệu cách sử dụng scikit-learning với class StandardScaler standardized valuei = (valuei – mean) / stdev stdev = (P(i=1,n) (valuei − mean)2 / (count(values) – 1))1/2 Ví dụ, c Normalize Data Normalizing scikit-learning đề cập đến việc thay đổi tỷ lệ quan sát (hàng) để có độ dài (được gọi chuẩn đơn vị vectơ có độ dài đại số tuyến tính) Phương pháp tiền xử lý hữu ích cho tập liệu thưa thớt (nhiều số 0) với thuộc tính tỷ lệ khác sử dụng thuật toán coi trọng giá trị đầu vào chẳng hạn mạng nơ-ron thuật toán sử dụng khoảng cách biện pháp k-Nearest Neighbors Chúng ta chuẩn hóa liệu Python với scikit-learning sử dụng class Normalizer Ví dụ, 48 Báo cáo Đồ án Lập trình 49 Báo cáo Đồ án Lập trình KẾT LUẬN Sau thời gian thực đề tài “Lập trình Python xây dựng Cấu trúc liệu Giải thuật với Python Tìm hiểu Machine Learning.”, em tổng hợp lại kiến thức tìm hiểu qua Báo cáo Đồ án Lập trình Tuy cịn số phần chưa hồn chỉnh đồ án đạt số kết Những kết đạt đồ án: - Tìm hiểu ngôn ngữ Python - Xây dựng lại Cấu trúc liệu Giải thuật nâng cao với Python - Tìm hiểu tổng quan Machine Learning Tuy nhiên q trình thực cịn số điều cần bổ sung như: - Chưa hiểu sâu Machine Learning - Chưa đưa ví dụ toán Machine Learning giải chúng Trong thời gian tiếp theo, em cố gắng để ngày hồn thiện, trau dồi kĩ lập trình trở nên tốt hơn, tìm hiểu sâu phương pháp học máy để thực giải toán Học máy nâng cao Em xin chân thành cảm ơn! 50 Báo cáo Đồ án Lập trình DANH MỤC THAM KHẢO [1] “Google Machine Learning Education “ [https://developers.google.com/machine-learning] [2] “Python fundamentals”, “Data Structure and Algorithms”, “Advanced algorithms” [https://codelearn.io/] [3] “ Giới thiệu Machine Learning” [https://machinelearningcoban.com/] [4] https://pythonwife.com/ [5] “Supervised Machine Learning: Regression and Classification” [https://www.coursera.org/] 51 ... scikit-learning sử dụng class Normalizer Ví dụ, 48 Báo cáo Đồ án Lập trình 49 Báo cáo Đồ án Lập trình KẾT LUẬN Sau thời gian thực đề tài ? ?Lập trình Python xây dựng Cấu trúc liệu Giải thuật với... tục, hay kể lập trình hướng đối tượng Để viết mã nguồn Python, ta sử dụng trình soạn thảo nào, kể trình soạn thảo đơn giản NotePad Tuy nhiên, để phát triển ứng Báo cáo Đồ án Lập trình dụng cách... Learning.”, em tổng hợp lại kiến thức tìm hiểu qua Báo cáo Đồ án Lập trình Tuy cịn số phần chưa hoàn chỉnh đồ án đạt số kết Những kết đạt đồ án: - Tìm hiểu ngơn ngữ Python - Xây dựng lại Cấu trúc