[机器学习 03] 数据预处理-sklearn

数据预处理

1. 观察数据

(1)明确数据有多少特征/属性,哪些是连续的,哪些是类别(离散)的。
(2)检测数据有无缺失,对缺失的特征选择恰当的方式进行填补,使得数据完整。
(3)对连续的数值型特征进行标准化,使得均值为0, 方差为1.
(4)对类别型的特征进行one-hot编码。
(5)将需要转换成类别型的连续型数据进行二值化。
(6)为了防止过拟合或者其他原因,考虑是否对数据进行正则化。
(7)在对数据进行初探以后,发现效果不佳,可以尝试使用多项式方法,寻找非线性的关系。
(8)根据实际问题分析是否需要对特征进行相应的函数转换。

2. 数据预处理:

(1)将特征数据的分布调整成标准正太分布。(标准正态分布化)使得均值为0,方差为1。去均值,方差规模化。
(2)minmax:给定一个明确的最大值核最小值进行标准化。
(3)MaxAbsScaler:数据呗规模化到[-1,1]之间。
(4)RobustScaler:根据中位数或者四分位数去中心化数据。(适用于数据中有许多异常值。)
(5)Normailzation 正则化:将样本在向量空间模型上的一个转换。(L1,L2)
(6)二值化:根据一定的阈值,将数据分成0、1。
(7)one-hot:将类别/离散数据转换为one-hot编码形式。
(8)数据缺失,可以使用均值,中位数,众数等等。对数据进行补缺。

from sklearn import preprocessing
import numpt as np
import warnings
warnings.filterwarnings("ignore")

x = np.array(
[[1.,-1.,2.],
[2.,0.,0.],
[0.,1.,3.]])
# 标准化
x_scale = preprocessing.scale(x)
print(x_scale)
print(x_scale.mean(0), x_scale.std(0))

# minmax
scaler = preprocessing.MinMaxScaler()
x_scale = scaler.fit_transform(x)
print(x_scale)
print(x_scale.mean(0), x_scale.std(0))

# MaxAbsScaler
scaler = preprocessing.MaxAbsScaler()
x_scale = scaler.fit_transform(x)
print(x_scale)
print(x_scale.mean(0), x_scale.std(0))

# RobustScaler
scaler = preprocessing.RobustScaler()
x_scale = scaler.fit_transform(x)
print(x_scale)
print(x_scale.mean(0), x_scale.std(0))

# Noremalization
scaler = preprocessing.Normalizer(norm="l2")
x_scale = scaler.fit_transform(x)
print(x_scale)
print(x_scale.mean(0), x_scale.std(0))

# 二值化
scaler = preprocessinig.Binarizer(threshold=0)
x_scaler = scaler.fit_transform(x)
print(x_scaler)

# one-hot
env= preprocessinig.OneHotEncoder(n_values=4,sparse=False)
ans = enc.fit_transform([[1],[2],[3]])
print(ans)

# 缺失数据
imp = preprocessing.Imputer(missing_values='NaN', strategy='mean', axis=0)
# 直接补值
y_img = imp.fit_transform([[np.nan, 2], [6, np.nan], [7, 6]])
print(y_img)

#通过学习补值
imp.fit([[1,2],[np.nan,3],[7,6]])
y_imp = imp.transform([[np.nan, 2], [6, np.nan],[7,6]])
print(y_img)

猜你喜欢

转载自blog.csdn.net/weixin_41809530/article/details/106909221