(Python)如何在sklearn中进行data-rescaling?

原文(本人对文章中的部分内容进行了总结和修改):

https://machinelearningmastery.com/rescaling-data-for-machine-learning-in-python-with-scikit-learn/

首先要给大家讲一个最基本的常识。就是在任何机器学习的业务中对于数据进行预处理都是必不可少的。这就好比你中午用土豆和牛肉做土豆炖牛肉,土豆和牛肉这样的食材(数据)要先清洗干净(数据处理1)。然后分别要切成丁或者自己想要的形状(数据处理2)。牛肉也要用料酒,葡萄酒,黑胡椒,欧芹,醋等等调料腌制一样(数据处理3)。

没有数据预处理,就不能做机器学习。

在任何机器学习的业务中,数据准备(data preparation)都是不可缺少的环节。而data preparation包含以下三个步骤。

1. Data selection(数据选择)

2. Data preprocessing(数据预处理)

3. Data transformation(数据转换)

这篇文章的侧重点在第三个问题,也就是如何进行数据转换。恐怕很多朋友要问了。您这个题目明明是data-rescaling。其实data rescaling(数据改比例)其实是数据转换的一种。

那么什么是数据改比例(data rescaling)呢?这个问题其实恐怕很多朋友都遇到过。比如一个预测房地产价格的问题。你需要进行预处理的数据集合中可能含有很多种不同的指标。比如,房地产的价格是几十万元到几千万元。房地产的面积是从几十平米到几百平米。房屋内的甲醛含量是在每立方米0.000(此处省略很多0)mol左右。而许许多多的机器学习算法只有在其attribute处于相同的scale的条件下才更加有效。

这个道理大家可以使用梯度下降的观点来思考。假如在X轴上的指标是在数十万之间,而Y轴上的指标则是几十。很明显其梯度下降的速度是会受到很大影响的。

那么我们自然应该去将这些数据处理到一个互相之间比较接近的指标上。

在sklearn里您有两种简单的数据转换(Data Transformation)方法。

1. Data Normalization(将真实的数据转换到0-1区间内)

2. Data Standardization(将真实的数据转换到以0为中心,1为标准差的正态分布区间内)

我们分别使用实际的代码对这两种问题进行讲解。我们所采用的是sklearn自带的iris dataset(著名的鸢尾花数据集)

我们可以在这里先调用iris dataset的数据集。

# Normalize the data attributes for the Iris dataset.
from sklearn.datasets import load_iris
from sklearn import preprocessing
# load the iris dataset
iris = load_iris()
#print(iris.data.shape)

之后,我们从sklarn preprocessing库里分别调用normalize和scale方法。对数据集合进行处理。

# separate the data from the target attributes
X = iris.data
y = iris.target
# normalize the data attributes
normalized_X = preprocessing.normalize(X)
standardized_X = preprocessing.scale(X)
print ("normalized_X:",normalized_X)

以上是使用normalize得到的结果。
print ("standardized_X:",standardized_X)

以上是使用standardization得到的结果。

之后我们就可以得到我们想要的,被“处理过的”数据集合了。

猜你喜欢

转载自blog.csdn.net/qq_35837578/article/details/88012841