Python之 sklearn:sklearn中的RobustScaler 函数的简介及使用方法之详细攻略

简介: Python之 sklearn:sklearn中的RobustScaler 函数的简介及使用方法之详细攻略

sklearn中的RobustScaler 函数的简介及使用方法


       RobustScaler 函数使用对异常值鲁棒的统计信息来缩放特征。这个标量去除中值,并根据分位数范围(默认为IQR即四分位数范围)对数据进行缩放。IQR是第1个四分位数(第25分位数)和第3个四分位数(第75分位数)之间的范围。通过计算训练集中样本的相关统计量,对每个特征分别进行定心和缩放。然后将中值和四分位范围存储起来,使用“变换”方法用于以后的数据。

       数据集的标准化是许多机器学习估计器的常见需求。这通常是通过去除平均值和缩放到单位方差来实现的。然而,异常值往往会对样本均值/方差产生负面影响。在这种情况下,中位数和四分位范围通常会给出更好的结果。



class RobustScaler Found at: sklearn.preprocessing._data

class RobustScaler(TransformerMixin, BaseEstimator):

   """Scale features using statistics that are robust to outliers.

   This Scaler removes the median and scales the data according to the quantile range (defaults to IQR: Interquartile Range).  The IQR is the range between the 1st quartile (25th quantile) and the 3rd quartile (75th quantile).

   Centering and scaling happen independently on each feature by computing the relevant statistics on the samples in the training set. Median and interquartile range are then stored to be used on later data using the ``transform`` method.

Standardization of a dataset is a common requirement for many machine learning estimators. Typically this is done by removing the mean and scaling to unit variance. However, outliers can often influence the sample mean / variance in a negative way. In such cases, the median and the interquartile range often give better results.

   .. versionadded:: 0.17

 

   Read more in the :ref:`User Guide <preprocessing_scaler>`.

使用对异常值鲁棒的统计信息来缩放特征。

这个标量去除中值,并根据分位数范围(默认为IQR即四分位数范围)对数据进行缩放。IQR是第1个四分位数(第25分位数)和第3个四分位数(第75分位数)之间的范围。

通过计算训练集中样本的相关统计量,对每个特征分别进行定心和缩放。然后将中值和四分位范围存储起来,使用“变换”方法用于以后的数据。

数据集的标准化是许多机器学习估计器的常见需求。这通常是通过去除平均值和缩放到单位方差来实现的。然而,异常值往往会对样本均值/方差产生负面影响。在这种情况下,中位数和四分位范围通常会给出更好的结果。

. .versionadded:: 0.17

更多内容见:ref: ' User Guide  '。</preprocessing_scaler>

   Parameters

   ----------

   with_centering : boolean, True by default. If True, center the data before scaling. This will cause ``transform`` to raise an exception when attempted on sparse matrices, because centering them entails building a dense matrix which in common use cases is likely to be too large to fit in memory.

   with_scaling : boolean, True by default. If True, scale the data to interquartile range. quantile_range : tuple (q_min, q_max), 0.0 < q_min < q_max <  100.0. Default: (25.0, 75.0) = (1st quantile, 3rd quantile) = IQR. Quantile range used to calculate ``scale_``.

 

   .. versionadded:: 0.18

 

   copy : boolean, optional, default is True. If False, try to avoid a copy and do inplace scaling instead. This is not guaranteed to always work inplace; e.g. if the data is not a NumPy array or scipy.sparse CSR matrix, a copy may still be returned.

 

   Attributes

   ----------

   center_ : array of floats. The median value for each feature in the training set.

   scale_ : array of floats. The (scaled) interquartile range for each feature in the training set.

参数

----------

with_centering : boolean类型,默认为True。如果为真,在缩放前将数据居中。这将导致“转换”在尝试处理稀疏矩阵时引发异常,因为围绕它们需要构建一个密集的矩阵,在常见的用例中,这个矩阵可能太大而无法装入内存。

with_scaling : boolean类型,默认为True。如果为真,将数据缩放到四分位范围。quantile_range:元组(q_min, q_max), 0.0 < q_min < q_max < 100.0。默认:(25.0,75.0)=(第1分位数,第3分位数)= IQR。用于计算' ' scale_ ' '的分位数范围。

. .versionadded:: 0.18

copy : boolean类型,可选,默认为真。如果为False,则尽量避免复制,而改为就地缩放。这并不能保证总是有效的;例如,如果数据不是一个NumPy数组或scipy。稀疏CSR矩阵,仍可返回副本。

属性

----------

center_ : 浮点数数组。训练集中每个特征的中值。

scale_ :浮点数数组。训练集中每个特征的(缩放的)四分位范围。

   .. versionadded:: 0.17

   *scale_* attribute.

 

   Examples

   --------

   >>> from sklearn.preprocessing import RobustScaler

   >>> X = [[ 1., -2.,  2.],

   ...      [ -2.,  1.,  3.],

   ...      [ 4.,  1., -2.]]

   >>> transformer = RobustScaler().fit(X)

   >>> transformer

   RobustScaler()

   >>> transformer.transform(X)

   array([[ 0. , -2. ,  0. ],

   [-1. ,  0. ,  0.4],

   [ 1. ,  0. , -1.6]])

 

   See also

   --------

   robust_scale: Equivalent function without the estimator API.

   :class:`sklearn.decomposition.PCA`

   Further removes the linear correlation across features with

   'whiten=True'.

   Notes

   -----

   For a comparison of the different scalers, transformers, and normalizers, see :ref:`examples/preprocessing/plot_all_scaling.py

   <sphx_glr_auto_examples_preprocessing_plot_all_scaling.py>`.

 

  https://en.wikipedia.org/wiki/Median

  https://en.wikipedia.org/wiki/Interquartile_range

   """

   @_deprecate_positional_args

   def __init__(self, *, with_centering=True, with_scaling=True,

       quantile_range=(25.0, 75.0), copy=True):

       self.with_centering = with_centering

       self.with_scaling = with_scaling

       self.quantile_range = quantile_range

       self.copy = copy

 

   def fit(self, X, y=None):

       """Compute the median and quantiles to be used for scaling.

       Parameters

       ----------

       X : array-like, shape [n_samples, n_features]. The data used to compute the median and quantiles used for later scaling along the features axis.

       """

       # at fit, convert sparse matrices to csc for optimized computation of the quantiles

       X = self._validate_data(X, accept_sparse='csc', estimator=self,

        dtype=FLOAT_DTYPES,

           force_all_finite='allow-nan')

       q_min, q_max = self.quantile_range

       if not 0 <= q_min <= q_max <= 100:

           raise ValueError(

               "Invalid quantile range: %s" % str(self.quantile_range))

       if self.with_centering:

           if sparse.issparse(X):

               raise ValueError(

                   "Cannot center sparse matrices: use

                    `with_centering=False`"

                   " instead. See docstring for motivation and

                    alternatives.")

           self.center_ = np.nanmedian(X, axis=0)

       else:

           self.center_ = None

       if self.with_scaling:

           quantiles = []

           for feature_idx in range(X.shape[1]):

               if sparse.issparse(X):

                   column_nnz_data = X.data[X.indptr[feature_idx]:

                       X.indptr[feature_idx + 1]]

                   column_data = np.zeros(shape=X.shape[0], dtype=X.

                    dtype)

                   column_data[:len(column_nnz_data)] =

                    column_nnz_data

               else:

                   column_data = X[:feature_idx]

               quantiles.append(np.nanpercentile(column_data,

                       self.quantile_range))

         

           quantiles = np.transpose(quantiles)

           self.scale_ = quantiles[1] - quantiles[0]

           self.scale_ = _handle_zeros_in_scale(self.scale_, copy=False)

       else:

           self.scale_ = None

       return self

 

   def transform(self, X):

       """Center and scale the data.

       Parameters

       ----------

       X : {array-like, sparse matrix}

           The data used to scale along the specified axis.

       """

       check_is_fitted(self)

       X = check_array(X, accept_sparse=('csr', 'csc'), copy=self.

        copy,

           estimator=self, dtype=FLOAT_DTYPES,

           force_all_finite='allow-nan')

       if sparse.issparse(X):

           if self.with_scaling:

               inplace_column_scale(X, 1.0 / self.scale_)

       else:

           if self.with_centering:

               X -= self.center_

           if self.with_scaling:

               X /= self.scale_

       return X

 

   def inverse_transform(self, X):

       """Scale back the data to the original representation

       Parameters

       ----------

       X : array-like

           The data used to scale along the specified axis.

       """

       check_is_fitted(self)

       X = check_array(X, accept_sparse=('csr', 'csc'), copy=self.

        copy,

           estimator=self, dtype=FLOAT_DTYPES,

           force_all_finite='allow-nan')

       if sparse.issparse(X):

           if self.with_scaling:

               inplace_column_scale(X, self.scale_)

       else:

           if self.with_scaling:

               X *= self.scale_

           if self.with_centering:

               X += self.center_

       return X

 

   def _more_tags(self):

       return {'allow_nan':True}


相关文章
|
1天前
|
测试技术 开发者 Python
Python检查函数和方法的输入/输出
【5月更文挑战第5天】Python检查函数和方法的输入/输出
9 1
|
2天前
|
Python
在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存
【5月更文挑战第12天】在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存在,该函数对路径进行检查,存在则返回True,不存在则返回False。示例代码展示了如何检查'example.txt'文件是否存在并相应打印消息。此外,`os.path.isfile()`用于确认路径是否为文件,仅当是文件时返回True,否则返回False,同样配以示例说明其用法。
12 2
|
3天前
|
Python
【Python操作基础】——函数
【Python操作基础】——函数
|
3天前
|
Python
Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。
【5月更文挑战第11天】Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。在函数内部修改全局变量需用`global`关键字声明,否则会创建新局部变量。
12 2
|
6天前
|
Java C# 开发者
Python 中的类型注解是一种用于描述变量、函数参数和返回值预期类型的机制
【5月更文挑战第8天】Python的类型注解提升代码可读性和可维护性,虽非强制,但利于静态类型检查(如Mypy)。包括:变量注解、函数参数和返回值注解,使用内置或`typing`模块的复杂类型,自定义类型注解,以及泛型模拟。类型注解可在变量声明、函数定义和注释中使用,帮助避免类型错误,提高开发效率。
18 6
|
7天前
|
存储 Python
【Python 基础】解释reduce函数的工作原理
【5月更文挑战第6天】【Python 基础】解释reduce函数的工作原理
|
7天前
|
Python
【Python 基础】解释map函数的工作原理
【5月更文挑战第6天】【Python 基础】解释map函数的工作原理
|
3月前
|
Linux 开发工具 C语言
30天python速成-第一天(python简介及下载安装)
30天python速成-第一天(python简介及下载安装)
53 3
|
3月前
|
Linux 开发者 iOS开发
|
开发框架 数据可视化 Java
Python Qt GUI设计简介、环境下载和安装(基础篇—1)
Python Qt GUI设计简介、环境下载和安装(基础篇—1)
Python Qt GUI设计简介、环境下载和安装(基础篇—1)