SMA 2017 – Lý thuyết ra quyết định

bayesian_mindset

Khi làm việc với các bài toán ra quyết định, xác suất thống kê được sử dụng rất nhiều trong việc đưa ra những dự báo mang hàm nghĩa không chắc chắn. Ta chỉ có thể cung cấp kết quả dự đoán đại loại như 86%, 91%, hay 99% nhưng không bao giờ bạn chắc chắn được 100%. Bù lại kết quả này cho bạn biết, khi ra quyết định 100 lần thì ít ra bạn cũng đạt được chừng ấy mục tiêu của mình, đồng thời bạn cũng sẵn sàng chấp nhận trả giá cho những phần trăm còn lại.

Tham dự khoá học SMA-2017 cũng là cơ hội cho tôi ôn lại kiến thức lý thuyết xác suất thống kê đã từng bỏ bê thời còn đi học. Đặc biệt là hướng tiếp cận của Bayesian đang được cộng đồng nghiên cứu và áp dụng rất nhiều trong việc dự báo tương lai. Buổi học bắt đầu bằng những kiến thức căn bản để học viên có thể bắt nhịp lại các khái niệm, các thuật ngữ, lý do tại sao ngành thống kê ra đời. Sau đó là những so sánh chi tiết hơn giữa hướng tiếp cận truyền thống và hướng tiếp cận của Bayesian. Thống kê truyền thống (classical statistics) thường tin vào xác suất tính được sẽ luôn lặp lại đúng như vậy và dùng nó để dự đoán trong tương lai, nghĩa là nếu tung đồng xu 1000 lần ta có tỉ lệ head/tail đều là 70/30 thì các lượt tung tiếp theo tỉ lệ head xuất hiện sẽ cao hơn tail. Ngược lại, Bayesian sử dụng dữ liệu thu thập được theo thời gian để điều chỉnh lại niềm tin ban đầu (prior knowledge) này sao cho ít bị chủ quan hơn, nhờ vậy mà dự đoán trong tương lai sẽ thận trọng hơn nhiều.

Ở đây là ghi chú cũng khá ngắn gọn của tôi, mặc dù đã cố gắng hoàn chỉnh lại nội dung để bạn đọc dễ theo dõi và tìm hiểu nhưng sẽ còn nhiều chỗ khó hiểu cần tham khảo các nguồn tài liệu bên ngoài, nên tôi cũng cung cấp thêm các đường link liên quan, các bạn có thể từ đó bù đắp lại các kiến thức mơ hồ. Hoặc bạn cũng có thể sử dụng bài viết này để làm cheat sheet tham khảo nhanh cho công việc hiện tại của mình.

Tiếp tục đọc

Advertisements

SMA 2017 – Lý thuyết tập thô (P4) – Rút trích luật quyết định

rules_extraction

rules_extraction

Trong thực tế, mặc dù đã có trong tay nhiều thông tin nhưng sự nhập nhằng và mơ hồ luôn tồn tại trong quá trình đưa ra quyết định. Trong quyết định, có quyết định an toàn và chắc chắn như bỏ vốn tiết kiệm vào ngân hàng và biết trước lãi suất hằng năm là bao nhiêu. Cũng có quyết định mang tính rủi ro như đầu tư chứng khoán, ta chỉ biết một vài thông tin về công ty hay lịch sử giao dịch quá khứ, cũng có thể đây là công ty mới lên sàn và không hề có bất kỳ thông tin gì. Ngoài ra, còn có những quyết định mang tính đánh đổi như quyết định giữa việc tiếp tục đi làm hay tự startup công ty để tăng nguồn thu nhập cho bản thân, …

Các thuật toán Machine learning bạn từng biết như Decision tree, Association rules, … cũng hỗ trợ ra quyết định. Trong bài viết này, ta hãy thử tìm hiểu lý thuyết tập thô có giúp cho chúng ta tìm ra quyết định chính xác và phù hợp hay không.

Tiếp tục đọc

SMA 2017 – Lý thuyết tập thô (P3) – Rút gọn thuộc tính

rough_set_attribute_reduction

rough_set_attribute_reduction

Rút gọn thuộc tính hay lựa chọn thuộc tính là bước quan trọng trong xây dựng mô hình dự đoán. Khi thu thập dữ liệu, ta sẽ tiến hành lấy tất cả thông tin liên quan đến đối tượng cần xét càng nhiều càng tốt. Điều này dẫn đến dữ liệu sẽ bị dư thừa và không phải thuộc tính thông tin nào cũng cần thiết trong mô hình dự đoán. Do đó, việc xác định và loại bỏ được các thuộc tính dư thừa trong tập dữ liệu là điều cần thiết trước khi xây dựng mô hình ML cho hệ thống.

