Chuẩn hóa dữ liệu 0 thành 1 Python

Gói

>>> X_test = np.array([[-3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])
6 cung cấp một số chức năng tiện ích phổ biến và các lớp biến áp để thay đổi các vectơ đặc trưng thô thành một biểu diễn phù hợp hơn cho các công cụ ước tính xuôi dòng

Nói chung, các thuật toán học được hưởng lợi từ việc chuẩn hóa tập dữ liệu. Nếu một số ngoại lệ xuất hiện trong tập hợp, bộ chia tỷ lệ hoặc máy biến áp mạnh mẽ sẽ phù hợp hơn. Hành vi của các bộ chia tỷ lệ, bộ biến áp và bộ chuẩn hóa khác nhau trên tập dữ liệu chứa các giá trị ngoại lệ biên được tô sáng trong

6. 3. 1. Chuẩn hóa, hoặc loại bỏ trung bình và thay đổi quy mô

Tiêu chuẩn hóa bộ dữ liệu là một yêu cầu phổ biến đối với nhiều công cụ ước tính học máy được triển khai trong scikit-learning; . Gaussian với giá trị trung bình bằng 0 và phương sai đơn vị

Trong thực tế, chúng tôi thường bỏ qua hình dạng của phân phối và chỉ chuyển đổi dữ liệu thành trung tâm bằng cách loại bỏ giá trị trung bình của từng tính năng, sau đó chia tỷ lệ bằng cách chia các tính năng không cố định cho độ lệch chuẩn của chúng

Chẳng hạn, nhiều phần tử được sử dụng trong hàm mục tiêu của thuật toán học (chẳng hạn như hạt nhân RBF của Máy vectơ hỗ trợ hoặc bộ điều chỉnh l1 và l2 của mô hình tuyến tính) có thể giả định rằng tất cả các tính năng đều tập trung quanh 0 hoặc có phương sai theo cùng một thứ tự. Nếu một đối tượng địa lý có phương sai lớn hơn các đối tượng khác, nó có thể chi phối hàm mục tiêu và khiến công cụ ước tính không thể học từ các đối tượng địa lý khác một cách chính xác như mong đợi

Mô-đun cung cấp lớp tiện ích, đây là cách nhanh chóng và dễ dàng để thực hiện thao tác sau trên tập dữ liệu dạng mảng

>>> from sklearn import preprocessing
>>> import numpy as np
>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
>>> scaler = preprocessing.StandardScaler().fit(X_train)
>>> scaler
StandardScaler()

>>> scaler.mean_
array([1. ..., 0. ..., 0.33...])

>>> scaler.scale_
array([0.81..., 0.81..., 1.24...])

>>> X_scaled = scaler.transform(X_train)
>>> X_scaled
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])

Dữ liệu được chia tỷ lệ có giá trị trung bình bằng 0 và phương sai đơn vị

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])

Lớp này triển khai API

