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

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


目录

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}

 

 

 

相关文章
|
6天前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
8天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
11天前
|
Python
python的时间操作time-函数介绍
【10月更文挑战第19天】 python模块time的函数使用介绍和使用。
17 4
|
12天前
|
存储 Python
[oeasy]python038_ range函数_大小写字母的起止范围_start_stop
本文介绍了Python中`range`函数的使用方法及其在生成大小写字母序号范围时的应用。通过示例展示了如何利用`range`和`for`循环输出指定范围内的数字,重点讲解了小写和大写字母对应的ASCII码值范围,并解释了`range`函数的参数(start, stop)以及为何不包括stop值的原因。最后,文章留下了关于为何`range`不包含stop值的问题,留待下一次讨论。
12 1
|
12天前
|
安全 数据处理 数据安全/隐私保护
python中mod函数怎么用
通过这些实例,我们不仅掌握了Python中 `%`运算符的基础用法,还领略了它在解决实际问题中的灵活性和实用性。在诸如云计算服务提供商的技术栈中,类似的数学运算逻辑常被应用于数据处理、安全加密等关键领域,凸显了基础运算符在复杂系统中的不可或缺性。
11 0
|
11天前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。
|
5天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
10天前
|
弹性计算 安全 小程序
编程之美:Python让你领略浪漫星空下的流星雨奇观
这段代码使用 Python 的 `turtle` 库实现了一个流星雨动画。程序通过创建 `Meteor` 类来生成具有随机属性的流星,包括大小、颜色、位置和速度。在无限循环中,流星不断移动并重新绘制,营造出流星雨的效果。环境需求为 Python 3.11.4 和 PyCharm 2023.2.5。
|
3天前
|
数据处理 Python
从零到英雄:Python编程的奇幻旅程###
想象你正站在数字世界的门槛上,手中握着一把名为“Python”的魔法钥匙。别小看这把钥匙,它能开启无限可能的大门,引领你穿梭于现实与虚拟之间,创造属于自己的奇迹。本文将带你踏上一场从零基础到编程英雄的奇妙之旅,通过生动有趣的比喻和实际案例,让你领略Python编程的魅力,激发内心深处对技术的渴望与热爱。 ###
|
6天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第24天】本文将带你进入Python的世界,从最基础的语法开始,逐步深入到实际的项目应用。我们将一起探索Python的强大功能和灵活性,无论你是编程新手还是有经验的开发者,都能在这篇文章中找到有价值的内容。让我们一起开启Python的奇妙之旅吧!