Các công ty lớn như Google, Facebook, Amazon, Apple, Microsoft và nhiều công ty khác đang sử dụng trí tuệ nhân tạo để cải thiện dịch vụ của họ và tạo ra giá trị cho khách hàng.Trong lĩnh
Giới thiệu
Trong thời đại số hóa, sự phát triển của công nghệ thông tin và truyền thông đã góp phần tạo ra một lượng lớn dữ liệu Các lĩnh vực nghiên cứu về trí tuệ nhân tạo và khai phá dữ liệu đang trở nên ngày càng quan trọng để đáp ứng nhu cầu xử lý và phân tích dữ liệu này.
Hiện nay, các kỹ thuật và phương pháp của trí tuệ nhân tạo được áp dụng rộng rãi trong nhiều lĩnh vực khác nhau, từ kinh doanh, y tế, tài chính đến sản xuất và giáo dục Các công ty lớn như Google, Facebook, Amazon, Apple, Microsoft và nhiều công ty khác đang sử dụng trí tuệ nhân tạo để cải thiện dịch vụ của họ và tạo ra giá trị cho khách hàng.
Trong lĩnh vực này, phân cụm (clustering) là một trong những kỹ thuật quan trọng để phân tích dữ liệu và trích xuất thông tin, đặc biệt trong các bài toán phân tích hình ảnh, phân tích tín hiệu và xử lý ngôn ngữ tự nhiên.
Với mục đích nghiên cứu về phân cụm
Trong bài tập này, chúng em đã chọn đề tài: “Nghiên cứu thuật toán k-means minh họa với không gian 2 chiều và 3 chiều, áp dụng thuật toán trong nén ảnh”.
Mục tiêu
Phương pháp nghiên cứu
Sử dụng phần mềm python để mô phỏng hệ thống Sắp xếp các thành phần và kết nối chúng như mô tả trong tài liệu hướng dẫn Thực hiện mô phỏng để kiểm tra hoạt động của hệ thống trong nén ảnh.
GIỚI THIỆU VỀ NGÔN NGỮ PYTHON
Giới thiệu về ngôn ngữ Python
Python là một ngôn ngữ lập trình được sử dụng rộng rãi trong các ứng dụng web, phát triển phần mềm, khoa học dữ liệu và máy học (ML) Các nhà phát triển sử dụng Python vì nó hiệu quả, dễ học và có thể chạy trên nhiều nền tảng khác nhau Ngôn ngữ Python lần đầu tiên được sử dụng vào năm 1989 bởi Guido van Rossum tại Hà Lan và bắt đầu được phát triển từ năm 1991 Sau đó Python tiếp tục được phát triển dưới dạng ngôn ngữ mã nguồn mở bởi tổ chức Python Software Foudation Theo Mertz (2003), Python là một ngôn ngữ lập trình đơn giản nhưng mạnh mẽ bởi nó vừa có được sức mạnh giống như các ngôn ngữ biên dịch truyền thống nhưng cũng vừa có được các lợi thế của một ngôn ngữ thông dịch (interpreted), hướng đối tượng (object-oriented) Python là ngôn ngữ lập trình tương tác, thông dịch, hướng đối tượng với rât nhiều ưu điểm nổi bật như: cú pháp trong sáng, dễ hiểu; tính tương thích cao; khả năng mở rộng; các kiểu dữ liệu động ở mức cao; chạy trên đa nền.
Lịch sử các phiên bản Python:
Guido Van Rossum cho ra mắt phiên bản đầu tiên của ngôn ngữ Python (phiên bản 0.9.0) vào năm 1991 Ngôn ngữ này đã bao gồm các tính năng hữu ích như một số kiểu dữ liệu và hàm để xử lý lỗi
Python 1.0 đã được ra mắt vào năm 1994 với các hàm mới để dễ dàng xử lý danh sách dữ liệu, chẳng hạn như ánh xạ, lọc và lược bỏ.
Python 2.0 đã được ra mắt vào ngày 16 tháng 10 năm
2000, với các tính năng hữu ích mới cho lập trình viên, chẳng hạn như hỗ trợ ký tự Unicode và cách xử lý chi tiết một danh sách nhanh chóng hơn.
Python 3.0 đã được ra mắt vào ngày 3 tháng 12 năm
2008 Phiên bản này bao gồm các tính năng như hàm in và hỗ trợ nhiều hơn cho việc phân chia số và xử lý lỗi.
Lợi ích của Python
Những lợi ích của Python bao gồm:
Các nhà phát triển có thể dễ dàng đọc và hiểu một chương trình Python vì ngôn ngữ này có cú pháp cơ bản giống tiếng Anh
Python giúp cải thiện năng suất làm việc của các nhà phát triển vì so với những ngôn ngữ khác, họ có thể sử dụng ít dòng mã hơn để viết một chương trình Python.
Python có một thư viện tiêu chuẩn lớn, chứa nhiều dòng mã có thể tái sử dụng cho hầu hết mọi tác vụ Nhờ đó, các nhà phát triển sẽ không cần phải viết mã từ đầu.
Các nhà phát triển có thể dễ dàng sử dụng Python với các ngôn ngữ lập trình phổ biến khác như Java, C và C+ +.
Cộng đồng Python tích cực hoạt động bao gồm hàng triệu nhà phát triển nhiệt tình hỗ trợ trên toàn thế giới. Nếu gặp phải vấn đề, bạn sẽ có thể nhận được sự hỗ trợ nhanh chóng từ cộng đồng.
Trên Internet có rất nhiều tài nguyên hữu ích nếu bạn muốn học Python Ví dụ: bạn có thể dễ dàng tìm thấy video, chỉ dẫn, tài liệu và hướng dẫn dành cho nhà phát triển.
Python có thể được sử dụng trên nhiều hệ điều hành máy tính khác nhau, chẳng hạn như Windows, macOS,Linux và Unix.
Ngôn ngữ Python được sử dụng như thế nào?
Ngôn ngữ Python được sử dụng nhiều trong lĩnh vực phát triển ứng dụng, bao gồm những ví dụ sau:
Phát triển web phía máy chủ:
Phát triển web phía máy chủ bao gồm những hàm backend phức tạp mà các trang web thực hiện để hiển thị thông tin cho người dùng Ví dụ: các trang web phải tương tác với cơ sở dữ liệu, giao tiếp với các trang web khác và bảo vệ dữ liệu khi truyền qua mạng
Python hữu ích trong việc lập trình mã phía máy chủ bởi vì ngôn ngữ này cung cấp nhiều thư viện bao gồm mã viết sẵn cho các hàm backend phức tạp Các nhà phát triển cũng sử dụng một loạt các khung Python cung cấp tất cả những công cụ cần thiết để xây dựng ứng dụng web một cách nhanh chóng và dễ dàng hơn Ví dụ: các nhà phát triển có thể tạo ứng dụng web khung trong nháy mắt bởi vì họ không cần phải lập trình nó từ đầu Sau đó, họ có thể kiểm tra ứng dụng web này bằng cách sử dụng các công cụ kiểm thử của khung, mà không cần phụ thuộc vào những công cụ kiểm thử bên ngoài.
Tự động hóa bằng các tập lệnh Python:
Ngôn ngữ tập lệnh là một ngôn ngữ lập trình tự động hóa các tác vụ mà thường được con người thực hiện Các lập trình viên thường xuyên sử dụng các tập lệnh Python để tự động hóa nhiều tác vụ hàng ngày như:
Đổi tên một số lượng lớn tệp cùng lúc
Chuyển đổi một tệp sang một loại tệp khác
Loại bỏ các từ trùng lặp trong tệp văn bản
Thực hiện các phép tính toán cơ bản
Thực hiện phân tích nhật ký cơ bản
Tìm kiếm lỗi trong nhiều tệp
Khoa học dữ liệu và máy học:
Khoa học dữ liệu trích xuất thông tin quý giá từ dữ liệu và máy học (ML) dạy máy tính tự động học hỏi từ dữ liệu và đưa ra các dự đoán chính xác Các nhà khoa học dữ liệu sử dụngPython cho các tác vụ khoa học dữ liệu sau:
Sửa và loại bỏ dữ liệu không chính xác, hay còn được gọi là làm sạch dữ liệu
Trích xuất và chọn lọc các đặc điểm đa dạng của dữ liệu
Ghi nhãn dữ liệu gán tên có ý nghĩa cho dữ liệu
Tìm các số liệu thống kê khác nhau từ dữ liệu
Trực quan hóa dữ liệu bằng cách sử dụng các biểu đồ và đồ thị, chẳng hạn như biểu đồ đường, biểu đồ cột, biểu đồ tần suất và biểu đồ tròn
Các nhà khoa học dữ liệu sử dụng những thư viện ML của Python để đào tạo các mô hình ML và xây dựng các công cụ phân loại giúp phân loại dữ liệu một cách chính xác Các chuyên gia từ nhiều lĩnh vực sử dụng những công cụ phân loại dựa trên Python để thực hiện các tác vụ phân loại, chẳng hạn như phân loại hình ảnh, văn bản cũng như lưu lượng truy cập mạng, nhận dạng giọng nói và nhận diện khuôn mặt Các nhà khoa học dữ liệu cũng sử dụng Python cho deep learning, một kỹ thuật ML nâng cao.
Các nhà phát triển phần mềm thường sử dụng Python cho những tác vụ phát triển và ứng dụng phần mềm khác nhau, chẳng hạn như:
Theo dõi lỗi trong mã của phần mềm
Tự động xây dựng phần mềm
Đảm nhận quản lý dự án phần mềm
Phát triển nguyên mẫu phần mềm
Phát triển các ứng dụng máy tính bằng cách sử dụng những thư viện Giao diện đồ họa người dùng (GUI)
Phát triển từ các trò chơi văn bản đơn giản cho đến những trò chơi điện tử phức tạp
Tự động hóa kiểm thử phần mềm:
Kiểm thử phần mềm là quy trình kiểm tra xem kết quả thực tế từ phần mềm có khớp với kết quả mong đợi không để đảm bảo rằng phần mềm không có lỗi
Các nhà phát triển sử dụng khung kiểm thử đơn vị Python, chẳng hạn như Unittest, Robot và PyUnit, để kiểm thử các hàm do họ viết
Các kỹ sư kiểm thử phần mềm sử dụng Python để viết các trường hợp kiểm thử cho nhiều tình huống khác nhau Ví dụ: họ sử dụng ngôn ngữ này để kiểm thử giao diện người dùng của một ứng dụng web, nhiều thành phần của phần mềm và những tính năng mới Các nhà phát triển có thể sử dụng một số công cụ để tự động chạy tập lệnh kiểm thử Những công cụ này có tên gọi là công cụ Tích hợp liên tục/Triển khai liên tục (CI/CD) Các kỹ sư kiểm thử phần mềm cũng như những nhà phát triển sử dụng các công cụ CI/CD như Travis CI và Jenkins để tự động hóa quy trình kiểm thử Công cụ CI/CD tự động chạy các tập lệnh kiểm thử Python và báo cáo kết quả kiểm thử bất kỳ khi nào nhà phát triển thêm vào những dòng mã mới.
Đặc điểm của Python
Các đặc điểm sau tạo nên sự độc đáo của ngôn ngữ lập trình Python:
Python là một ngôn ngữ thông dịch
Python là một ngôn ngữ thông dịch, điều này nghĩa là ngôn ngữ này trực tiếp chạy từng dòng mã Nếu có lỗi trong mã chương trình, nó sẽ ngừng chạy Do đó, lập trình viên có thể nhanh chóng tìm ra lỗi trong đoạn mã.
Python là một ngôn ngữ dễ sử dụng
Python sử dụng từ ngữ giống trong tiếng Anh Không giống như các ngôn ngữ lập trình khác, Python không sử dụng dấu ngoặc ôm Thay vào đó, ngôn ngữ này sử dụng thụt đầu dòng.
Python là một ngôn ngữ linh hoạt
Các lập trình viên không cần phải khai báo loại biến khi viết mã bởi vì Python sẽ xác định chúng vào thời điểm chạy Vì vậy, bạn có thể viết các chương trình Python một cách nhanh chóng hơn.
Python là một ngôn ngữ cấp cao
Python gần gũi với ngôn ngữ con người hơn các ngôn ngữ lập trình khác Do đó, các lập trình viên không cần phải lo lắng về những chức năng cơ bản của nó như kiến trúc và quản lý bộ nhớ.
Python là một ngôn ngữ lập trình hướng đối tượng
Python coi mọi thứ đều là đối tượng, nhưng ngôn ngữ này cũng hỗ trợ các phương thức lập trình khác như lập trình hàm và lập trình cấu trúc.
Một số thư viện phổ biến của Python
Các nhà phát triển sử dụng Matplotlib để hiển thị dữ liệu dưới dạng đồ họa hai và ba chiều (2D và 3D) chất lượng cao Thư viện này thường được sử dụng trong các ứng dụng khoa học.
Với Matplotlib, bạn có thể trực quan hóa dữ liệu bằng cách hiển thị dữ liệu dưới dạng các biểu đồ khác nhau, chẳng hạn như biểu đồ cột và biểu đồ đường Bạn cũng có thể hiển thị nhiều biểu đồ cùng lúc và các chi tiết đồ họa có thể được di chuyển qua mọi nền tảng. b Pandas
Pandas cung cấp cấu trúc dữ liệu được tối ưu hóa và linh hoạt mà bạn có thể sử dụng để thao tác với dữ liệu chuỗi thời gian và dữ liệu có cấu trúc, chẳng hạn như bảng và nhóm Ví dụ, bạn có thể sử dụng Pandas để đọc, ghi, hợp nhất, lọc và nhóm dữ liệu Thư viện này được nhiều người sử dụng cho các tác vụ khoa học dữ liệu, phân tích dữ liệu và ML. c NumPy
NumPy là một thư viện phổ biến mà các nhà phát triển sử dụng để dễ dàng tạo và quản lý nhóm, thao tác với các hình dạng logic và thực hiện các phép toán đại số tuyến tính. NumPy hỗ trợ tích hợp với nhiều ngôn ngữ như C và C ++. d Requests
Thư viện Requests cung cấp nhiều hàm hữu ích cần thiết để phát triển web Bạn có thể sử dụng thư viện này để gửi các yêu cầu HTTP, bổ sung tiêu đề, thêm tham số URL, bổ sung dữ liệu và thực hiện nhiều tác vụ khác khi giao tiếp với các ứng dụng web e OpenCV-Python
OpenCV-Python là một thư viện mà các nhà phát triển sử dụng để xử lý hình ảnh cho các ứng dụng thị giác máy tính.Thư viện này cung cấp nhiều hàm cho các tác vụ xử lý hình ảnh như đọc và ghi hình ảnh cùng lúc, xây dựng môi trường
3D từ môi trường 2D cũng như chụp và phân tích hình ảnh từ video. f Keras
Keras là thư viện mạng nơ-ron chuyên sâu của Python với khả năng hỗ trợ tuyệt vời cho việc xử lý dữ liệu, trực quan hóa và hơn thế nữa Keras hỗ trợ nhiều mạng nơ-ron Thư viện này có cấu trúc mô-đun mang lại sự linh hoạt cho việc lập trình các ứng dụng sáng tạo.
Khung Python
Khung Python là tập hợp của các gói và mô-đun Mô-đun là tập hợp của các mã liên quan và gói là tập hợp của các mô- đun Các nhà phát triển có thể sử dụng khung Python để xây dựng các ứng dụng Python nhanh hơn vì họ không phải lo lắng về các chi tiết cấp thấp như cách giao tiếp trong ứng dụng web hoặc cách Python sẽ làm cho chương trình chạy nhanh hơn Python có hai loại khung:
Khung full-stack bao gồm hầu hết mọi thứ cần thiết để xây dựng một ứng dụng lớn.
Khung micro là một khung cơ bản cung cấp các chức năng tối thiểu để xây dựng những ứng dụng Python đơn giản Nó cũng cung cấp các tiện ích mở rộng nếu ứng dụng cần các hàm phức tạp hơn.
Một số khung Python phổ biến:
Các nhà phát triển có thể sử dụng nhiều khung Python để giúp hoạt động phát triển của họ hiệu quả hơn, bao gồm các khung sau:
Django là một trong những khung web Python full-stack được sử dụng rộng rãi nhất để phát triển các ứng dụng web trên quy mô lớn Khung này cung cấp một số tính năng hữu ích, bao gồm một máy chủ web để phát triển và kiểm thử, một công cụ mẫu để xây dựng giao diện người dùng của trang web và nhiều cơ chế bảo mật khác.
Flask là một khung micro được sử dụng để phát triển các ứng dụng web nhỏ Các đặc điểm của khung này bao gồm sự hỗ trợ nhiệt tình từ cộng đồng, tài liệu hữu ích, công cụ mẫu, tính năng kiểm thử đơn vị và máy chủ web được tích hợp sẵn Nó cũng cung cấp các tiện ích mở rộng để hỗ trợ xác thực, các lớp ánh xạ cơ sở dữ liệu và bảo mật web.
TurboGears là một khung được thiết kế để xây dựng các ứng dụng web một cách nhanh chóng và dễ dàng hơn Sau đây là một số đặc điểm nổi bật của khung này:
Cấu trúc bảng cơ sở dữ liệu cụ thể
Các công cụ tạo và quản lý dự án
Một công cụ mẫu để xây dựng cơ sở dữ liệu
Một công cụ mẫu để tạo giao diện người dùng
Các cơ chế bảo mật web
Apache MXNet là một khung học sâu nhanh, linh hoạt và có thể điều chỉnh quy mô được các nhà phát triển sử dụng để xây dựng những nguyên mẫu nghiên cứu và ứng dụng học sâu Khung này hỗ trợ nhiều ngôn ngữ lập trình, bao gồmJava, C++, R và Perl Nó cung cấp một bộ công cụ cũng như thư viện phong phú để hỗ trợ phát triển Ví dụ: bạn có thể tìm thấy một cuốn sách tương tác về máy học (ML), bộ công cụ thị giác máy tính và các mô hình học sâu dành cho Xử lý ngôn ngữ tự nhiên (NLP) để xử lý ngôn ngữ tự nhiên, chẳng hạn như văn bản và lời nói.
PyTorch là một khung cho ML được xây dựng dựa trên thư viện Torch, một thư viện ML nguồn mở khác Các nhà phát triển sử dụng khung này cho những ứng dụng như NLP, robot và thị giác máy tính, tìm kiếm thông tin có ý nghĩa từ hình ảnh và video Họ cũng sử dụng PyTorch để chạy những ứng dụng đó bằng CPU và GPU.
Python IDE
Môi trường phát triển tích hợp (IDE) là phần mềm cung cấp cho các nhà phát triển công cụ duy nhất họ cần để viết, chỉnh sửa, kiểm tra và gỡ lỗi mã a PyCharm
JetBrains, một công ty phát triển công cụ phần mềm tại Séc, đã tạo ra PyCharm Nó có một phiên bản cộng đồng miễn phí phù hợp với các ứng dụng Python nhỏ và một phiên bản chuyên nghiệp trả phí dành cho việc xây dựng các ứng dụng Python quy mô lớn, với đầy đủ những tính năng sau:
Tự động hoàn thành và kiểm tra mã
Xử lý lỗi và sửa lỗi nhanh chóng
Làm sạch mã mà không thay đổi chức năng
Hỗ trợ các khung ứng dụng web như Django và Flask
Hỗ trợ các ngôn ngữ lập trình khác, chẳng hạn như
JavaScript, Co昀昀eeScript, TypeScript, AngularJS và Node
Các công cụ và thư viện khoa học như Matplotlib và NumPy
Khả năng chạy, gỡ lỗi, kiểm thử và triển khai các ứng dụng trong máy ảo từ xa
Trình gỡ lỗi để tìm lỗi trong mã, trình kiểm tra để xác định các vấn đề về hiệu suất trong mã và trình chạy thử nghiệm để chạy các bài kiểm thử đơn vị
Hỗ trợ cơ sở dữ liệu b IDLE
Môi trường phát triển và học hỏi tích hợp (IDLE) là Python IDE được cài đặt theo mặc định Nó chỉ được phát triển với Python bằng bộ công cụ Tkinter GUI và cung cấp các tính năng sau:
Hoạt động trên nhiều hệ điều hành như Windows, Unix và macOS
Cung cấp một cửa sổ shell để chạy các lệnh và hiển thị kết quả
Cung cấp trình soạn thảo văn bản trên nhiều cửa sổ với khả năng đánh dấu cú pháp mã và hoàn thành mã tự động
Có trình gỡ lỗi riêng c Spyder
Spyder là một IDE nguồn mở được nhiều nhà khoa học và nhà phân tích dữ liệu sử dụng Nó cung cấp trải nghiệm phát triển toàn diện với các tính năng phân tích dữ liệu nâng cao, trực quan hóa dữ liệu và gỡ lỗi Spyder cũng bao gồm các tính năng sau:
Trình chỉnh sửa mã hỗ trợ nhiều ngôn ngữ
Bảng điều khiển IPython tương tác
Trình gỡ lỗi cơ bản
Thư viện khoa học như Matplotlib, SciPy và NumPy
Khả năng khám phá các biến trong mã
Khả năng xem tài liệu trong thời gian thực d Atom
Atom là một trình soạn thảo miễn phí do GitHub phát triển, hỗ trợ viết mã bằng nhiều ngôn ngữ lập trình, bao gồm cả Python Sử dụng Atom, các nhà phát triển có thể trực tiếp làm việc với GitHub, trang web nơi bạn có thể lưu mã của mình một cách tập trung Atom cung cấp các tính năng sau:
Khả năng hoạt động trên nhiều hệ điều hành
Dễ dàng cài đặt hoặc tạo các gói mới
Hoàn thành mã tự động nhanh chóng hơn
Khả năng tìm kiếm tệp và dự án
Tùy chỉnh giao diện dễ dàng
Cài đặt Python trên Windows
Bước 1: Tải xuống bản cài đặt Python đầy đủ.
Từ cửa sổ trình duyệt và truy cập vào trang python.org và click vào phần Downloads page for Windows Điều này sẽ giúp bạn đến trang liệt kê các phiên bản cài đặt Python cho Windows.
Trong phần "Python Releases for Windows", các bạn hãy click vào liên kết cho "Latest Python 3 Release - Python 3.x.x" Điều này sẽ giúp chúng ta chuyển đến nơi chọn phiên bản cài đặt mới nhất.
Các bạn cuộn xuống phía dưới cùng và chọn bản cài đặt
"Windows installer (64-bit)" nếu bạn dùng hệ điều hành
64 bit hoặc "Windows installer (32-bit)" nếu bạn dùng hệ điều hành 32 bit.
Bước 2: Chạy bản cài đặt Python.
Chạy bản cài đặt này bằng cách click đúp vào tệp đã tải xuống Một hộp thoại như bên dưới sẽ xuất hiện:
Sau khi tùy chọn hoàn tất, bạn hãy nhấn "Install" để bắt đầu việc cài đặt Sau khi cài đặt xong, bạn có thể kiểm tra lại xem quá trình cài đặt đã hoàn thành chưa bằng cách kiểm tra phiên bản Python hiện tại.
Cài đặt visual studio code
Truy cập vào trang chủ Visual Studio Code và thực hiện tải bản cài đặt phù hợp cho máy của mình. Để tài bản cài đặt cho Windows, click vào ô Windows và trình duyệt sẽ tự động tải về bản cài đặt Sau khi tải về bản cài đặt, thực hiện chạy tệp được tải về.
Một màn hình cửa sổ sẽ hiện ra như sau:
Tiếp tục click vào ô tròn bên trên (I accept the agreement) để đồng ý với các điều khoản sử dụng và nhấn "Next" để tiếp tục cài đặt. Đến đây, có thể chọn các tùy chọn cho việc cài đặt Tích vào các ô như trong hình bên trên và sau đó nhấn vào "Next" hoặc cũng có thể chọn toàn bộ các tùy chọn, điều này không ảnh hưởng nhiều đến sự hoạt động của VS Code.
Cuối cùng, click vào nút "Install" và hoàn tất việc cài đặt chương trình Visual Studio Code.
Cài đặt các tiện ích mở rộng cho Python trên VS
Sau khi đã cài đặt Visual Studio Code, mở ứng dụng này và thực hiện cài đặt thành phần hỗ trợ cho ngôn ngữ Python. Để khám phá và cài đặt các tiện ích mở rộng mới, nhấp vào biểu tượng Tiện ích mở rộng trong VS Code Có thể tìm kiếm tiện ích mở rộng bằng cách sử dụng từ khóa, sắp xếp kết quả theo nhiều cách và cài đặt tiện ích mở rộng một cách nhanh chóng và dễ dàng.
Sau khi đã tìm được Extension cần thiết, thực hiện click vào nút "Install" như hình bên dưới.
Sau khi thực hiện bước này, bạn đã thêm vào VS Code một tiện ích mở rộng cho việc lập trình Python.
Môi trường thông dịch Python này chính là cái mà bạn đã tiến hành cài đặt ở các bước trước Bạn hãy nhấn tổ hợp các phím Ctrl+Shift+P để kích hoạt tính năng Command Palett và gõ chữ "Python: Select Interpreter" và nhấn phím Enter Sau khi thực hiện, ứng dụng Visual Studio Code sẽ liệt kê ra danh sách các trình thông dịch cho Python đang được cài đặt trên hệ thống.
Trong phần đầu tiên, chúng ta đã thực hiện cài đặt Python, do đó, trong bước này, chúng ta sẽ chọn trình biên dịch Python đã được cài đặt như trong hình bên dưới:
CHƯƠNG 2 GIỚI THIỆU VỀ THUẬT TOÁN K-MEANS
Giới thiệu về thuật toán K-Means
Thuật toán phân cụm k-means là một phương pháp được sử dụng trong phân tích tính chất cụm của dữ liệu Nó đặc biệt được sử dụng nhiều trong khai phá dữ liệu và thống kê Nó phân vùng dữ liệu thành k cụm khác nhau Giải thuật này giúp chúng ta xác định được dữ liệu của chúng ta nó thực sử thuộc về nhóm nào.
Thuật toán K-Means chuẩn được đề xuất lần đầu tiên bởi Stuart Lloyd của Bell Labs vào năm 1957 nhưng không được xuất bản dưới dạng một bài báo cho đến tận năm 1982, năm
1965, Edward W.Forgy đã công bố phương pháp tương tự, do đó phương pháp này thường được gọi là Lloyd-Forgy.
2.1.1 Ý tưởng của thuật toán K-Means
Bước 1: Khởi tạo K điểm dữ liệu trong bộ dữ liệu và tạm thời coi nó là tâm của các cụm dữ liệu của chúng ta.
Bước 2: Với mỗi điểm dữ liệu trong bộ dữ liệu, tâm cụm của nó sẽ được xác định là 1 trong K tâm cụm gần nó nhất.
Bước 3: Sau khi tất cả các điểm dữ liệu đã có tâm, tính toán lại vị trí của tâm cụm để đảm bảo tâm của cụm nằm ở chính giữa cụm.
Bước 4: Bước 2 và bước 3 sẽ được lặp đi lặp lại cho tới khi vị trí của tâm cụm không thay đổi hoặc tâm của tất cả các điểm dữ liệu không thay đổi.
2.1.2 Lựa chọn số lượng cụm
Chỉ việc lựa chọn số cụm k đã có thể tách thành 1 bài toán riêng Không có 1 con số k nào là hợp lý cho tất cả các bài toán Bạn có thể đọc hiểu tập dữ liệu của mình để xác định xem trong đó có thể có bao nhiêu cụm?Nhưng không phải lúc nào bạn cũng có thể làm thế.Cách làm duy nhất là bạn hãy thử với từng giá trị k=1,2,3,4,5, … để xem kết quả phân cụm thay đổi như thế nào Một số nghiên cứu cho thấy việc thay đổi k sẽ có hiệu quả nhưng sẽ dừng lại ở 1 con số nào đó Như vậy bạn hoàn toàn có thể thử xem dữ liệu của mình tốt với giá trị k nào đó.
2.1.3 Khởi tạo k vị trí ban đầu
Bằng cách nào đó, hãy có gắng khởi tạo k tâm cụm này phân bố đồng đều trên không gian của bộ dữ liệu Điều đó có thể làm khi bạn có thể xác định được không gian và tính chất của dữ liệu Nhưng ít nhất, các tâm cụm mà bạn khởi tạo cũng đừng quá gần nhau, cũng đừng trùng nhau.
Còn 1 cách cuối cùng là bạn sẽ chạy thuật toán nhiều lần để lấy kết quả tốt nhất trong các lần chạy đó Với điều kiện là bạn khởi tạo tâm của k cụm ngẫu nhiên.
2.1.4 Về vấn đề tính dừng (hội tụ)
Đối với những trường hợp dữ liệu phức tạp, thuật toán k- means sẽ rất lâu hoặc không bao giờ hội tụ Tức là sẽ không bao giờ xác định được tâm cụm cố định để kết thúc bài toán Hoặc là phải chạy qua rất nhiều bước lặp.Trong những trường hợp như vậy, thay vì phải tìm được k tâm cụm cố định thì ta sẽ dừng bài toán khi sự thay đổi ở một con số chấp nhận được Tức là giữa hai lần cập nhật tâm cụm thì chênh lệch vị trí giữa tâm cũ và mới nhỏ hơn một số delta cho phép nào đó.
Thuật toán K-means
Mục đích cuối cùng của thuật toán phân nhóm này là: từ dữ liệu đầu vào và số lượng nhóm chúng ta muốn tìm, hãy chỉ ra center của mỗi nhóm và phân các điểm dữ liệu vào các nhóm tương ứng Giả sử thêm rằng mỗi điểm dữ liệu chỉ thuộc vào đúng một nhóm.
2.2.1 Một số ký hiệu toán học
Giả sử có N điểm dữ liệu là X = [x1, x2, …, xN] ∈ R d*N và K < N là số cluster chúng ta muốn phân chia Chúng ta cần tìm các center m1, m2, …, mK ∈ R d*1 và label của mỗi điểm dữ liệu.
Lưu ý về ký hiệu toán học: các số vô hướng được biểu diễn bởi các chữ cái viết ở dạng không in đậm, có thể viết hoa, ví dụ x1, N, y, k Các vector được biểu diễn bằng các chữ cái thường in đậm, ví dụ m, x 1 Các ma trận được biểu diễn bởi các chữ viết hoa in đậm, ví dụ X, M, Y.
Với mỗi điểm dữ liệu xi đặt yi = [yi1, yi2, …, yiK] là label vector của nó, trong đó nếu xi được phân vào cluster k thì yik = 1 và yij = 0, ∀ j ≠ k Điều này có nghĩa là có đúng một phần tử của vector yi là bằng 1 (tương ứng với cluster của xi), các phần tử còn lại bằng 0 Ví dụ: nếu một điểm dữ liệu có label vector là [1, 0, 0, …, 0][1, 0, 0, …, 0] thì nó thuộc vào cluster 1, là [0,
1, 0, …, 0][0, 1, 0, …, 0] thì nó thuộc vào cluster 2, … Cách mã hóa label của dữ liệu như thế này được gọi là biểu diễn one-hot.
Ràng buộc y i có thể viết dưới dạng toán học như sau:
2.2.2 Hàm mất mát và bài toán tối ưu
Nếu ta coi center mk là center (hoặc representative) của mỗi cluster và ước lượng tất cả các điểm được phân vào cluster này bởi mk, thì một điểm dữ liệu xi được phân vào cluster k sẽ bị sai số là (xi - mk).Chúng ta mong muốn sai số này có trị tuyệt đối nhỏ nhất nên ta sẽ tìm cách để đại lượng sau đây đạt giá trị nhỏ nhất:
Hơn nữa, vì xi được phân vào cluster k nên yik = 1 và yij = 0, ∀ j ≠ k Khi đó biểu thức bên trên sẽ được viết lại là:
Sai số cho toàn bộ dữ liệu sẽ là:
Trong đó Y = [y1, y2, …, yN], M = [m1, m2, …, mK] lần lượt là các ma trận được tạo bởi label vector của mỗi điểm dữ liệu và center của mỗi cluster Hàm số mất mát trong bài toán K- means clustering của chúng ta là hàm (Y,M)với ràng buộc như được nêu trong phương trình (1).
Tóm lại, chúng ta cần tối ưu bài toán sau:
(subject to nghĩa là thỏa mãn điều kiện).
Nhắc lại khái niệm arg min: Chúng ta biết ký hiệu min là giá trị nhỏ nhất của hàm số, arg min chính là giá trị của biến số để hàm số đó đạt giá trị nhỏ nhất đó Nếu f(x)=x 2 − 2x+1=(x−1) 2 thì giá trị nhỏ nhất của hàm số này bằng 0, đạt được khi x=1 Trong ví dụ này minxf(x) = 0 và arg minxf(x) 1 Thêm ví dụ khác, nếu x1 = 0, x2 = 10, x3 = 5 thì ta nói arg mini xi=1 vì 1 là chỉ số để xi đạt giá trị nhỏ nhất (bằng 0) Biến số viết bên dưới min là biến số cần tối ưu Trong các bài toán tối ưu, thường quan tâm tới arg min hơn là min.
2.2.3 Thuật toán tối ưu hàm mất mát
Bài toán (2) là một bài toán khó tìm điểm tối ưu vì nó có thêm các điều kiện ràng buộc Bài toán này thuộc loại mix-integer programming (điều kiện biến là số nguyên) - là loại rất khó tìm nghiệm tối ưu toàn cục (global optimal point, tức nghiệm làm cho hàm mất mát đạt giá trị nhỏ nhất có thể) Tuy nhiên, trong một số trường hợp vẫn có thể tìm được phương pháp để tìm được nghiệm gần đúng hoặc điểm cực tiểu
Một cách đơn giản để giải bài toán (2) là xen kẽ giải Y và M khi biến còn lại được cố định Đây là một thuật toán lặp, cũng là kỹ thuật phổ biến khi giải bài toán tối ưu Chúng ta sẽ lần lượt giải quyết hai bài toán sau đây:
Giả sử đã tìm được các centers, hãy tìm các label vector để hàm mất mát đạt giá trị nhỏ nhất Điều này tương đương với việc tìm cluster cho mỗi điểm dữ liệu.
Khi các centers là cố định, bài toán tìm label vector cho toàn bộ dữ liệu có thể được chia nhỏ thành bài toán tìm label vector cho từng điểm dữ liệu xi như sau:
Vì chỉ có một phần tử của label vector yi bằng 1 nên bài toán (3) có thể tiếp tục được viết dưới dạng đơn giản hơn:
Vì chính là bình phương khoảng cách tính từ điểm xi tới center mj, ta có thể kết luận rằng mỗi điểm xi thuộc vào cluster có center gần nó nhất Từ đó ta có thể dễ dàng suy ra label vector của từng điểm dữ liệu.
Giả sử đã tìm được cluster cho từng điểm, hãy tìm center mới cho mỗi cluster để hàm mất mát đạt giá trị nhỏ nhất.
Một khi chúng ta đã xác định được label vector cho từng điểm dữ liệu, bài toán tìm center cho mỗi cluster được rút gọn thành:
Tới đây, ta có thể tìm nghiệm bằng phương pháp giải đạo hàm bằng 0, vì hàm cần tối ưu là một hàm liên tục và có đạo hàm xác định tại mọi điểm Và quan trọng hơn, hàm này là hàm convex (lồi) theo mj nên chúng ta sẽ tìm được giá trị nhỏ nhất và điểm tối ưu tương ứng. Đặt (mj) là hàm bên trong dấu arg min, ta có đạo hàm:
Giải phương trình đạo hàm bằng 0 ta có:
Nếu để ý một chút, chúng ta sẽ thấy rằng mẫu số chính là phép đếm số lượng các điểm dữ liệu trong cluster j Còn tử số chính là tổng các điểm dữ liệu trong cluster j.
Hay nói một cách đơn giản hơn: mj là trung bình cộng của các điểm trong cluster j.
Tên gọi K-means clustering cũng xuất phát từ đây.
2.2.4 Toán tắt thuật toán Đầu vào: Dữ liệu X và số lượng cluster cần tìm K. Đầu ra: Các center M và label vector cho từng điểm dữ liệu Y.
1 Chọn K điểm bất kỳ làm các center ban đầu.
2 Phân mỗi điểm dữ liệu vào cluster có center gần nó nhất.
3 Nếu việc gán dữ liệu vào từng cluster ở bước 2 không thay đổi so với vòng lặp trước nó thì ta dừng thuật toán.
4 Cập nhật center cho từng cluster bằng cách lấy trung bình cộng của tất các các điểm dữ liệu đã được gán vào cluster đó sau bước 2.
Chúng ta có thể đảm bảo rằng thuật toán sẽ dừng lại sau một số hữu hạn vòng lặp Vì hàm mất mát là một số dương và sau mỗi bước 2 hoặc 3, giá trị của hàm mất mát bị giảm đi.
CHƯƠNG TRÌNH…
Chương trình
Sau một số tìm hiểu về đề tài: “Nghiên cứu thuật toán k- means minh họa với không gian 2 chiều và 3 chiều, áp dụng thuật toán trong nén ảnh”, nhóm chúng em đã thực hiện nội dung của đề tài với các yêu cầu đặt ra.
Mục đích là để biết về thuật toán k-means để ứng dụng trong nén ảnh, tìm hiểu cách thức hoạt động của ứng dụng Bằng việc tìm hiểu và nắm rõ lý thuyết, bước đầu đã xây dựng thành công một ứng dụng thử nghiệm với các chức năng cơ bản Sau khi tìm hiểu lý thuyết và xây dựng , chúng em thu được các kết quả sau:
Tìm hiểu thêm về thuật toán k-means.
Cách lập trình với ngôn ngữ python
Tạo ứng dụng thử nghiệm với thuật toán k-means áp dụng trong nén ảnh
Trong thời gian ngắn và kinh nghiệm còn hạn chế nên bài tập lớn này không tránh khỏi những thiếu sót, rất mong được sự chỉ dẫn và góp ý của cô để chúng em có thêm điều kiện bổ sung và hoàn thiện sản phẩm của mình.
Sau thời gian tìm hiểu và nghiên cứu, nhóm chúng em đã xây dựng thành công chương trình “Nhận dạng hoa quả” Mô hình có khả năng áp dụng vào thực tế khi có được độ chính xác khá cao.
Có nhiều tài liệu để tìm hiểu và nghiên cứu.
Sự góp ý, hướng dẫn nhiệt tình của giảng viên.
5.1.3.Khó khăn Đề tài đòi hỏi nhiều kiến thức chuyên sâu, chưa có nhiều kinh nghiệm trong việc xây dựng ứng dụng AI nên việc tìm hiểu, nghiên cứu và xây dựng còn chậm Do điều kiện trang thiết bị còn hạn chế, việc thực thi mã trên Colab thường rất mất thời gian dẫn đến khó khăn trong quá trình thử nghiệm.
Trong quá trình thực hiện đề tài, nhóm chúng em đã học được rất nhiều kiến thức chuyên ngành cũng như kỹ năng mềm Điển hình nhất là kĩ năng sử dụng Colab để thực thi mã và các thư viện học máy phổ biến của python.
Mạng nơ-ron nhân tạo
Mạng nơ-ron tích chập
Hàm kích hoạt, hàm tối ưu
Xây dựng và huấn luyện mô hình
Kỹ năng làm việc nhóm
Kỹ năng quản lý thời gian hiệu quả
Sử dụng công cụ hỗ trợ như Word, PowerPoint Sử dụng Google Colab…