>>> X_test = np.array([[-3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])
9 để tính toán giá trị trung bình và độ lệch chuẩn trên tập huấn luyện để sau này có thể áp dụng lại phép biến đổi tương tự trên tập kiểm tra. Do đó, lớp này phù hợp để sử dụng trong những bước đầu tiên của một

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96

Có thể vô hiệu hóa định tâm hoặc chia tỷ lệ bằng cách chuyển

>>> min_max_scaler.scale_
array([0.5       , 0.5       , 0.33...])

>>> min_max_scaler.min_
array([0.        , 0.5       , 0.33...])
1 hoặc
>>> min_max_scaler.scale_
array([0.5       , 0.5       , 0.33...])

>>> min_max_scaler.min_
array([0.        , 0.5       , 0.33...])
2 cho hàm tạo của

6. 3. 1. 1. Chia tỷ lệ các đối tượng thành một phạm vi

Một tiêu chuẩn hóa thay thế là chia tỷ lệ các đối tượng nằm giữa một giá trị tối thiểu và tối đa nhất định, thường là từ 0 đến 1 hoặc sao cho giá trị tuyệt đối tối đa của mỗi đối tượng được chia tỷ lệ theo kích thước đơn vị. Điều này có thể đạt được bằng cách sử dụng hoặc , tương ứng

Động lực để sử dụng tỷ lệ này bao gồm tính mạnh mẽ đối với độ lệch chuẩn rất nhỏ của các tính năng và bảo toàn các mục nhập bằng 0 trong dữ liệu thưa thớt

Dưới đây là một ví dụ để chia tỷ lệ ma trận dữ liệu đồ chơi thành phạm vi

>>> min_max_scaler.scale_
array([0.5       , 0.5       , 0.33...])

>>> min_max_scaler.min_
array([0.        , 0.5       , 0.33...])
6

________số 8_______

Sau đó, phiên bản tương tự của máy biến áp có thể được áp dụng cho một số dữ liệu thử nghiệm mới không nhìn thấy trong cuộc gọi phù hợp. các hoạt động thay đổi tỷ lệ và thay đổi tương tự sẽ được áp dụng để phù hợp với quá trình chuyển đổi được thực hiện trên dữ liệu tàu

>>> X_test = np.array([[-3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])

Có thể xem xét các thuộc tính của bộ chia tỷ lệ để tìm về bản chất chính xác của phép biến đổi đã học được trên dữ liệu huấn luyện

>>> min_max_scaler.scale_
array([0.5       , 0.5       , 0.33...])

>>> min_max_scaler.min_
array([0.        , 0.5       , 0.33...])

Nếu được đưa ra một

>>> min_max_scaler.scale_
array([0.5       , 0.5       , 0.33...])

>>> min_max_scaler.min_
array([0.        , 0.5       , 0.33...])
8 rõ ràng, công thức đầy đủ là

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min

hoạt động theo cách rất giống nhau, nhưng chia tỷ lệ theo cách mà dữ liệu đào tạo nằm trong phạm vi

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
0 bằng cách chia cho giá trị tối đa lớn nhất trong mỗi tính năng. Nó dành cho dữ liệu đã được căn giữa ở mức 0 hoặc dữ liệu thưa thớt

Đây là cách sử dụng dữ liệu đồ chơi từ ví dụ trước với bộ chia tỷ lệ này

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_
array([2.,  1.,  2.])

6. 3. 1. 2. Chia tỷ lệ dữ liệu thưa thớt

Căn giữa dữ liệu thưa thớt sẽ phá hủy cấu trúc thưa thớt trong dữ liệu và do đó hiếm khi là một việc hợp lý để làm. Tuy nhiên, có thể hợp lý khi chia tỷ lệ các đầu vào thưa thớt, đặc biệt nếu các tính năng ở các tỷ lệ khác nhau

được thiết kế đặc biệt để mở rộng quy mô dữ liệu thưa thớt và là cách được đề xuất để thực hiện việc này. Tuy nhiên, có thể chấp nhận ma trận

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
3 làm đầu vào, miễn là ___5_______1 được chuyển rõ ràng cho hàm tạo. Nếu không, một
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
5 sẽ được nâng lên vì việc định tâm âm thầm sẽ phá vỡ tính thưa thớt và thường làm hỏng quá trình thực thi do vô tình phân bổ quá nhiều bộ nhớ. không thể được trang bị cho các đầu vào thưa thớt, nhưng bạn có thể sử dụng phương pháp
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
7 trên các đầu vào thưa thớt

Lưu ý rằng bộ chia tỷ lệ chấp nhận cả định dạng Hàng thưa được nén và Cột thưa được nén (xem

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
8 và
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
9). Bất kỳ đầu vào thưa thớt nào khác sẽ được chuyển đổi thành biểu diễn Hàng thưa được nén. Để tránh các bản sao bộ nhớ không cần thiết, nên chọn biểu diễn CSR hoặc CSC ngược dòng

Cuối cùng, nếu dự kiến ​​dữ liệu trung tâm đủ nhỏ, thì việc chuyển đổi rõ ràng đầu vào thành một mảng bằng cách sử dụng phương pháp

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_
array([2.,  1.,  2.])
0 của ma trận thưa thớt là một tùy chọn khác

6. 3. 1. 3. Mở rộng dữ liệu với giá trị ngoại lai

Nếu dữ liệu của bạn chứa nhiều giá trị ngoại lệ, việc chia tỷ lệ bằng cách sử dụng giá trị trung bình và phương sai của dữ liệu có thể không hoạt động tốt. Trong những trường hợp này, bạn có thể sử dụng thay thế thả vào. Nó sử dụng các ước tính mạnh mẽ hơn cho trung tâm và phạm vi dữ liệu của bạn

Người giới thiệu

Thảo luận thêm về tầm quan trọng của việc định tâm và chia tỷ lệ dữ liệu có sẵn trên Câu hỏi thường gặp này. Tôi có nên chuẩn hóa/chuẩn hóa/chia tỷ lệ lại dữ liệu không?

Mở rộng quy mô so với làm trắng

Đôi khi, việc căn giữa và chia tỷ lệ các đối tượng địa lý một cách độc lập là không đủ, vì mô hình xuôi dòng có thể đưa ra thêm một số giả định về tính độc lập tuyến tính của các đối tượng địa lý

Để giải quyết vấn đề này, bạn có thể sử dụng với

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_
array([2.,  1.,  2.])
3 để loại bỏ thêm mối tương quan tuyến tính giữa các tính năng

6. 3. 1. 4. Ma trận hạt nhân định tâm

Nếu bạn có ma trận hạt nhân của hạt nhân \(K\) tính toán tích vô hướng trong một không gian đối tượng (có thể ngầm định) . Nói cách khác, tính toán ma trận Gram ở giữa được liên kết với hạt nhân nửa xác định dương \(\phi(\cdot)\), a can transform the kernel matrix so that it contains inner products in the feature space defined by \(\phi\) followed by the removal of the mean in that space. In other words, computes the centered Gram matrix associated to a positive semidefinite kernel \(K\) .

công thức toán học

Bây giờ chúng ta có thể xem công thức toán học vì chúng ta có trực giác. Đặt \(K\) là một ma trận nhân có dạng _______14_______6 được tính từ \(X\), a data matrix of shape

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_
array([2.,  1.,  2.])
7, during the
>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_
array([2.,  1.,  2.])
8 step. \(K\) được xác định bởi

\[K(X, X) = \phi(X). \phi(X)^{T}\]

\(\phi(X)\) là ánh xạ hàm của \(X\) to a Hilbert space. A centered kernel \(\tilde{K}\) được định nghĩa là.

\[\tilde{K}(X, X) = \tilde{\phi}(X). \tilde{\phi}(X)^{T}\]

ở đâu \(\tilde{\phi}(X)\) kết quả từ việc định tâm \ . in the Hilbert space.

Do đó, người ta có thể tính toán \(\tilde{K}\) bằng cách ánh xạ \( . Tuy nhiên, hạt nhân thường được sử dụng vì chúng cho phép một số phép tính đại số tránh tính toán rõ ràng ánh xạ này bằng cách sử dụng using the function \(\phi(\cdot)\) and center the data in this new space. However, kernels are often used because they allows some algebra calculations that avoid computing explicitly this mapping using \(\phi(\cdot)\) . Thật vậy, người ta có thể ngầm định tâm như trong Phụ lục B trong.

\[\tilde{K} = K - 1_{\text{n}_{samples}} K - K 1_{\text{n}_{samples}} + 1_{\text{n}_{samples}}

\(1_{\text{n}_{samples}}\) là ma trận của

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_
array([2.,  1.,  2.])
6 trong đó tất cả các mục đều bằng . Trong bước
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
7, hạt nhân trở thành
. In the
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
7 step, the kernel becomes \(K_{test}(X, Y)\) được định nghĩa là.

\[K_{test}(X, Y) = \phi(Y). \phi(X)^{T}\]

\(Y\) là tập dữ liệu thử nghiệm của hình dạng

>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
>>> quantile_transformer = preprocessing.QuantileTransformer(random_state=0)
>>> X_train_trans = quantile_transformer.fit_transform(X_train)
>>> X_test_trans = quantile_transformer.transform(X_test)
>>> np.percentile(X_train[:, 0], [0, 25, 50, 75, 100]) 
array([ 4.3,  5.1,  5.8,  6.5,  7.9])
1 và do đó \(K_{test}\) is of shape
>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
>>> quantile_transformer = preprocessing.QuantileTransformer(random_state=0)
>>> X_train_trans = quantile_transformer.fit_transform(X_train)
>>> X_test_trans = quantile_transformer.transform(X_test)
>>> np.percentile(X_train[:, 0], [0, 25, 50, 75, 100]) 
array([ 4.3,  5.1,  5.8,  6.5,  7.9])
2. In this case, centering \(K_{test}\) được thực hiện như.

\[\tilde{K}_{test}(X, Y) = K_{test} - 1'_{\text{n}_{samples}} K - K_{test} 1_{\text{n}_

\(1'_{\text{n}_{samples}}\) là một ma trận có dạng

>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
>>> quantile_transformer = preprocessing.QuantileTransformer(random_state=0)
>>> X_train_trans = quantile_transformer.fit_transform(X_train)
>>> X_test_trans = quantile_transformer.transform(X_test)
>>> np.percentile(X_train[:, 0], [0, 25, 50, 75, 100]) 
array([ 4.3,  5.1,  5.8,  6.5,  7.9])
2 trong đó tất cả các phần tử đều bằng \(\frac{1}{\text{n}_{samples}}\).

Người giới thiệu

[]

B. Scholkopf, A. Smola và K. R. Müller, “Phân tích thành phần phi tuyến như một vấn đề giá trị riêng của hạt nhân. ” Thần kinh tính toán 10. 5 (1998). 1299-1319

6. 3. 2. Biến đổi phi tuyến tính

Hai loại chuyển đổi có sẵn. biến đổi lượng tử và biến đổi năng lượng. Cả biến đổi lượng tử và biến đổi lũy thừa đều dựa trên phép biến đổi đơn điệu của các đối tượng địa lý và do đó bảo toàn thứ hạng của các giá trị dọc theo mỗi đối tượng địa lý

Biến đổi lượng tử đưa tất cả các đối tượng vào cùng một phân phối mong muốn dựa trên công thức \(G^{-1}(F(X))\) where \(F\) is the cumulative distribution function of the feature and \(G^{-1}\) the quantile function of the desired output distribution \(G\). This formula is using the two following facts: (i) if \(X\) là biến ngẫu nhiên có hàm phân phối tích lũy liên tục \(F\ . Bằng cách thực hiện chuyển đổi thứ hạng, biến đổi lượng tử làm mịn các phân phối bất thường và ít bị ảnh hưởng bởi các ngoại lệ hơn so với các phương pháp chia tỷ lệ. Tuy nhiên, nó làm sai lệch các mối tương quan và khoảng cách bên trong và giữa các đối tượng địa lý. then \(F(X)\) is uniformly distributed on \([0,1]\); (ii) if \(U\) is a random variable with uniform distribution on \([0,1]\) then \(G^{-1}(U)\) has distribution \(G\). By performing a rank transformation, a quantile transform smooths out unusual distributions and is less influenced by outliers than scaling methods. It does, however, distort correlations and distances within and across features.

Biến đổi lũy thừa là một họ các phép biến đổi tham số nhằm mục đích ánh xạ dữ liệu từ bất kỳ phân phối nào gần với phân phối Gaussian

6. 3. 2. 1. Ánh xạ tới phân phối đồng nhất

cung cấp một phép biến đổi phi tham số để ánh xạ dữ liệu thành một phân phối đồng nhất với các giá trị từ 0 đến 1

>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
>>> quantile_transformer = preprocessing.QuantileTransformer(random_state=0)
>>> X_train_trans = quantile_transformer.fit_transform(X_train)
>>> X_test_trans = quantile_transformer.transform(X_test)
>>> np.percentile(X_train[:, 0], [0, 25, 50, 75, 100]) 
array([ 4.3,  5.1,  5.8,  6.5,  7.9])

Đặc điểm này tương ứng với chiều dài đài hoa tính bằng cm. Sau khi chuyển đổi lượng tử được áp dụng, các mốc đó tiếp cận gần với các phân vị được xác định trước đó

>>> np.percentile(X_train_trans[:, 0], [0, 25, 50, 75, 100])
.. 
array([ 0.00.. ,  0.24...,  0.49...,  0.73...,  0.99.. ])

Điều này có thể được xác nhận trên một bộ thử nghiệm độc lập với các nhận xét tương tự

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
0

6. 3. 2. 2. Ánh xạ tới phân phối Gaussian

Trong nhiều tình huống lập mô hình, tính quy tắc của các tính năng trong tập dữ liệu là mong muốn. Biến đổi lũy thừa là một họ các phép biến đổi tham số, đơn điệu nhằm mục đích ánh xạ dữ liệu từ bất kỳ phân phối nào đến gần với phân phối Gaussian nhất có thể để ổn định phương sai và giảm thiểu độ lệch

hiện đang cung cấp hai phép biến đổi năng lượng như vậy, phép biến đổi Yeo-Johnson và phép biến đổi Box-Cox

Phép biến đổi Yeo-Johnson được cho bởi

\[\begin{split}x_i^{(\lambda)} = \begin{cases} [(x_i + 1)^\lambda - 1] / \lambda & \text{if } \lambda \neq 0, x_i \

trong khi biến đổi Box-Cox được đưa ra bởi

\[\begin{split}x_i^{(\lambda)} = \begin{cases} \dfrac{x_i^\lambda - 1}{\lambda} & \text{if } \lambda \neq 0, \\[

Box-Cox chỉ có thể được áp dụng cho dữ liệu xác thực nghiêm ngặt. Trong cả hai phương pháp, phép biến đổi được tham số hóa bởi \(\lambda\) , được xác định thông qua ước tính khả năng xảy ra tối đa. Dưới đây là một ví dụ về việc sử dụng Box-Cox để ánh xạ các mẫu được rút ra từ phân phối chuẩn logic sang phân phối chuẩn.

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
1

Mặc dù ví dụ trên đặt tùy chọn

>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
>>> quantile_transformer = preprocessing.QuantileTransformer(random_state=0)
>>> X_train_trans = quantile_transformer.fit_transform(X_train)
>>> X_test_trans = quantile_transformer.transform(X_test)
>>> np.percentile(X_train[:, 0], [0, 25, 50, 75, 100]) 
array([ 4.3,  5.1,  5.8,  6.5,  7.9])
6 thành
>>> from sklearn.datasets import load_iris
>>> from sklearn.model_selection import train_test_split
>>> X, y = load_iris(return_X_y=True)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
>>> quantile_transformer = preprocessing.QuantileTransformer(random_state=0)
>>> X_train_trans = quantile_transformer.fit_transform(X_train)
>>> X_test_trans = quantile_transformer.transform(X_test)
>>> np.percentile(X_train[:, 0], [0, 25, 50, 75, 100]) 
array([ 4.3,  5.1,  5.8,  6.5,  7.9])
7, nhưng sẽ áp dụng chuẩn hóa phương sai đơn vị, trung bình bằng 0 cho đầu ra được chuyển đổi theo mặc định

Dưới đây là các ví dụ về Box-Cox và Yeo-Johnson được áp dụng cho các phân phối xác suất khác nhau. Lưu ý rằng khi áp dụng cho một số phân phối nhất định, các phép biến đổi lũy thừa đạt được kết quả rất giống Gaussian, nhưng với những phân phối khác, chúng không hiệu quả. Điều này nhấn mạnh tầm quan trọng của việc trực quan hóa dữ liệu trước và sau khi chuyển đổi

Chuẩn hóa dữ liệu 0 thành 1 Python

Cũng có thể ánh xạ dữ liệu thành phân phối chuẩn bằng cách sử dụng bằng cách đặt

>>> np.percentile(X_train_trans[:, 0], [0, 25, 50, 75, 100])
.. 
array([ 0.00.. ,  0.24...,  0.49...,  0.73...,  0.99.. ])
0. Sử dụng ví dụ trước với bộ dữ liệu iris

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
2

Do đó, trung vị của đầu vào trở thành trung vị của đầu ra, có tâm là 0. Đầu ra bình thường được cắt bớt sao cho giá trị tối thiểu và tối đa của đầu vào — tương ứng với các lượng tử 1e-7 và 1 - 1e-7 — không trở thành vô hạn khi chuyển đổi

6. 3. 3. Chuẩn hóa

Chuẩn hóa là quá trình nhân rộng các mẫu riêng lẻ để có định mức đơn vị. Quá trình này 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

Giả định này là cơ sở của Mô hình Không gian Vector thường được sử dụng trong ngữ cảnh phân loại và phân cụm văn bản

Hàm cung cấp một cách nhanh chóng và dễ dàng để thực hiện thao tác này trên một tập dữ liệu giống như mảng, bằng cách sử dụng các định mức

>>> np.percentile(X_train_trans[:, 0], [0, 25, 50, 75, 100])
.. 
array([ 0.00.. ,  0.24...,  0.49...,  0.73...,  0.99.. ])
2,
>>> np.percentile(X_train_trans[:, 0], [0, 25, 50, 75, 100])
.. 
array([ 0.00.. ,  0.24...,  0.49...,  0.73...,  0.99.. ])
3 hoặc
>>> np.percentile(X_train_trans[:, 0], [0, 25, 50, 75, 100])
.. 
array([ 0.00.. ,  0.24...,  0.49...,  0.73...,  0.99.. ])
4

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
3

Mô-đun

>>> X_test = np.array([[-3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])
7 cung cấp thêm một lớp tiện ích thực hiện thao tác tương tự bằng cách sử dụng API
>>> X_test = np.array([[-3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])
9 (mặc dù phương thức
>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_
array([2.,  1.,  2.])
8 là vô dụng trong trường hợp này. lớp không trạng thái vì hoạt động này xử lý các mẫu một cách độc lập)

Do đó, lớp này phù hợp để sử dụng trong những bước đầu tiên của một

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
4

Phiên bản chuẩn hóa sau đó có thể được sử dụng trên các vectơ mẫu như bất kỳ máy biến áp nào

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
5

Ghi chú. Chuẩn hóa L2 còn được gọi là tiền xử lý dấu hiệu không gian

Đầu vào thưa thớt

và chấp nhận cả ma trận giống như mảng dày đặc và ma trận thưa thớt từ scipy. thưa thớt như đầu vào

Đối với đầu vào thưa thớt, dữ liệu được chuyển đổi thành biểu diễn Hàng thưa được nén (xem

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
8) trước khi được cung cấp cho các quy trình Cython hiệu quả. Để tránh các bản sao bộ nhớ không cần thiết, nên chọn biểu diễn CSR ngược dòng

6. 3. 4. Mã hóa các tính năng phân loại

Các tính năng thường không được cung cấp dưới dạng các giá trị liên tục mà là phân loại. Ví dụ: một người có thể có các đặc điểm

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
03,
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
04,
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
05. Các tính năng như vậy có thể được mã hóa một cách hiệu quả dưới dạng số nguyên, ví dụ:
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
06 có thể được biểu thị là
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
07 trong khi
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
08 sẽ là
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
09

Để chuyển đổi các tính năng phân loại thành mã số nguyên như vậy, chúng ta có thể sử dụng. Công cụ ước tính này biến đổi từng tính năng phân loại thành một tính năng mới của số nguyên (0 đến n_categories - 1)

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
6

Tuy nhiên, biểu diễn số nguyên như vậy có thể không được sử dụng trực tiếp với tất cả các công cụ ước tính scikit-learning, vì những công cụ này mong đợi đầu vào liên tục và sẽ giải thích các danh mục được sắp xếp theo thứ tự, điều này thường không được mong muốn (i. e. bộ trình duyệt được sắp xếp tùy ý)

Theo mặc định, cũng sẽ chuyển qua các giá trị bị thiếu được biểu thị bằng

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
12

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
7

cung cấp tham số

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
14 để mã hóa các giá trị còn thiếu mà không cần tạo đường dẫn và sử dụng

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
8

Quá trình xử lý trên tương đương với đường ống sau

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
9

Một khả năng khác để chuyển đổi các tính năng phân loại thành các tính năng có thể được sử dụng với các công cụ ước tính scikit-learning là sử dụng một trong K, còn được gọi là mã hóa một lần hoặc giả. Loại mã hóa này có thể thu được bằng , biến đổi từng đối tượng địa lý có thể phân loại với

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
17 giá trị có thể thành
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
17 đối tượng nhị phân, với một trong số chúng là 1 và tất cả các đối tượng khác 0

Tiếp tục ví dụ trên

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
0

Theo mặc định, các giá trị mà mỗi tính năng có thể nhận được tự động suy ra từ tập dữ liệu và có thể được tìm thấy trong thuộc tính

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
19

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
1

Có thể chỉ định điều này một cách rõ ràng bằng cách sử dụng tham số

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
20. Có hai giới tính, bốn lục địa có thể và bốn trình duyệt web trong bộ dữ liệu của chúng tôi

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
2

Nếu có khả năng dữ liệu đào tạo có thể thiếu các tính năng phân loại, thì tốt hơn là chỉ định

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
21 thay vì đặt
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
20 theo cách thủ công như trên. Khi
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
21 được chỉ định và gặp phải các danh mục không xác định trong quá trình chuyển đổi, sẽ không có lỗi phát sinh nhưng kết quả là các cột được mã hóa một lần nóng cho tính năng này sẽ là tất cả các số không hoặc được coi là danh mục không thường xuyên nếu được bật. (
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
21 chỉ được hỗ trợ cho mã hóa một lần nóng)

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
3

Cũng có thể mã hóa từng cột thành các cột

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
25 thay vì cột
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
17 bằng cách sử dụng tham số
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
27. Tham số này cho phép người dùng chỉ định danh mục cho từng tính năng bị loại bỏ. Điều này rất hữu ích để tránh tính đồng tuyến tính trong ma trận đầu vào trong một số bộ phân loại. Chức năng như vậy rất hữu ích, chẳng hạn như khi sử dụng hồi quy không chính quy (), vì tính đồng tuyến tính sẽ khiến ma trận hiệp phương sai không khả nghịch

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
4

Người ta có thể chỉ muốn bỏ một trong hai cột cho các tính năng có 2 danh mục. Trong trường hợp này, bạn có thể đặt tham số

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
29

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
5

Trong

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
30 đã chuyển đổi, cột đầu tiên là mã hóa của đối tượng địa lý với các danh mục “nam”/”nữ”, trong khi 6 cột còn lại là mã hóa của 2 đối tượng với 3 danh mục tương ứng mỗi bên

Khi

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
31 và
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
27 không phải là Không, các danh mục không xác định sẽ được mã hóa thành tất cả các số không

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
6

Tất cả các danh mục trong

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
33 đều không xác định trong quá trình biến đổi và sẽ được ánh xạ tới tất cả các số không. Điều này có nghĩa là các danh mục không xác định sẽ có cùng ánh xạ với danh mục bị loại bỏ. . meth`OneHotEncoder. inverse_transform` sẽ ánh xạ tất cả các số 0 vào danh mục bị loại bỏ nếu danh mục bị loại bỏ và
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
34 nếu danh mục không bị loại bỏ

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
7

hỗ trợ các tính năng phân loại có giá trị bị thiếu bằng cách coi các giá trị bị thiếu là một danh mục bổ sung

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
8

Nếu một đối tượng địa lý chứa cả

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
12 và
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
34, chúng sẽ được coi là các danh mục riêng biệt

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
9

Xem các tính năng phân loại được biểu thị dưới dạng chính tả, không phải là vô hướng

6. 3. 4. 1. Danh mục không thường xuyên

hỗ trợ tổng hợp các danh mục không thường xuyên thành một đầu ra duy nhất cho từng tính năng. Các tham số để cho phép thu thập các danh mục không thường xuyên là

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
39 và
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
40

  1. >>> X_scaled.mean(axis=0)
    array([0., 0., 0.])
    
    >>> X_scaled.std(axis=0)
    array([1., 1., 1.])
    
    39 là số nguyên lớn hơn hoặc bằng 1 hoặc là số float trong khoảng
    >>> X_scaled.mean(axis=0)
    array([0., 0., 0.])
    
    >>> X_scaled.std(axis=0)
    array([1., 1., 1.])
    
    42. Nếu
    >>> X_scaled.mean(axis=0)
    array([0., 0., 0.])
    
    >>> X_scaled.std(axis=0)
    array([1., 1., 1.])
    
    39 là một số nguyên, các danh mục có số lượng nhỏ hơn
    >>> X_scaled.mean(axis=0)
    array([0., 0., 0.])
    
    >>> X_scaled.std(axis=0)
    array([1., 1., 1.])
    
    39 sẽ được coi là không thường xuyên. Nếu
    >>> X_scaled.mean(axis=0)
    array([0., 0., 0.])
    
    >>> X_scaled.std(axis=0)
    array([1., 1., 1.])
    
    39 là số thực, các danh mục có số lượng nhỏ hơn phần này trong tổng số mẫu sẽ được coi là không thường xuyên. Giá trị mặc định là 1, có nghĩa là mọi danh mục được mã hóa riêng

  2. >>> X_scaled.mean(axis=0)
    array([0., 0., 0.])
    
    >>> X_scaled.std(axis=0)
    array([1., 1., 1.])
    
    40 là
    >>> X_scaled.mean(axis=0)
    array([0., 0., 0.])
    
    >>> X_scaled.std(axis=0)
    array([1., 1., 1.])
    
    34 hoặc bất kỳ số nguyên nào lớn hơn 1. Tham số này đặt giới hạn trên cho số lượng tính năng đầu ra cho từng tính năng đầu vào.
    >>> X_scaled.mean(axis=0)
    array([0., 0., 0.])
    
    >>> X_scaled.std(axis=0)
    array([1., 1., 1.])
    
    40 bao gồm tính năng kết hợp các danh mục không thường xuyên

Trong ví dụ sau, các danh mục,

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
49 được coi là không thường xuyên

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])
0

Bằng cách đặt handle_unknown thành

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
50, các danh mục không xác định sẽ được coi là không thường xuyên

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])
1

sử dụng 'không thường xuyên' làm tên tính năng không thường xuyên

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])
2

Khi

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
52 được đặt thành
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
50 và gặp phải một danh mục không xác định trong biến đổi

  1. Nếu hỗ trợ danh mục không thường xuyên không được định cấu hình hoặc không có danh mục không thường xuyên trong quá trình đào tạo, các cột được mã hóa một lần cho tính năng này sẽ là tất cả các số không. Trong phép biến đổi nghịch đảo, một hạng mục chưa biết sẽ được ký hiệu là

    >>> X_scaled.mean(axis=0)
    array([0., 0., 0.])
    
    >>> X_scaled.std(axis=0)
    array([1., 1., 1.])
    
    34

  2. Nếu có một danh mục không thường xuyên trong quá trình đào tạo, danh mục không xác định sẽ được coi là không thường xuyên. Trong biến đổi nghịch đảo, 'infrequent_sklearn' sẽ được sử dụng để đại diện cho danh mục không thường xuyên

Các danh mục không thường xuyên cũng có thể được định cấu hình bằng cách sử dụng

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
40. Trong ví dụ sau, chúng tôi đặt
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
56 để giới hạn số lượng tính năng trong đầu ra. Điều này sẽ dẫn đến tất cả trừ danh mục
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
57 được coi là không thường xuyên, dẫn đến hai đặc điểm, một cho
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
57 và một cho danh mục không thường xuyên - tất cả đều là những danh mục khác

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])
3

Nếu cả

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
40 và
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
39 đều không phải là giá trị mặc định, thì danh mục được chọn dựa trên danh mục
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
39 đầu tiên và danh mục
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
40 được giữ nguyên. Trong ví dụ sau,
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
63 chỉ coi
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
64 là không thường xuyên, nhưng
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
65, buộc
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
66 cũng không thường xuyên

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])
4

Nếu có các danh mục không thường xuyên có cùng số lượng ở điểm cắt của

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
40, thì
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
40 đầu tiên được lấy dựa trên thứ tự từ vựng. Trong ví dụ sau, “b”, “c” và “d”, có cùng số lượng và với
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
56, “b” và “c” không phổ biến vì chúng có thứ tự từ vựng cao hơn

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])
5

