Hướng dẫn dùng define normalization trong PHP
Ở bài này Kteam sẽ giới thiệu đến các bạn Feature Normalize và Gradient Descent cho multivariate problem. Show Nội dungĐể theo dõi bài này tốt nhất bạn cần có kiến thức về: Trong bài này chúng ta sẽ cùng tìm hiểu về:
Vì sao phải Feature Normalize ?Thuật toán Gradient Descent sẽ chạy nhanh hơn với những vùng dữ liệu nhỏ. Ví dụ: Với việc dự đoán chất lượng gạo từ độ dài hạt, ta chỉ cần xử lí với những số từ 0-3 cm, thuật toán Gradient Descent sẽ chạy khá nhanh. Nhưng với dự đoán giá đất, ta phải xử lí diện tích rất rộng, và giá tiền lên đến vài chục nghìn $ hay vài tỷ đồng, hầu hết thuật toán training sẽ overload và nếu có thể xử lí hết thì tốc độ cũng rất chậm. Vì thế chúng ta cần phải quy chuẩn các input về một khoảng nhất định để việc training được tối ưu nhất. Các khoảng dữ liệu có thể như sau:
Hoặc:
Không có một quy chuẩn cụ thể x sẽ nằm trong khoảng nào, nhưng để tối ưu nhất, vùng dữ liệu (x lớn nhất – x nhỏ nhất) nên <= 1 và trung bình của toàn bộ x gần bằng 0. Để thực hiện 2 yêu cầu này, chúng ta tách Feature Normalize thành 2 phần: Feature Scaling (đưa vùng dữ liệu về -0.5 < x <= 0.5) và Mean Normalization (đưa trung bình của x về gần 0). Công thức Feature NormalizeFeature ScalingStandard Deviation là gì?Standard Deviation (độ lệch chuẩn) có thể hiểu là độ biến động của dữ liệu. Dữ liệu càng ổn định (ít chênh lệch), độ lệch chuẩn càng thấp. Kteam sẽ không đi sâu phần toán học của Standard Deviation, các bạn có thể tìm hiểu thêm tại Wikipedia. Trong numpy, ta có thể tính độ lệch chuẩn bằng hàm std():
Trong đó:
Công thức Feature ScalingĐể thực hiện Feature Scaling, ta chỉ cần lấy X chia cho độ lệch chuẩn:
Tuy nhiên, ta sẽ không thực hiện Feature Normalize với bias feature (x0 = 1), vì thế sau khi Feature Normalize xong, ta sẽ gán giá trị x0 = 1 lại. Thực hiện std cho x0 sẽ trả về kết quả là 0, nếu tiếp tục lấy x/0 sẽ bị lỗi chia cho 0, nên ta phải cho x0 một độ biến động giả bằng cách gán x0 đầu tiên bằng 100 (để x0 không còn “luôn bằng 1”) Ta thực hiện Feature Scaling với numpy như sau:
Mean NormalizeĐể thực hiện Mean Normalize, ta sẽ tính trung bình từng feature rồi lấy feature cũ trừ trung bình. Hàm tính trung bình – mean() với numpy:
Trong đó:
Công thức Feature Normalize khi có Mean Normalize:
Trong đó:
Áp dụng vào hàm Normalize:
Trả kết quảHàm normalize sẽ trả về 3 kết quả: norm, và s. và s được trả về để thuận tiện cho việc predict (trước khi predict phải Normalize input).
Áp dụng Feature Normalize vào multivariate problemLoad data
Ta sẽ define một hàm riêng để load data, tiết kiệm thời gian hơn:
Normalize data
Train dataĐể train data, ta gọi hàm Gradient Descent đã viết sẵn với alpha = 0.1 và iter = 400
Predict kết quảĐầu tiên, ta phải normalize input với mu và s, sau đó mới dùng hàm predict
ResourcesCác bạn có thể download các file text được sử dụng trong bài viết tại:
Kết luậnQua bài này chúng ta đã cùng nhau tìm hiểu về hàm Feature Normalize và áp dụng vào multivariate problem. Ở bài sau, Kteam sẽ giới thiệu về PHƯƠNG PHÁP NORMAL EQUATION CHO LINEAR REGRESSION. Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”. Thảo luậnNếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng. |