Python bình thường hóa giá trị

Các biểu thức đường dẫn này trông rất giống các biểu thức đường dẫn bạn sử dụng với các hệ thống tệp máy tính truyền thống

Hàm chuẩn XPath

XPath bao gồm hơn 200 chức năng tích hợp

Có các hàm cho giá trị chuỗi, giá trị số, booleans, so sánh ngày và giờ, thao tác nút, thao tác trình tự, v.v.

Ngày nay, các biểu thức XPath cũng có thể được sử dụng trong JavaScript, Java, Lược đồ XML, PHP, Python, C và C++ và nhiều ngôn ngữ khác

Keras được sử dụng bởi CERN, NASA, NIH và nhiều tổ chức khoa học khác trên thế giới [và vâng, Keras được sử dụng tại LHC]. Keras có tính linh hoạt cấp thấp để thực hiện các ý tưởng nghiên cứu tùy ý trong khi cung cấp các tính năng tiện lợi cấp cao tùy chọn để tăng tốc chu kỳ thử nghiệm

Trong thuật toán machine learning nói chung, và trong deep learning nói riêng, các mô hình học cách dự đoán đầu ra từ đầu đến thông qua các ví dụ trong tập dữ liệu huấn luyện

Các điểm dữ liệu đôi khi được so sánh với các đơn vị khác nhau, m và feet không có giới hạn. Hoặc có hai thành phần [của dữ liệu vector] chênh lệch nhau quá lớn, một thành phần có khoảng giá trị từ 0 đến 1000, thành phần kia chỉ có khoảng giá trị từ 0 đến 1 giả định. Lúc này, chúng ta cần chuẩn hóa dữ liệu trước khi thực hiện các bước tiếp theo. [theo https. //máyhọccoban. com/General/2017/02/06/featureengineering]

Trọng số của mô hình được khởi tạo từ các giá trị ngẫu nhiên nhỏ và được cập nhật org bằng thuật toán tối ưu trong quá trình quay ngược, việc cập nhật dựa trên lỗi dự đoán [mất mát] trong quá trình đào tạo

Do các số lượng nhỏ của mô hình nhỏ rất quan trọng và được cập nhật dựa trên dự đoán lỗi nên tỷ lệ giá trị của đầu vào X và đầu ra Y của tập dữ liệu huấn luyện là một yếu tố quan trọng. Nếu đầu vào không được mở rộng quy mô có thể dẫn đến quá trình luyện tập không ổn định. Ngoài ra, nếu đầu ra Y không được chia tỷ lệ trong các bài toán hồi quy có thể dẫn đến việc nổ gradient khiến thuật toán không chạy được

Mở rộng quy mô có thể tạo ra sự khác biệt giữa mô hình kém và mô hình tốt

Bước tiền xử lý dữ liệu liên quan đến kỹ thuật chuẩn hóa và tiêu chuẩn hóa để thu nhỏ lại đầu vào và đầu ra trước khi huấn luyện mô hình

Trong bài viết này, chúng ta sẽ tìm hiểu các cách để cải thiện một mô hình sao cho hiệu quả và ổn định bằng cách sử dụng quy mô dữ liệu

Mục tiêu bài viết

  • Mở rộng dữ liệu là một bước cần được thực hiện trong quá trình xử lý tiền khi cài đặt với mô hình mạng nơ-ron
  • Thực hiện dữ liệu được chia tỷ lệ bằng kỹ thuật chuẩn hóa hoặc tiêu chuẩn hóa
  • Áp dụng tiêu chuẩn hóa và chuẩn hóa để cải thiện mô hình Perceptron đa lớp với hồi quy bài toán sau đó đưa ra đánh giá
Thay đổi tỷ lệ các biến đầu vào

Các biến đầu vào là các biến được đưa vào nơ-ron mạng để dự đoán

Một nguyên tắc chung là các biến đầu vào phải có giá trị nhỏ, có thể nằm trong khoảng 0-1 hoặc được chuẩn hóa với giá trị trung bình bằng 0 và độ lệch chuẩn [độ lệch chuẩn] bằng 1. Các biến đầu vào cần phải mở rộng quy mô hoặc không phụ thuộc vào từng bài toán công cụ và từng biến cụ thể

Nếu phân bố giá trị của biến là phân bố chuẩn thì biến nên được chuẩn hóa, nếu không dữ liệu nên được chuẩn hóa. Điều này được áp dụng khi phạm vi giá trị lớn [10, 100…] hoặc nhỏ [0. 01, 0. 0001]

Nếu giá trị của biến nhỏ [gần trong khoảng 0-1] và giới hạn phân phối bị giới hạn [ví dụ như độ biến thiên gần với 1] thì chúng ta không cần phải chia tỷ lệ dữ liệu

Các bài toán có thể phức tạp hoặc không rõ ràng nên ta không xác định được việc sử dụng các kỹ thuật nào để quy mô dữ liệu là tốt nhất. Vì thế nên thường thì mình hay thử nghiệm scale dữ liệu và không scale có khác nhau về thế nào bằng việc cho mô hình chạy rồi tiến hành đánh giá

Đầu biến scale

Biến đầu ra Y là biến được dự đoán bởi mô hình

Chúng ta cần đảm bảo rằng giá trị của Y phải khớp với phạm vi biểu diễn của hàm kích hoạt [hàm kích hoạt] trong đầu ra lớp của mô hình mạng nơ-ron

Nếu đầu ra của hàm kích hoạt thuộc miền [0, 1] thì giá trị biến đầu ra Y cũng phải nằm trong giá trị miền này. Tuy nhiên, chúng ta nên chọn hàm kích hoạt phù hợp với phân bố của đầu ra Y hơn là đưa Y về giá trị miền của hàm kích hoạt

Ví dụ nếu bài toán của bạn là hồi quy thì đầu ra sẽ là một giá trị thực. Mô hình tốt nhất cho bài toán này là lựa chọn chức năng kích hoạt tuyến tính [kích hoạt tuyến tính]. If the first output has a standard layout, we can standardize the headers variable. If not, the start Y could be normalize

Các phương pháp mở rộng dữ liệu

Có 2 cách để chia tỷ lệ dữ liệu đó là chuẩn hóa và chuẩn hóa tạm dịch là Bình thường hóa dữ liệu và Chuẩn hóa dữ liệu

Cả 2 cách này đều được cung cấp trong thư viện scikit-learning

Chuẩn hóa dữ liệu

Chuẩn hóa là phương pháp quy mô dữ liệu từ miền giá trị bất kỳ sang miền giá trị nằm trong khoảng 0 đến 1

Phương pháp này yêu cầu chúng tôi xác định giá trị lớn nhất [max] và giá trị nhỏ nhất [min] của dữ liệu

Giá trị được bình thường hóa theo công thức sau

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
8

y is after normalize, x is before normalize

Để chuẩn hóa dữ liệu, ta cần chuẩn hóa từng thuộc tính [tính năng] của dữ liệu. Công thức áp dụng cho từng tính năng

Trong đó x là giá trị cần được chuẩn hóa, tối đa và tối thiểu là giá trị lớn nhất và nhỏ nhất của tất cả các quan sát của tính năng trong tệp dữ liệu

Ví dụ với một tập tin dữ liệu bất kỳ, chúng tôi xác định giá trị lớn nhất của 1 tính năng là 30, giá trị nhỏ nhất là -10. Như vậy, với 1 bất kỳ giá trị là 18. 8, ta could normalize as after

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
9

Bạn có thể thấy nếu giá trị x nằm ngoài giới hạn của giá trị tối thiểu và tối đa, giá trị kết quả sẽ không nằm trong phạm vi 0 và 1. Nếu đã xác định giá trị max và min cho trước, một điểm dữ liệu nào đó nằm ngoài khoảng max và min mà ta có thể loại bỏ khỏi tệp dữ liệu

Bạn có thể thực hiện chuẩn hóa dữ liệu bằng cách sử dụng thư viện scikit-learning với MinMaxScaler

Các bước như sau

  • Fit biến scaler bằng cách sử dụng tập dữ liệu huấn luyện. Để bình thường hóa, dữ liệu huấn luyện cần phải được xác định giá trị tối đa và tối thiểu. Để thực hiện chúng ta gọi hàm fit[]
  • Action scale data by way call function transform[]
  • Áp dụng lại bộ chia tỷ lệ để sử dụng cho công việc dự đoán về sau

Bộ chia tỷ lệ MinMaxScaler sẽ đưa các biến về giá trị miền [0, 1], sử dụng tham số

1
2
3
4
5
6
7
8
9
10
11
12
0 để đưa vào giá trị tối thiểu và tối đa nếu bạn muốn

1
2
3
4
5
6
7
8
9
10
11
12
1

Để đảo ngược miền giá trị sau khi scale về miền giá trị gốc giúp thuận tiện cho việc báo cáo hoặc vẽ biểu đồ, bạn có thể gọi hàm

1
2
3
4
5
6
7
8
9
10
11
12
2

1
2
3
4
5
6
7
8
9
10
11
12
3

Bạn cũng có thể thực hiện trong một bước duy nhất bằng cách sử dụng hàm fit_transform[];

1
2
3
4
5
6
7
8
9
10
11
12
4

Chuẩn hóa dữ liệu

Chuẩn hóa dữ liệu là việc quy mô dữ liệu về một phân bố trong đó giá trị trung bình của các quan sát bằng 0 và độ lệch chuẩn = 1. Kỹ thuật này còn được gọi là “làm trắng. ”. Nhờ việc chuẩn hóa, các thuật toán như hồi quy tuyến tính, hồi quy logistic được cải thiện

Công thức hóa chuẩn như sau

\[x’ = \frac{x - \bar{x}}{\sigma}\]

với $\bar{x}$ và $\sigma$ lần như kỳ vọng và phương sai [độ lệch chuẩn] của thành phần đó trên toàn bộ dữ liệu huấn luyện

[theo https. //máyhọccoban. com/chung/2017/02/06/featureengineering/]

Giống như chuẩn hóa, tiêu chuẩn hóa có thể có hiệu quả và thậm chí có tính bắt buộc nếu giá trị dữ liệu bắt đầu thuộc về các miền giá trị khác nhau

Chuẩn hóa giả định các quan sát có phân phối Gaussian [hình chuông]. Nếu dữ liệu phân phối không có dạng phân phối chuẩn thì việc áp dụng tiêu chuẩn hóa cũng không hiệu quả

Để thực hiện chuẩn hóa dữ liệu, chúng ta cần tính toán giá trị trung bình và tốc độ lệch dựa trên các quan sát

Chuẩn hóa công thức

1
2
3
4
5
6
7
8
9
10
11
12
5

Trong đó có nghĩa là được tính như sau

1
2
3
4
5
6
7
8
9
10
11
12
6

Để tính toán độ lệch chuẩn [standard_deviation]

1
2
3
4
5
6
7
8
9
10
11
12
7

Giả sử giá trị trung bình là 10, độ lệch pha là 5, Với giá trị 20. 7 will be standardize as after

1
2
3
4
5
6
7
8
9
10
11
12
8

Chúng ta có thể chuẩn hóa dữ liệu bằng thư viện scikit-learning với StandardScaler

1
2
3
4
5
6
7
8
9
10
11
12
9

Hoặc sử dụng hàm

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
20 như sau

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
21

Thử nghiệm với bài toán sử dụng mô hình hồi quy

Một bài toán sử dụng mô hình dự báo hồi quy thường liên quan đến công việc dự đoán một đại lượng có giá trị thực. Ví dụ bài toán dự đoán giá nhà, dự đoán giá cổ phiếu…

Trong phần này, chúng ta sẽ khảo sát các hàm mất mát phù hợp với các bài toán hồi quy

Để tạo dữ liệu demo cho bài toán hồi quy, mình sẽ sử dụng hàm make_regression[] có sẵn trong thư viện của scikit-learning. Hàm này sẽ tạo dữ liệu mẫu với các biến đầu vào, nhiễu và các thuộc tính khác…

Chúng ta sẽ sử dụng hàm này để tạo dữ liệu bao gồm 20 tính năng, 10 tính năng có ý nghĩa về mặt dữ liệu và 10 tính năng không có ý nghĩa. Mình sẽ tạo 1.000 điểm dữ liệu ngẫu nhiên cho bài toán. Tham số random_state sẽ đảm bảo cho chúng ta các dữ liệu giống nhau mỗi lần chạy

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
22

Các biến đầu vào đều dưới dạng phân phối Gaussian. Tương tự với biến đầu ra

Mình sẽ vẽ thử các biểu đồ biến đầu tiên vào

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
23

Chạy thử đoạn mã trên sẽ cho chúng ta 2 kết quả như sau

  • Đầu tiên là phân bố của 2 biến trong số 12 biến

Phân vùng của 2 biến trong số 12 biến

  • Thứ 2 là phân bố của biến mục tiêu. Mặc dù giá trị miền lớn hơn nhưng phân bố vẫn ở dưới dạng phân bố chuẩn

Phân vùng của biến mục tiêu

Vì vậy, chúng ta sẽ sử dụng mô hình để tiến hành các thử nghiệm và đánh giá

MLP with data not be rescale

Để demo việc tìm hiểu về ảnh hưởng của việc mở rộng quy mô, mình sẽ sử dụng một mô hình đơn giản đó là Multilayer Perceptron [MLP]

Mô hình sẽ bắt đầu với 20 tính năng, mô hình sẽ có 1 lớp ẩn với 25 nút, sau đó sử dụng hàm kích hoạt ReLU. Đầu ra sẽ bao gồm 1 nút tương ứng với giá trị đầu ra muốn dự đoán, cuối cùng sẽ là một chức năng kích hoạt tuyến tính

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
24

Mình sẽ điều chỉnh mô hình này với thuật toán tối ưu hóa độ dốc ngẫu nhiên tối ưu và tỷ lệ sử dụng học tập là 0. 01, đà 0. 9

Tập huấn luyện sẽ thực hiện qua 100 kỷ nguyên và sử dụng tệp kiểm tra để đánh giá mô hình sau mỗi kỷ nguyên. Cuối cùng ta có thể vẽ lại các đường cong đã học sau khi thực hiện xong

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
25

Hàm lỗi MSE [mean squared error] được tính toán trên tập huấn luyện và tập kiểm tra để xác định xem mô hình học thế nào

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
26

Sau đó mình sẽ tiến hành vẽ lại biểu đồ có thể hiển thị lỗi MSE trong quá trình huấn luyện dựa trên tập huấn luyện và tập tin kiểm tra thông qua mỗi kỷ nguyên. Việc đánh giá kết quả huấn luyện dựa trên biểu đồ sẽ giúp chúng ta dễ dàng tìm hiểu hơn về các bài kiểm tra

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
27

Code complete as after

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
28

Sau khi chạy mã, chúng ta sẽ có giá trị MSE trên tập huấn luyện và tập kiểm tra

Trong trường hợp này, mô hình không học được gì cả, dẫn đến giá trị dự đoán là NaN. Trọng số của mô hình bị phát nổ trong quá trình đào tạo làm giảm giá trị làm mát ảnh hưởng đến việc cập nhật quan trọng bằng cách giảm dần độ dốc

# create scaler
scaler = MinMaxScaler[feature_range=[-1,1]]
29

Như vậy dữ liệu scale data hoàn toàn cần thiết khi xây dựng mô hình

Do error value is NaN nên trong trường hợp này ta không thể vẽ được đồ thị hàm lỗi

MLP with the target variable scale

Chúng ta sẽ tiến hành cập nhật lại mô hình bằng cách thu nhỏ biến đầu ra của dữ liệu

Khi đưa biến mục tiêu về cùng miền giá trị sẽ làm giảm độ dốc kích thước để cập nhật lại quan trọng. Điều này sẽ làm cho mô hình và quá trình đào tạo ổn định hơn

Với biến mục tiêu có phân phối Gausian, chúng ta sẽ sử dụng phương pháp thay đổi tỷ lệ giá trị của biến bằng kỹ thuật tiêu chuẩn hóa. Chúng ta cần tính giá trị trung bình [mean] và độ lệch chuẩn [std] của biến để áp dụng phương pháp này

scikit-learning của thư viện cần bắt đầu nhập dữ liệu là 1 ma trận 2 chiều bao gồm các dòng và các cột. Vì vậy, mục tiêu biến Y từ màn hình 1D phải được định hình lại về 2D

1
2
3
4
5
6
7
8
9
10
11
12
20

Sau đó áp dụng StandardScaler vào để thu nhỏ lại biến

1
2
3
4
5
6
7
8
9
10
11
12
21

Sau đó tương tự như phần trên, chúng ta sẽ tiến hành phân tích lỗi MSE thông qua đồ thị biểu diễn lỗi trong quá trình huấn luyện đào tạo

Mã thực hiện như sau

1
2
3
4
5
6
7
8
9
10
11
12
22

Sau khi chạy, kết quả sẽ hiển thị giá trị MSE trên tập huấn luyện và tập kiểm tra

Chú ý khi chạy, kết quả có thể khác nhau do thuật toán khởi tạo ngẫu nhiên. Chúng ta nên chạy nhiều lần và lấy giá trị trung bình

Kết quả trong ra sẽ là

1
2
3
4
5
6
7
8
9
10
11
12
23

Biểu đồ đường thể hiện giá trị MSE trong quá trình huấn luyện của tập huấn luyện [màu xanh] và tập kiểm tra [màu cam]

Trong trường hợp này, chúng ta có thể thấy rằng quy mô công việc biến đầu vào sẽ làm cho mô hình tốt hơn. Hơn nữa, việc bình thường hóa các biến đầu vào cho kết quả tốt hơn chuẩn hóa. Điều này có thể thực hiện việc lựa chọn chức năng kích hoạt là tuyến tính

Chủ Đề