6. 3. 5. Rời rạc hóa

Sự rời rạc hóa (còn được gọi là lượng tử hóa hoặc tạo thùng) cung cấp một cách để phân vùng các tính năng liên tục thành các giá trị rời rạc. Một số bộ dữ liệu có các tính năng liên tục có thể được hưởng lợi từ việc rời rạc hóa, bởi vì sự rời rạc hóa có thể chuyển đổi tập dữ liệu gồm các thuộc tính liên tục thành một tập dữ liệu chỉ có các thuộc tính danh nghĩa

Các tính năng rời rạc được mã hóa một lần có thể làm cho mô hình trở nên biểu cảm hơn, đồng thời duy trì khả năng diễn giải. Chẳng hạn, tiền xử lý với bộ phân biệt có thể đưa tính phi tuyến tính vào các mô hình tuyến tính. Để biết các khả năng nâng cao hơn, đặc biệt là các khả năng mượt mà, hãy xem thêm bên dưới

6. 3. 5. 1. K-bin rời rạc

rời rạc các tính năng thành các ngăn

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
71

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])
6

Theo mặc định, đầu ra được mã hóa một lần nóng thành một ma trận thưa thớt (Xem ) và điều này có thể được định cấu hình bằng tham số

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
72. Đối với mỗi tính năng, các cạnh của ngăn được tính toán trong thời gian
>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_
array([2.,  1.,  2.])
8 và cùng với số lượng ngăn, chúng sẽ xác định các khoảng. Do đó, đối với ví dụ hiện tại, các khoảng này được định nghĩa là

  • tính năng 1. \({[-\infty, -1), [-1, 2), [2, \infty)}\)

  • tính năng 2. \({[-\infty, 5), [5, \infty)}\)

  • tính năng 3. \({[-\infty, 14), [14, \infty)}\)