Việc rút gọn hay loại bỏ được các thuộc tính dư thừa giúp cải thiện độ chính xác của mô hình, giảm bớt overfitting, đẩy nhanh quá trình tính toán giúp tiết kiệm tài nguyên và chi phí. Tiếp theo phần 2, bài viết này tập trung vào đánh giá và rút gọn thuộc tính để trích chọn ra những đặc trưng mang mức độ ý nghĩa cao cho hệ thông tin của chúng ta.

Tiếp tục đọc

SMA 2017 – Lý thuyết tập thô (P2) – Rời rạc hoá thuộc tính

discretization

discretization

Tiếp theo phần 1, ở phần này, tôi sẽ đi tiếp làm thế nào để rời rạc hoá dữ liệu. Trong thực tế, các kiểu dữ liệu trong hệ thông tin của chúng ta không chỉ có kiểu dữ liệu số nguyên mà còn nhiều loại dữ liệu phức tạp khác như kiểu dữ liệu số thực, kiểu dữ liệu phạm trù, … Lý thuyết tập thô muốn làm việc được trên tập dữ liệu này, ta cần rời rạc hoá tập dữ liệu thành các khoảng đoạn. Ở đây, ta có hai hướng tiếp cận là kĩ thuật chia giỏ và rút gọn bảng nhị phân.

Tiếp tục đọc

SMA 2017 – Lý thuyết tập thô (P1) – Các khái niệm cơ bản

rough_set

rough_set

Đây là những ghi chú của tôi sau khoá học SMA 2017. Tôi xin chia sẻ những gì đã học được qua buổi dạy “Lý thuyết tập thô” của thầy Đặng Phước Huy từ Đại học Đà Lạt. Hơn 40 năm trong nghề và trong mười mấy năm gần đây, thầy đã tìm hiểu về lý thuyết tập thô của Pawlak rất hay, có thể áp dụng vào thống kê rất tốt nên muốn chia sẻ cho chúng ta những ứng dụng của lý thuyết này vào khai thác dữ liệu. Hy vọng những bạn quan tâm có thể áp dụng ngay vào thực tiễn.

Mới đầu thì nghe topic có vẻ hơi “thô” nhưng thật ra không hề thô tý nào. Về ứng dụng thì nó có thể dùng trong rút trích đặc trưng, tối giản hoá tập dữ liệu, rút trích hình mẫu trong dữ liệu, phát sinh luật hỗ trợ ra quyết định, … Thêm vào đó, cách diễn đạt của thầy rất có hồn và dễ hiểu không khô khan như các ký tự toán học trên giấy. Thầy sẽ đi từ ví dụ trước khi quay lại các lập luận toán học nên bạn sẽ cảm thấy dễ hiểu hơn. Các thuật ngữ tiếng Anh, tiếng Việt đều được giải nghĩa và làm rõ để có thể tiếp cận lý thuyết này nhanh nhất. Qua khoá học này, đảm bảo các bạn có thể cài đặt và áp dụng được ngay. Tôi cũng dự định sẽ cài đặt để áp dụng thử vào project hiện tại của mình.

Tiếp tục đọc

Con đường học tập Machine Learning của tôi

Học Machine Learning

Chặng đường trở thành một Data Scientist khá dài, 2-3 năm thậm chí là 5 năm tuỳ năng lực của mỗi người. Có bạn chọn cho mình con đường học thuật từ cử nhân, master cho đến PhD. Có bạn học xong cử nhân thì tìm kiếm ngay cho mình cơ hội nghiên cứu ở các công ty. Có bạn lại chọn cho mình phát triển ở vị trí Data Engineer/Data Analyst chuyên phân tích dữ liệu Big Data. Dù bạn ở vị trí nào đi nữa thì điều quan trọng nhất là bạn đã đóng góp được gì cho dự án mà mình tham gia.

Trong bài viết này, tôi sẽ tản mạn một chút về quá trình học tập Machine Learning của tôi trong thời gian qua. Từ lúc tôi còn ngồi ghế nhà trường cho đến lúc đi làm. Bạn đọc ở đây có lẽ cũng có nhiều điểm chung như tôi, cũng đã từng thử qua nhiều phương pháp học Machine Learning khác nhau, cũng đã từng trải nghiệm và chọn lọc ra cách học phù hợp nhất đối với bản thân. Cách tiếp cận của tôi có lẽ không phải là cách tốt nhất nên ta chỉ tham khảo để giao lưu thêm thôi nhé.

Tiếp tục đọc

Hướng dẫn deploy Spark

spark-mesos

