ArcsinTransformer#

ArcsinTransformer() 对数值变量应用反正弦变换。

反正弦变换,也称为反正弦平方根变换或角变换,其形式为 arcsin(sqrt(x)),其中 x 是介于 0 和 1 之间的实数。

反正弦平方根变换有助于处理概率、百分比和比例。

The ArcsinTransformer() 仅适用于值在0到1之间的数值变量。如果变量包含此范围之外的值,转换器将引发错误。

示例#

让我们从 scikit-learn 加载乳腺癌数据集,并将其分为训练集和测试集。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer

from feature_engine.transformation import ArcsinTransformer

#Load dataset
breast_cancer = load_breast_cancer()
X = pd.DataFrame(breast_cancer.data, columns=breast_cancer.feature_names)
y = breast_cancer.target

# Separate data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

现在我们想对数据框中的一些变量应用反正弦变换。这些变量的值在0-1范围内,正如我们将在接下来的直方图中看到的那样。

首先,让我们用变量名做一个列表:

vars_ = [
  'mean compactness',
  'mean concavity',
  'mean concave points',
  'mean fractal dimension',
  'smoothness error',
  'compactness error',
  'concavity error',
  'concave points error',
  'symmetry error',
  'fractal dimension error',
  'worst symmetry',
  'worst fractal dimension']

现在,让我们设置 arscin 转换器,使其仅修改之前的变量:

# set up the arcsin transformer
tf = ArcsinTransformer(variables = vars_)

# fit the transformer
tf.fit(X_train)

在应用 fit 方法时,转换器不会学习任何参数。但它会检查变量是否为数值型,并且是否在正确的值范围内。

我们现在可以继续转换变量:

# transform the data
train_t = tf.transform(X_train)
test_t = tf.transform(X_test)

就是这样,现在变量已经通过arscin公式进行了转换。

最后,让我们为每个原始变量制作一个直方图,以检查它们的分布:

# original variables
X_train[vars_].hist(figsize=(20,20))
../../_images/breast_cancer_raw.png

在上一张图片中可以看到,许多变量是偏斜的。但请注意,所有变量的值都在0到1之间。

现在,让我们检查变换后的分布:

# transformed variable
train_t[vars_].hist(figsize=(20,20))
../../_images/breast_cancer_arcsin.png

从上一张图片中可以看到,许多变量在变换后呈现出更接近高斯分布的形状。

其他资源#

有关此方法和其他特征工程方法的更多详细信息,请查看以下资源:

../../_images/feml.png

机器学习的特征工程#











或者阅读我们的书:

../../_images/cookbook.png

Python 特征工程手册#














我们的书籍和课程都适合初学者和更高级的数据科学家。通过购买它们,您正在支持 Feature-engine 的主要开发者 Sole。