Dựa trên các khoảng thời gian bin này,

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
30 được chuyển đổi như sau

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])
7

Tập dữ liệu kết quả chứa các thuộc tính thứ tự có thể được sử dụng thêm trong một

Sự rời rạc hóa tương tự như việc xây dựng biểu đồ cho dữ liệu liên tục. Tuy nhiên, biểu đồ tập trung vào việc đếm các tính năng rơi vào các ngăn cụ thể, trong khi sự rời rạc tập trung vào việc gán giá trị tính năng cho các ngăn này

thực hiện các chiến lược tạo thùng khác nhau, có thể được chọn bằng tham số

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
77. Chiến lược 'đồng phục' sử dụng các thùng có chiều rộng không đổi. Chiến lược 'lượng tử' sử dụng các giá trị lượng tử để có các thùng được điền bằng nhau trong mỗi tính năng. Chiến lược 'kmeans' xác định các thùng dựa trên quy trình phân cụm k-mean được thực hiện độc lập trên từng tính năng

Xin lưu ý rằng người ta có thể chỉ định các thùng tùy chỉnh bằng cách chuyển một cuộc gọi có thể xác định chiến lược rời rạc tới. Chẳng hạn, chúng ta có thể sử dụng chức năng Pandas

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])
8

ví dụ

