Làm cách nào để bạn chuẩn hóa dữ liệu của mình bằng python?
Đôi khi, để cải thiện hiệu suất của mô hình, bạn sẽ cần thay đổi phân phối cơ bản của dữ liệu mà không nhất thiết phải thay đổi thông tin trong dữ liệu. Bình thường hóa giúp bạn làm điều đó
Trong bài viết này, tôi sẽ chia sẻ với bạn chuẩn hóa là gì, tại sao nó quan trọng và cách thực hiện nó trong Python
Bình thường hóa là gì?
Chuẩn hóa là quá trình thay đổi hình dạng phân phối để có phân phối Chuẩn [Gaussian]. Đây là một kỹ thuật rất hữu ích nếu chúng ta biết rằng phân phối tính năng cơ bản không phải là Bình thường.
Quá trình chuẩn hóa hoạt động bằng cách điều chỉnh giá trị của các biến số mà không thay đổi tỷ lệ/phạm vi dữ liệu của bạn. Nó có thể được coi là một kỹ thuật thay đổi kích thước. Nhưng sự khác biệt nằm ở chỗ, việc chia tỷ lệ thu nhỏ/mở rộng dữ liệu để phù hợp với một phạm vi cụ thể trong khi quá trình chuẩn hóa thì không
NB. Trong rất nhiều bài báo và tài liệu trực tuyến, thay đổi kích thước, tiêu chuẩn hóa và chuẩn hóa đôi khi được sử dụng thay thế cho nhau và có thể gây nhầm lẫn cái nào là cái nào. Chuẩn hóa và thay đổi tỷ lệ gần như có cùng một mục tiêu, nhưng tôi thích định nghĩa chuẩn hóa này hơn vì nó tự nhiên hơn. Để biết các kỹ thuật liên quan đến chuyển đổi tiêu chuẩn hóa, vui lòng xem bài viết này về tiêu chuẩn hóa, và để biết các kỹ thuật thay đổi tỷ lệ chuyển đổi, vui lòng xem bài viết này.
Tại sao chuẩn hóa dữ liệu lại quan trọng?
Chuẩn hóa dữ liệu rất quan trọng vì nhu cầu thay đổi hình dạng của dữ liệu ở dạng có lợi hơn. Thật vậy, một số mô hình đã được chứng minh là hoạt động tốt nhất nếu phân phối cơ bản của chúng là bình thường. Chuẩn hóa cho phép chúng tôi chuyển đổi một tính năng không có phân phối bình thường cơ bản thành bình thường
Phân phối bình thường đôi khi là một giả định đối với một số mô hình học máy. Vì vậy, Chuẩn hóa cải thiện khả năng giải quyết các hệ số của mô hình của bạn, đây là thước đo mức độ thay đổi của một dự đoán tính năng sẽ thay đổi một dự đoán khác. Điều này là do các tính năng được chuẩn hóa làm cho các mô hình ít nhạy cảm hơn với tỷ lệ của chúng
Làm cách nào để chuẩn hóa dữ liệu của bạn bằng Python?
Để khám phá các kỹ thuật khác nhau được sử dụng để chuẩn hóa dữ liệu của bạn trong python, hãy thiết lập tập dữ liệu đại diện cho một cột/đối tượng địa lý có phân phối gamma. Tùy thuộc vào trường hợp, nói chung có 5 cách để chuẩn hóa dữ liệu của bạn và chúng tôi sẽ sử dụng python để minh họa chúng
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
x = stats.gamma.rvs[1, size=5000]+5
sns.set_style["whitegrid"]
ax = sns.displot[x, kind = "kde",color = "#e64e4e", height=10, aspect=2,
linewidth = 5 ]
ax.fig.suptitle['Original distribution', size = 20]
Đối với tất cả các phương pháp được mô tả bên dưới, tôi sẽ sử dụng cùng một phân phối ở trên và xem các giá trị chuẩn hóa thu được
1. HộpCox Chuyển đổi
Đó là phương pháp số 1 của tôi để chuyển đổi và chuẩn hóa hầu hết các tính năng. Nó được thể hiện bằng công thức dưới đây
Chuyển đổi BoxCox lấy tên từ các tác giả của nó, nhà thống kê George Box và David Cox. Họ đã phát triển một quy trình hoạt động bằng cách xác định một lambda lý tưởng để chuyển đổi đối tượng địa lý thành dạng Gaussian [bình thường]. Lambda là sức mạnh mà tại đó các giá trị sẽ được nâng lên và thuật toán tìm kiếm giá trị lambda tốt nhất từ -5 đến 5
Box-Cox không đảm bảo tính quy tắc vì không có kiểm tra tính quy tắc trong thuật toán. Nó chỉ kiểm tra độ lệch chuẩn nhỏ nhất. Tuy nhiên, khả năng rất cao là dữ liệu được phân phối chuẩn khi độ lệch chuẩn nhỏ nhất. Kiểm tra tính quy tắc [thông qua biểu đồ xác suất] cần được thực hiện để chắc chắn 100%
# Apply Normalization
x_norm, _ = stats.boxcox[x]
# Plot the distribution
ax = sns.displot[x_norm, kind = "kde",color = "#e64e4e", height=10, aspect=2,
linewidth = 5 ]
ax.fig.suptitle['Distribution after BoxCox transfomation', size = 20]
2. YeoJohnson
Phép biến đổi Yeo-Johnson là một cách khác để chuẩn hóa dữ liệu của bạn. Nó hoạt động tương tự như phép biến đổi Box Cox nhưng Yeo Johnson tạo ra một phân phối đối xứng hơn và CÓ THỂ được sử dụng với các giá trị âm
from scipy.stats import yeojohnson
x_norm, _ = yeojohnson[x]
ax = sns.displot[x_norm, kind = "kde",color = "#e64e4e", height=10, aspect=2,
linewidth = 5 ]
ax.fig.suptitle['Distribution after YeoJohnson transfomation', size = 20]
Nếu các giá trị hoàn toàn dương, thì phép biến đổi Yeo-Johnson giống như phép biến đổi lũy thừa BoxCox của [y+1]. Nếu chúng hoàn toàn âm, thì phép biến đổi Yeo-Johnson là phép biến đổi lũy thừa Box-Cox của [-y +x], nhưng với lũy thừa 2-lambda. Điều này cho phép nó được sử dụng cho cả giá trị dương và âm.
3. Chuyển đổi nhật ký
Trong chuyển đổi nhật ký, bạn có thể thay đổi từng giá trị của tính năng theo cơ số 2, 10 hoặc nhật ký tự nhiên. Nó được đại diện với np. chức năng nhật ký.
Bạn nên sử dụng Chuyển đổi nhật ký khi bạn có bản phân phối gốc bị sai lệch. Độ lệch có thể được gây ra bởi phân phối theo cấp số nhân cao, các giá trị ngoại lệ, v.v.
Đây là cách chuẩn hóa dữ liệu bằng log-transform với python. Nó khá đơn giản
x_norm = np.log[x]
ax = sns.displot[x_norm, kind = "kde",color = "#e64e4e", height=10, aspect=2,
linewidth = 5 ]
ax.fig.suptitle['Distribution after Log transfomation', size = 20]
4. chuyển đổi đối ứng
Trong phương pháp này, chúng ta sẽ chỉ cần thay thế từng giá trị bằng nghịch đảo của nó bằng cách sử dụng [1/x]. Phương pháp này ít ảnh hưởng đến hình dạng của phân phối so với các phương pháp khác và chỉ có thể được sử dụng cho các giá trị khác không
x_norm = 1/x
ax = sns.displot[x_norm, kind = "kde",color = "#e64e4e", height=10, aspect=2,
linewidth = 5 ]
ax.fig.suptitle['Distribution after Reciprocal transfomation', size = 20]
5. Phép biến đổi căn bậc hai
n phương pháp này, chúng tôi sẽ thay thế từng giá trị của bản gốc bằng căn bậc hai của nó bằng cách áp dụng np. sqrt[x] để lấy các giá trị căn bậc hai. Nó có tác dụng đáng chú ý đối với phân phối và có thể được sử dụng trên các giá trị bằng không
x_norm = np.sqrt[x]
ax = sns.displot[x_norm, kind = "kde",color = "#e64e4e", height=10, aspect=2,
linewidth = 5 ]
ax.fig.suptitle['Distribution after Squareroot transfomation', size = 20]
Thưởng. Biến đổi véc tơ đơn vị
Tôi đã đề cập đến phép biến đổi vectơ đơn vị vì scikit learn có chức năng Chuẩn hóa viết tắt của chuẩn hóa vectơ đơn vị, chỉ có thể áp dụng cho các hàng
Đó là một quá trình chia tỷ lệ các mẫu riêng lẻ để có dạng đơn vị. Theo tài liệu. “Chuyển đổi vectơ đơn vị có thể hữu ích nếu bạn dự định sử dụng một dạng bậc hai chẳng hạn như tích vô hướng hoặc bất kỳ hạt nhân nào khác để định lượng mức độ giống nhau của bất kỳ cặp mẫu nào”.
from sklearn import preprocessing
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]]
X_norm = preprocessing.normalize[X, norm='l2']
X_norm
array[[[ 0.40824829, -0.40824829, 0.81649658],
[ 1. , 0. , 0. ],
[ 0. , 0.70710678, -0.70710678]]]
Nếu bạn đã thực hiện đến đây trong bài viết, cảm ơn bạn rất nhiều
Tôi hy vọng thông tin này được sử dụng cho bạn.
Vui lòng sử dụng bất kỳ thông tin nào từ trang này. Tôi sẽ đánh giá cao nếu bạn có thể chỉ cần liên kết đến bài viết này dưới dạng nguồn. Nếu có thêm bất kỳ câu hỏi nào, bạn có thể liên hệ với hoặc nhắn tin cho tôi trên Twitter . Nếu bạn muốn nhiều nội dung như thế này, hãy tham gia danh sách email của tôi để nhận các bài viết mới nhất. Mình cam kết không spam.