Việc deploy Spark là cần thiết đối với các tác vụ mang tính chu kỳ. Ví dụ, ta có thể tạo một CRON job để chương trình Spark có thể tự động tổng hợp dữ liệu cho chúng ta sau chu kỳ mỗi giờ, mỗi ngày hay mỗi tuần. spark-submit là một shell command được dùng để deploy ứng dụng Spark lên cluster. Nhờ vào cơ chế quản lý phân tán của Spark, ta không cần phải chỉnh sửa source code quá nhiều để có thể chuyển đổi từ standalone mode sang distributed mode.

Để hoàn tutorial này, bạn cần các phần mềm sau:

Tiếp tục đọc

Truy vấn văn bản – Document Retrieval

wikipedia

Giả sử bạn đang đọc một bài viết nào đó, hệ thống truy vấn văn bản sẽ giúp bạn tìm kiếm những bài viết tương tự như bài viết của bạn đang đọc. Vậy làm sao ta có thể tính được độ tương tự giữa các văn bản để tìm kiếm trong vô số các tài liệu có sẵn, tỷ lệ giống nhau về nội dung của các văn bản là bao nhiêu?

Trong bài viết này, ta sẽ sử dụng tập văn bản liên quan đến những người nổi tiếng download từ wikipedia (file csv đã xử lý có thể download ở đây) để xây dựng hệ thống truy vấn văn bản dựa trên nội dung đang đọc.

Tiếp tục đọc

Hệ thống recommend bài nhạc

iTunes

Một trong những công nghệ giúp cho đời sống con người ngày càng dễ dàng hơn đó là recommender system. Recommender system giúp kết nối người dùng với sản phẩm mà họ tìm kiếm được thuận tiện và nhanh chóng hơn từ đó mang lại lợi thế cạnh tranh của sản phẩm so với các đối thủ khác. Bạn có thể bắt gặp hệ thống này ở các trang xem phim, nghe nhạc, mua bán, mạng xã hội, … Về cơ bản, bạn có thể áp dụng ngay kỹ thuật này vào hệ thống của bạn thông qua các hướng tiếp cận như: Popularity – liệt kê top các sản phẩm được nhiều người quan tâm nhất, Classification – dựa vào các chủ đề mà bạn cung cấp để lọc ra danh sách sản phẩm tương ứng. Tuy nhiên, các hướng tiếp cận này đều mang tính đại chúng, không nhắm vào một cá nhân cụ thể nào. Hơn nữa, không ai dễ dàng cung cấp thông tin cá nhân cho ứng dụng của bạn để có thể lọc thông tin phù hợp.

Do đó, trong bài viết này, tôi sẽ đi theo hướng tiếp cận Collaborative Filtering với hai phương pháp gồm Memory-Based Collaborative Filtering và Model-Based Collaborative filtering giúp trả lời hai câu hỏi “user nghe bài nhạc này thì sẽ có xu hướng nghe các bài như…” và “user có gu âm nhạc như bạn thì sẽ có xu hướng nghe các bài nhạc như…”. Trong đó, Model-Based sẽ sử dụng singular value decomposition (SVD) và Memory-Based sử dụng khoảng cách cosine để mô hình hóa hệ thống. Bạn có thể download dữ liệu từ đây Million Song Dataset Challenge.

Source code: Github.

Tiếp tục đọc

TensorFlow – thư viện code Deep Learning

tensorboard

Bài viết này không nhằm vào hướng dẫn lập trình TensorFlow. Lý do, các bạn có thể tìm thấy nhiều source code hướng dẫn khác nhau trên internet, tự cài đặt và lập trình dễ dàng. Nếu các bạn đã có kiến thức cơ bản về Neural Network thì việc nắm bắt công nghệ này cũng sẽ đơn giản hơn rất nhiều.

Thông thường, ta sẽ đi theo flow nghiên cứu sau: vào trang https://www.tensorflow.org/ để xem qua bài giới thiệu chung chung, sau đó tiến hành cài đặt, cài đặt thất bại do conflict thư viện, cài đặt thành công, đọc source code, cài đặt thuật toán từ các tutorial, hiểu sơ sơ, bắt đầu hoang mang do có quá nhiều bài viết cần đọc và cài đặt -> mất hết cảm hứng.

Do đó, mình sẽ hướng các bạn đi theo một tiếp cận khác. Đầu tiên, ta sẽ lấy cảm hứng nghiên cứu thông qua các ứng dụng ngoài thực tế, người thật việc thật của TensorFlow. Tiếp đến, ta sẽ xem mọi người đánh giá như thế nào về mã nguồn này, có đáng để ta tiếp tục nghiên cứu không. Sau cùng, ta sẽ bắt tay vào tiến hành cài đặt và ứng dụng công nghệ cùng với các tài liệu tham khảo chất lượng đã thu thập được.

Tiếp tục đọc