6. 3. 5. 2. Nhị phân tính năng

Tính năng nhị phân hóa tính năng là quá trình tạo ngưỡng cho các tính năng số để nhận các giá trị boolean. Điều này có thể hữu ích cho các công cụ ước tính xác suất xuôi dòng đưa ra giả định rằng dữ liệu đầu vào được phân phối theo phân phối Bernoulli đa biến. Ví dụ, đây là trường hợp của

Cộng đồng xử lý văn bản cũng thường sử dụng các giá trị tính năng nhị phân (có thể để đơn giản hóa lý luận xác suất) ngay cả khi số đếm được chuẩn hóa (a. k. a. thuật ngữ tần số) hoặc các tính năng có giá trị TF-IDF thường hoạt động tốt hơn một chút trong thực tế

Đối với , lớp tiện ích có nghĩa là được sử dụng trong giai đoạn đầu của. Phương pháp

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_
array([2.,  1.,  2.])
8 không làm gì vì mỗi mẫu được xử lý độc lập với các mẫu khác

>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[0.5       , 0.        , 1.        ],
       [1.        , 0.5       , 0.33333333],
       [0.        , 1.        , 0.        ]])
9

Có thể điều chỉnh ngưỡng của bộ nhị phân

>>> X_test = np.array([[-3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])
0

Đối với lớp, mô-đun tiền xử lý cung cấp chức năng đồng hành được sử dụng khi không cần API biến áp

Lưu ý rằng tương tự như khi

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
89 và khi cạnh thùng ở giá trị
>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
90

Đầu vào thưa thớt

và chấp nhận cả ma trận giống như mảng dày đặc và ma trận thưa thớt từ scipy. thưa thớt như đầu vào

Đối với đầu vào thưa thớt, dữ liệu được chuyển đổi thành biểu diễn Hàng thưa được nén (xem

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
8). Để tránh các bản sao bộ nhớ không cần thiết, nên chọn biểu diễn CSR ngược dòng

6. 3. 6. Tính giá trị còn thiếu

Các công cụ để quy các giá trị còn thiếu được thảo luận tại

6. 3. 7. Tạo các đặc trưng đa thức

Thông thường, việc thêm độ phức tạp vào mô hình bằng cách xem xét các đặc điểm phi tuyến tính của dữ liệu đầu vào sẽ rất hữu ích. Chúng tôi chỉ ra hai khả năng đều dựa trên đa thức. Cái đầu tiên sử dụng đa thức thuần túy, cái thứ hai sử dụng splines, i. e. đa thức từng phần

6. 3. 7. 1. Các đặc trưng của đa thức

Một phương pháp đơn giản và phổ biến để sử dụng là các tính năng đa thức, có thể nhận được các thuật ngữ tương tác và bậc cao của tính năng. Nó được thực hiện trong

>>> X_test = np.array([[-3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])
1

Các tính năng của X đã được chuyển đổi từ \((X_1, X_2)\) thành . .

Trong một số trường hợp, chỉ cần có các điều khoản tương tác giữa các tính năng và có thể nhận được điều khoản đó bằng cài đặt

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
95

>>> X_test = np.array([[-3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])
2

Các tính năng của X đã được chuyển đổi từ \((X_1, X_2, X_3)\) thành \((1, X_1, X_2, X_3, X_1X_2, X_1X_3, X_2X_3, X_1X_2X_3)\).

Lưu ý rằng các tính năng đa thức được sử dụng hoàn toàn trong các phương thức kernel (e. g. , , ) khi sử dụng đa thức

Xem hồi quy Ridge bằng cách sử dụng các tính năng đa thức đã tạo

6. 3. 7. 2. Máy biến áp spline

Một cách khác để thêm các thuật ngữ phi tuyến tính thay vì đa thức thuần túy của các tính năng là tạo các hàm cơ sở spline cho từng tính năng với. Các spline là các đa thức từng phần, được tham số hóa bởi bậc đa thức của chúng và vị trí của các nút thắt. Các thực hiện một cơ sở B-spline, cf. các tài liệu tham khảo dưới đây

Ghi chú

Việc xử lý từng tính năng riêng biệt, tôi. e. nó sẽ không cung cấp cho bạn các điều khoản tương tác

Một số ưu điểm của spline so với đa thức là

  • B-splines rất linh hoạt và mạnh mẽ nếu bạn giữ mức độ thấp cố định, thường là 3 và điều chỉnh một cách cẩn thận số lượng nút thắt. Đa thức sẽ cần một mức độ cao hơn, dẫn đến điểm tiếp theo

  • B-splines không có hành vi dao động ở các ranh giới như có đa thức (mức độ càng cao thì càng tệ). Đây được gọi là hiện tượng Runge

  • B-splines cung cấp các tùy chọn tốt cho phép ngoại suy vượt ra ngoài ranh giới, tôi. e. vượt quá phạm vi của các giá trị được trang bị. Hãy xem tùy chọn

    >>> from sklearn.datasets import make_classification
    >>> from sklearn.linear_model import LogisticRegression
    >>> from sklearn.model_selection import train_test_split
    >>> from sklearn.pipeline import make_pipeline
    >>> from sklearn.preprocessing import StandardScaler
    
    >>> X, y = make_classification(random_state=42)
    >>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
    >>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
    >>> pipe.fit(X_train, y_train)  # apply scaling on training data
    Pipeline(steps=[('standardscaler', StandardScaler()),
                    ('logisticregression', LogisticRegression())])
    
    >>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
    0.96
    
    01

  • B-splines tạo ma trận đặc trưng với cấu trúc dải. Đối với một đối tượng địa lý, mỗi hàng chỉ chứa

    >>> from sklearn.datasets import make_classification
    >>> from sklearn.linear_model import LogisticRegression
    >>> from sklearn.model_selection import train_test_split
    >>> from sklearn.pipeline import make_pipeline
    >>> from sklearn.preprocessing import StandardScaler
    
    >>> X, y = make_classification(random_state=42)
    >>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
    >>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
    >>> pipe.fit(X_train, y_train)  # apply scaling on training data
    Pipeline(steps=[('standardscaler', StandardScaler()),
                    ('logisticregression', LogisticRegression())])
    
    >>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
    0.96
    
    02 phần tử khác không, xuất hiện liên tiếp và thậm chí là dương. Điều này dẫn đến một ma trận có các thuộc tính số tốt, e. g. một số điều kiện thấp, trái ngược hoàn toàn với ma trận đa thức, có tên là ma trận Vandermonde. Số điều kiện thấp rất quan trọng đối với các thuật toán ổn định của các mô hình tuyến tính

Đoạn mã sau hiển thị các splines đang hoạt động

>>> X_test = np.array([[-3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])
3

Khi

>>> X_scaled.mean(axis=0)
array([0., 0., 0.])

>>> X_scaled.std(axis=0)
array([1., 1., 1.])
30 được sắp xếp, người ta có thể dễ dàng nhìn thấy đầu ra ma trận theo dải. Chỉ có ba đường chéo ở giữa là khác không đối với
>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
04. Mức độ càng cao, các spline càng chồng chéo

Thật thú vị, a của

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
06 giống như với
>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
08 và
>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
09 nếu
>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
10

ví dụ

Người giới thiệu

  • Eilers, P. , & Mác, B. (1996). Làm mịn linh hoạt với B-splines và Penalties. thống kê. Khoa học. 11 (1996), không. 2, 89–121

  • Perperoglou, A. , Sauerbrei, W. , Abrahamowicz, M. et al. Đánh giá về thủ tục chức năng spline trong R. BMC Med Res Methodol 19, 46 (2019)

6. 3. 8. Máy biến áp tùy chỉnh

Thông thường, bạn sẽ muốn chuyển đổi một hàm Python hiện có thành một công cụ biến áp để hỗ trợ làm sạch hoặc xử lý dữ liệu. Bạn có thể thực hiện một máy biến áp từ một chức năng tùy ý với. Ví dụ: để xây dựng một máy biến áp áp dụng phép biến đổi nhật ký trong một đường ống, hãy thực hiện

>>> X_test = np.array([[-3., -1.,  4.]])
>>> X_test_minmax = min_max_scaler.transform(X_test)
>>> X_test_minmax
array([[-1.5       ,  0.        ,  1.66666667]])
4

Bạn có thể đảm bảo rằng

>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
12 và
>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
13 là nghịch đảo của nhau bằng cách đặt
>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
14 và gọi
>>> X_train = np.array([[ 1., -1.,  2.],
..                     [ 2.,  0.,  0.],
..                     [ 0.,  1., -1.]])
...
>>> max_abs_scaler = preprocessing.MaxAbsScaler()
>>> X_train_maxabs = max_abs_scaler.fit_transform(X_train)
>>> X_train_maxabs
array([[ 0.5, -1. ,  1. ],
       [ 1. ,  0. ,  0. ],
       [ 0. ,  1. , -0.5]])
>>> X_test = np.array([[ -3., -1.,  4.]])
>>> X_test_maxabs = max_abs_scaler.transform(X_test)
>>> X_test_maxabs
array([[-1.5, -1. ,  2. ]])
>>> max_abs_scaler.scale_
array([2.,  1.,  2.])
8 trước
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))

X_scaled = X_std * (max - min) + min
7. Xin lưu ý rằng một cảnh báo được đưa ra và có thể chuyển thành một lỗi với
>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.preprocessing import StandardScaler

>>> X, y = make_classification(random_state=42)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
>>> pipe = make_pipeline(StandardScaler(), LogisticRegression())
>>> pipe.fit(X_train, y_train)  # apply scaling on training data
Pipeline(steps=[('standardscaler', StandardScaler()),
                ('logisticregression', LogisticRegression())])

>>> pipe.score(X_test, y_test)  # apply scaling on testing data, without leaking training data.
0.96
17

Phạm vi chuẩn hóa 0 1 trong Python là gì?

Python cung cấp thư viện tiền xử lý, chứa hàm normalize để chuẩn hóa dữ liệu. Nó lấy một mảng làm đầu vào và chuẩn hóa các giá trị của nó trong khoảng từ 0 đến 1 . Sau đó, nó trả về một mảng đầu ra có cùng kích thước với đầu vào.

Làm cách nào chúng ta có thể chuẩn hóa dữ liệu để tất cả các giá trị nằm trong khoảng từ 0 đến 1?

Chuẩn hóa tối thiểu-tối đa là một trong những cách phổ biến nhất để chuẩn hóa dữ liệu. Đối với mọi tính năng, giá trị tối thiểu của tính năng đó được chuyển thành 0, giá trị tối đa được chuyển thành 1 và mọi giá trị khác được chuyển thành số thập phân từ 0 đến 1.