sklearn提供了model_selection模型选择模块、preprocessing数据预处理模块与decompisition特征分解模块;通过这三个模块,可以实现数据预处理与模型构建前的数据标准化、二值化、数据集分割、交叉验证和PCA降维等。
(1)加载datasets中的数据集
datasets加载数据集后,可以视为一个字典,几乎所有的数据集均可使用data,target,feature_names,DESCR分别获取数据集的数据,标签,特征名称,描述信息。
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
print('breast_cancer数据集的长度为:',len(cancer))
print('breast_cancer数据集的类型为:',type(cancer))
cancer_data = cancer['data']
print('breast_cancer数据集的数据为:','\n',cancer_data)
cancer_target = cancer['target'] ## 取出数据集的标签
print('breast_cancer数据集的标签为:\n',cancer_target)
cancer_names = cancer['feature_names'] ## 取出数据集的特征名
print('breast_cancer数据集的特征名为:\n',cancer_names)
cancer_desc = cancer['DESCR'] ## 取出数据集的描述信息
print('breast_cancer数据集的描述信息为:\n',cancer_desc)
print('原始数据集数据的形状为:',cancer_data.shape)
print('原始数据集标签的形状为:',cancer_target.shape)
(2)将数据集划分为训练集和测试集
sklearn的model_selection模块提供了train_test_split(*arrays,**options)函数对数据集进行分割。
from sklearn.model_selection import train_test_split
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=42)
print('训练集数据的形状为:',cancer_data_train.shape)
print('训练集标签的形状为:',cancer_target_train.shape)
print('测试集数据的形状为:',cancer_data_test.shape)
print('测试集标签的形状为:',cancer_target_test.shape)
(3)使用sklearn转换器进行数据预处理和降维
为实现大量特征处理,sklearn将相关功能封装为转换器。主要包括3部分:fit,transform,fit_transform。目前,使用sklearn转换器可实现对传入的numpy数组进行标准化处理、归一化处理、二值化处理、PCA降维等。以下为对cancer数据集进行离差标准化:
import numpy as np
from sklearn.preprocessing import MinMaxScaler
Scaler = MinMaxScaler().fit(cancer_data_train) ##生成规则
cancer_trainScaler = Scaler.transform(cancer_data_train) ##将规则应用于训练集
cancer_testScaler = Scaler.transform(cancer_data_test) ##将规则应用于测试集
print('离差标准化前训练集数据的最小值为:',np.min(cancer_data_train))
print('离差标准化后训练集数据的最小值为:',np.min(cancer_trainScaler))
print('离差标准化前训练集数据的最大值为:',np.max(cancer_data_train))
print('离差标准化后训练集数据的最大值为:',np.max(cancer_trainScaler))
print('离差标准化前测试集数据的最小值为:',np.min(cancer_data_test))
print('离差标准化后测试集数据的最小值为:',np.min(cancer_testScaler))
print('离差标准化前测试集数据的最大值为:',np.max(cancer_data_test))
print('离差标准化后测试集数据的最大值为:',np.max(cancer_testScaler))
离差标准化后,训练集的最大值最小值限定在[0,1]之间,同时测试集应用了训练集的离差标准化规则,数据超出了[0,1],除了离差标准化函数MinMaxScaler之外,还提供了一系列预处理函数:
StandarScaler:对特征进行标准差标准化;Normalizer:对特征进行归一化; OneHotEncoder :对定性特征进行独热编码;
除了基本特征变化函数,还提供了降维算法、特征选择算法、均通过转换器的方式实现,对breast_cancer数据集进行PCA降维,代码如下:
from sklearn.decomposition import PCA
pca_model = PCA(n_components=10).fit(cancer_trainScaler) ##生成规则
cancer_trainPca = pca_model.transform(cancer_trainScaler) ##将规则应用于训练集
cancer_testPca = pca_model.transform(cancer_testScaler) ##将规则应用于测试集
print('PCA降维前训练集数据的形状为:',cancer_trainScaler.shape)
print('PCA降维后训练集数据的形状为:',cancer_trainPca.shape)
print('PCA降维前测试集数据的形状为:',cancer_testScaler.shape)
print('PCA降维后测试集数据的形状为:',cancer_testPca.shape)