数据预处理

在现实世界中,我们通常需要处理大量的原始数据。 这种原始数据不容易被机器学习算法吸收。 为了准备用于机器学习的数据,我们必须在将其应用到各种算法之前对其进行预处理。

数据标准化

常用的方法是z-score标准化,经过处理后的数据均值为0,标准差为1,

数据缩放

数据点中每个特征的值可以在随机值之间变化。 因此,有时重要的是缩放它们

数据正规化

当要调整特征向量中的值,以便可以在共同刻度上测量时,将使用数据标准化。 在机器学习中使用的最常见的标准化形式之一是调整特征向量的值,以使它们总计为1.

二值化

当您想要将数字特征向量转换为布尔向量时,将使用二进制。

One Hot Encoding

很多时候,我们处理稀疏和分散在所有地方的数值。 我们真的不需要存储这些大的值。 这是一个热编码的图片。 我们可以认为一个热编码作为一个工具来收紧特征向量。 它查看每个要素,并标识不同值的总数。 它使用一个k方案来对值进行编码。 基于此对特征向量中的每个特征进行编码。 这有助于我们在空间方面更有效率。 例如,假设我们处理4维特征向量。 为了对特征向量中的第n个特征进行编码,编码器将遍历每个特征向量中的第n个特征,并对不同值的数量进行计数。 如果不同值的数量为k,它会将该特征转换为k维向量,其中只有一个值为1,所有其他值为0.

Label encoding

在监督学习中,我们通常处理各种标签。 这些可以是数字或单词的形式。 如果它们是数字,则算法可以直接使用它们。 然而,很多时候,标签需要以人类可读的形式。 所以,人们通常用词语标记训练数据。 标签编码是指将单词标签转换为数字形式,以便算法可以理解如何对它们进行操作。

本文示例代码

# -*- coding: utf-8 -*-
import numpy as np
from sklearn import preprocessing
data = np.array([[3, -1.5, 2, -5.4], [0, 4, -0.3, 2.1], [1, 3.3, -1.9, -4.3]])
data_standardized = preprocessing.scale(data)
print ("\nMean =", data_standardized.mean(axis = 0))
print ("Std deviation =", data_standardized.std(axis = 0))
data_scaler = preprocessing.MinMaxScaler(feature_range= (0, 1))
data_scaled = data_scaler.fit_transform(data)
print ("\nMin max scaled data =", data_scaled)
data_normalized = preprocessing.normalize(data, norm='l1')
print ("\nL1 normalized data =", data_normalized)
data_binarized = preprocessing.Binarizer(threshold=1.4).transform(data)
print ("\nBinarized data =", data_binarized)
encoder = preprocessing.OneHotEncoder()
encoder.fit([[0, 2, 1, 12], [1, 3, 5, 3], [2, 3, 2, 12], [1, 2, 4, 3]])
encoded_vector = encoder.transform([[2, 3, 5, 3]]).toarray()
print ("\nEncoded vector =", encoded_vector)
label_encoder = preprocessing.LabelEncoder()
input_classes = ['audi', 'ford', 'audi', 'toyota', 'ford', 'bmw']
label_encoder.fit(input_classes)
print ("\nClass mapping:")
for i, item in enumerate(label_encoder.classes_):
    print (item, '-->', i)
labels = ['toyota', 'ford', 'audi']
encoded_labels = label_encoder.transform(labels)
print ("\nLabels =", labels)
print ("Encoded labels =", list(encoded_labels))
encoded_labels = [2, 1, 0, 3, 1]
decoded_labels = label_encoder.inverse_transform(encoded_labels)
print ("\nEncoded labels =", encoded_labels)
print ("Decoded labels =", list(decoded_labels))

代码输出:

Mean = [  5.55111512e-17  -1.11022302e-16  -7.40148683e-17  -7.40148683e-17]
Std deviation = [ 1.  1.  1.  1.]
Min max scaled data = [[ 1.          0.          1.          0.        ]
 [ 0.          1.          0.41025641  1.        ]
 [ 0.33333333  0.87272727  0.          0.14666667]]
L1 normalized data = [[ 0.25210084 -0.12605042  0.16806723 -0.45378151]
 [ 0.          0.625      -0.046875    0.328125  ]
 [ 0.0952381   0.31428571 -0.18095238 -0.40952381]]
Binarized data = [[ 1.  0.  1.  0.]
 [ 0.  1.  0.  1.]
 [ 0.  1.  0.  0.]]
Encoded vector = [[ 0.  0.  1.  0.  1.  0.  0.  0.  1.  1.  0.]]
Class mapping:
audi --> 0
bmw --> 1
ford --> 2
toyota --> 3
Labels = ['toyota', 'ford', 'audi']
Encoded labels = [3, 2, 0]
Encoded labels = [2, 1, 0, 3, 1]
Decoded labels = ['ford', 'bmw', 'audi', 'toyota', 'bmw']
本文版权归作者所有,禁止一切形式的转载,复制等操作
赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注