geekdoc-python-zh/docs/pythonbasics/136.md

4.5 KiB

如何为 scikit-learn 机器学习准备数据

原文: https://pythonbasics.org/how-to-prepare-your-data-for-machine-learning-with-scikit-learn/

如何通过 Scikit-Learn 准备要学习的数据。

如果要使用 scikit-learn 实现学习算法,则要做的第一件事就是准备数据。

这将向您决定使用的学习算法展示问题的结构。

唯一的障碍是需要一种不同的算法来启动有关要处理数据的不同假设,这有时可能需要进行不同的转换。

在准备数据以使用 scikit-learn 进行学习时,有四个经过验证的步骤。 它们包括:

  1. 重新缩放数据
  2. 数据标准化
  3. 规范化数据
  4. 将数据转换为二元

数据准备

重新缩放数据

重新缩放数据的属性,特别是当数据的属性由不同的比例组成时,这使多种学习算法可以从数据的重新缩放过程中受益,以确保数据以相同的比例出现。

此过程可称为标称化,其属性的重标范围为 0 和 1。它确保存在构成梯度下降核心的优化算法-学习算法的检查。

import pandas
import scipy
import numpy
from sklearn.preprocessing import MinMaxScaler

# data values
X = [ [110, 200], [120, 800], [310, 400], [140, 900], [510, 200], [653, 400] ,[310, 880] ]

# transofrm data
scaler = MinMaxScaler(feature_range=(0, 1))
rescaledX = scaler.fit_transform(X)

# summarize transformed data
numpy.set_printoptions(precision=2)
print(rescaledX[0:6,:])

重新缩放的值将在 0 到 1 之间:

[[0\.   0\.  ]
 [0.02 0.86]
 [0.37 0.29]
 [0.06 1\.  ]
 [0.74 0\.  ]
 [1\.   0.29]]     

在考虑中性网络权重,回归以及所有涉及距离测量的算法(例如 K 最近邻)的算法中,它也很有价值。

标准化数据

此技术在使用高斯分布的属性转换中有效。

高斯分布使用平均值为 0 且标准偏差设置为 1 的情况。逻辑回归,线性回归和线性判别分析最适合以高斯分布为输入变量,从而更好地利用了重新定标的数据。

# Standardize data (0 mean, 1 stdev)
from sklearn.preprocessing import StandardScaler
import pandas
import numpy

# data values
X = [ [110, 200], [120, 800], [310, 400], [140, 900], [510, 200], [653, 400] ,[310, 880] ]

# scaler
scaler = StandardScaler().fit(X)
rescaledX = scaler.transform(X)

# summarize transformed data
numpy.set_printoptions(precision=3)
print(rescaledX[0:6,:])

标定值:

[[-1.02  -1.178]
 [-0.968  0.901]
 [ 0.013 -0.485]
 [-0.865  1.247]
 [ 1.045 -1.178]
 [ 1.783 -0.485]]     

规范化数据

为了规范 Scikit 学习中的数据,它涉及将每个观察值重新缩放为 1 的长度-线性代数的单位形式。

使用 Scikit-learn 在 Python 中标准化数据时,最好使用 Normalizer 类软件。

# Normalize values
from sklearn.preprocessing import Normalizer
import pandas
import numpy

# data values
X = [ [110, 200], [120, 800], [310, 400], [140, 900], [510, 200], [653, 400] ,[310, 880] ]

# normalize values
scaler = Normalizer().fit(X)
normalizedX = scaler.transform(X)

# summarize transformed data
numpy.set_printoptions(precision=2)
print(normalizedX[0:6,:])

规范化的值是:

[[0.48 0.88]
 [0.15 0.99]
 [0.61 0.79]
 [0.15 0.99]
 [0.93 0.37]
 [0.85 0.52]]  

规模可变的稀疏数据集特别受益于使用距离度量(例如 K 最近邻)的算法预处理。 一个典型的例子是中性网络。 用数据制作二元

二元数据转换

可以通过将二元阈值标记为小于或等于 0 的 1 来实现。在具有清晰值的概率中很有用。

# Binary values
from sklearn.preprocessing import Binarizer
import pandas
import numpy

# data values
X = [ [110, 200], [120, 800], [310, 400], [140, 900], [510, 200], [653, 400] ,[310, 880] ]

# binarize data
binarizer = Binarizer(threshold=500).fit(X)
binaryX = binarizer.transform(X)

# summarize transformed data
numpy.set_printoptions(precision=1)
print(binaryX[0:6,:])

阈值非常重要,因为它将决定哪些值变为零或一。

[[0 0]
 [0 1]
 [0 0]
 [0 1]
 [1 0]
 [1 0]]     

另外,在为特征工程添加特征方面,它具有巨大的意义。 到目前为止,您必须熟悉使用 Scikit-learn 进行机器学习的数据准备所涉及的步骤。

请记住,涉及的四个步骤是:

  1. 重新缩放数据
  2. 数据标准化
  3. 规范化数据
  4. 使数据二元化。

下载示例和练习