5.sklearn之转换器(说白了就是,划分训练集和测试集、以及标准化、归一化数据)

版权声明:不要转载复制当原创就好了,指明下参考地址或者书目,大家一起学习进步。 https://blog.csdn.net/Monk_donot_know/article/details/86692512

1. 什么是转换器?

这就是一个名字,不要被这个名字吓一跳。很简单,就是将数据,转换一种形态。比如,将数据标准化就是一种转换,将数据分为训练集和测试集也是一种转换。

2. 测试集和训练集

2.1 训练集 、测试集、验证集

在这里插入图片描述
10折比较常用,K可以取任意值。
这篇就说一下训练集、测试集、验证集。
至于K折交叉验证的使用范围:数据量少的时候可以使用该方法拆分数据;也可以使用该方法计算K折预测误差,寻找最优参数或者最优模型。后面的文章会写,本文不介绍。

2.2 拆分训练集测试集有个问题

拆分的时候,数据并不一定是平衡的。就是说0,1分布不一定就会被均匀的抽样出来。不仅跟抽样方式有关,更加跟原样本的分布有关。具体解决方法是采用SMOTE算法对非平衡数据抽样。本文不做介绍,后面的博客会写。

2.3 代码

先来看看参数

from sklearn.model_selection import train_test_split
help(train_test_split)
train_test_split(*arrays, **options)
参数名称 说明
arrays 接收一个或多个数据集。代表需要划分的数据集。若为分类回归,则分别传入数据和标签;若为聚类,则传入数据。
test_size 接收float、int。代表测试集的大小。float表示的百分比,在0~1之间;int表示的数据量。与train_size这个参数,只需要传入一个就可。不需要两个都写。
train_size 同上,训练集的大小。只需传一个,无需重复。
random_state 随机种子编号。(这个函数出现好多次了,在numpy里面也是很常用的随机数种子设置,numpy传送门
shuffle 接收Boolean,代表是否进行有放回的抽样,若参数取值为True,则stratify参数一定不能为空。
stratify 接收array或者none。为array时候,按照传入的标签进行分层抽样。

好了介绍完毕,上代码,很简单就一两句话搞定:

from sklearn.model_selection import train_test_split
# 采用sklearn自带数据集,癌症数据
from sklearn.datasets import load_breast_cancer
cancer=load_breast_cancer()
cancer_data=cancer['data']  # 数据集
cancer_target=cancer['target']  # 标签

cancer_data_train,cancer_data_test, \
cancer_target_train,cancer_target_test= \
train_test_split(cancer_data,cancer_target,\
                 test_size=0.2,random_state=123)

print("随便看看形状",cancer_data_train.shape)

在这里插入图片描述
这个是带标签的,用于分类回归。聚类的话,就不需要传入标签。

3. 标准化

这块在pandas包的数据预处理就已经讲得比较详细了,pandas数据预处理传送门在这里。不过呢,sklearn这里直接使用函数,更便捷一点。

3.1 上离差标准化代码(举一反三就好了,其他几个用法一样)

import numpy as np
from sklearn.preprocessing import MinMaxScaler
scaler= MinMaxScaler().fit(cancer_data_train) # 生成规则
cancer_trainScaler=scaler.transform(cancer_data_train)
print("标准化之前最大值:",np.max(cancer_data_train) ,'\n',"标准化之后最大值:",np.max(cancer_trainScaler))

在这里插入图片描述

3.2 sklearn 其他标准化函数

函数名 说明
StandardScaler Z分数标准化
Normalizer 归一化
Binarizer 对定值特征二值化处理
OneHotEncoder 对定性特征进行独热编码
FunctionTransform 对特征进行自定义函数变换

猜你喜欢

转载自blog.csdn.net/Monk_donot_know/article/details/86692512