Numpy和Sklearn两者的区别

Numpy和Sklearn两者的区别

在本文中,我们将介绍Numpy和sklearn两者之间的区别,以及在使用中的注意事项。

阅读更多:Numpy 教程

Numpy的定义

Numpy是使用Python语言进行科学计算的核心库。其中最重要的是它的N维数组(即ndarray)对象。Numpy提供了一些快捷数学函数和数据处理工具,可以用于进行数组操作和数据处理。
例如,可以通过一下代码产生一个随机二维数组:

import numpy as np
arr = np.random.rand(2, 3)
print(arr)

# Output:
# array([[0.77860495, 0.42405582, 0.08332795],
#        [0.66088572, 0.75417526, 0.96561464]])

Sklearn的定义

Sklearn是Python环境下的机器学习库,SVM、聚类、决策树等常用机器学习算法都已经实现在sklearn库中。封装了许多经典的机器学习算法和数据处理工具。同时也是大量机器学习竞赛 (Kaggle/Opendata)的必选库。

结合Numpy,sklearn可以进行大量的实际应用,比如我们在使用StandardScaler时,怎么样保证经过StandardScaler后得到的数据经过Numpy的计算后均值为0。

Numpy和Sklearn的区别

Sklearn的StandarScaler可以将数据标准化,它会将数据的均值变为0,方差变为1,这样的处理方式使得其数据更易于分析和比较。当我们使用Numpy进行一些数学计算时,我们希望得到的是标准化数据的均值也是0,但是这时候可能会出现意想不到的问题,我们可以看下面一段代码。

from sklearn.preprocessing import StandardScaler
import numpy as np

X = np.array([3*[2], 3*[3]])
scaler = StandardScaler().fit(X)
X_std = scaler.transform(X)
print(np.mean(X_std, axis=0))

# output:
# [0. 0.]

我们期望得到的结果是[0. 0.]。然而,这个结果是有一定概率的,也就是说,当我们得到X_std后求平均值,不一定会得到[0. 0.]。事实上,结果也可能会变成[1.11022302e-16,-1.11022302e-16],这是因为numpy做不到像StandardScaler那样精确地计算。

对比差异出现的原因

在StandardScaler中,如果数据存在一个固定的偏移量或者偏离限制,那么此时就会出现上述的情况。StandardScaler产生的形式为:

z= \frac{x-\bar{x}}{\delta}

其中z是标准化后的数据,x是原始数据,\bar{x}是均值,\delta是标准差。但是,由于分布不均,因此\bar{x}可能存在一个固定的偏移量,或者存在一个偏离点的限制。在数组上进行除法时,这些固定的值将会被舍入处理,导致标准化数据的均值不再是0。

除了除法和减法之外,StandardScaler包括除以标准差矩阵以得到维度位置。在这种情况下,x-\bar{x}不会产生数字溢出,但是定值增加会导致标准化数据的均值不为0。

如何解决这个问题

解决这个问题的方法很简单,我们只需要在数组上调用round()函数即可。这样,数组上的固定偏移量和偏离点限制就可以被减轻或消除了,从而确保标准化数据的均值是0。如下所示:

from sklearn.preprocessing import StandardScaler
import numpy as np

X = np.array([3*[2], 3*[3]])
scaler = StandardScaler().fit(X)
X_std = scaler.transform(X)
print(np.mean(np.round(X_std, decimals=8), axis=0))

# output:
# [0. 0.]

在上述示例中,我们加了一个round()函数并且指定了小数点位数,以减少舍入误差,得到了正确的标准化数据的均值为[0. 0.]。

总结

本文介绍了Numpy和sklearn两者的定义,及其在实际使用中存在的差异。我们发现,由于分布不均,StandardScaler可能存在固定偏移量和偏离点限制,从而导致标准化数据的均值不为0,在使用Numpy进行计算时产生问题。但是,可以通过在数组上调用round()函数解决这个问题。因此,在使用Numpy进行数据处理时,需要注意StandardScaler标准化数据的均值问题,以免产生错误的结果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程