
Python数据分析与应用(第2版)PPT课件(共9章)第6章-使用scikit-learn构建模型.pptx
37页使用使用scikit-learn构建模型构建模型 2目录目录1构建并评价聚类模型构建并评价聚类模型使用使用sklearn转换器处理数据转换器处理数据2构建并评价分类模型构建并评价分类模型3构建并评价回归模型构建并评价回归模型4 3加载加载datasets模块中的数据集模块中的数据集数据集加载函数数据集加载函数数据集任务类型数据集任务类型数据集加载函数数据集加载函数数据集任务类型数据集任务类型load_ boston回归load_breast_cancer分类、聚类fetch_california_housing回归load_iris分类、聚类load_digits分类load_wine分类load_diabetes回归load_linnerud回归 sklearn库的datasets模块集成了部分数据分析的经典数据集,读者可以使用这些数据集进行数据预处理、建 模等操作,以及熟悉sklearn的数据处理流程和建模流程datasets模块常用数据集的加载函数及其解释,如下表所示使用sklearn进行数据预处理需要用到sklearn提供的统一接口转换器(Transformer)4加载加载datasets模块中的数据集模块中的数据集from sklearn.datasets import load_diabetes#加载diabetes数据集diabetes=load_diabetes()#将数据集赋值给diabetes变量print(diabetes数据集的长度为:,len(diabetes)#使用len函数查看数据集长度print(diabetes数据集的类型为:,type(diabetes)#使用type函数查看数据集类型diabetes数据集的长度为:7diabetes数据集的类型为:如果需要加载某个数据集,那么可以将对应的函数赋值给某个变量。
加载diabetes数据集,如以下代码5加载加载datasets模块中的数据集模块中的数据集diabetes_data=diabetesdata#获取数据集的数据diabetes_target=diabetestarget#获取数据集的标签diabetes_names=diabetesfeature_names#获取数据集的特征名diabetes_desc=diabetesDESCR#获取数据集的描述信息查看对应信息只需print()输入对应变量名即可加载后的数据集可以视为一个字典,几乎所有的sklearn数据集均可以使用如下属性分别获取数据集的数据、标签、特征名称和描述信息datatargetfeature_namesDESCR获取sklearn自带数据集的内部信息,如以下代码6将数据集划分为训练集和测试集将数据集划分为训练集和测试集 在数据分析过程中,为了保证模型在实际系统中能够起到预期作用,一般需要将总样本分划分成独立的3 部分如下训练集(train set)验证集(validation set)测试集(test set)典型的划分方式如下训练集数量,占总样本数量的50%验证集数量,占总样本数量的25%。
测试集数量,占总样本数量的25%用于估计模型用于确定网络结构或控制模型复杂程度的参数用于检验最优模型的性能 7将数据集划分为训练集和测试集将数据集划分为训练集和测试集当总样本数据较少时,使用上面的方法将样本数据划分为3部分将会不合适常用的方法是留少部分样本数据做测试集,然后对其余N个样本采用K折交叉验证法其基本步骤如下将样本打乱均匀分成K份轮流选择其中K-1份做训练,剩余的一份做验证计算预测误差平方和将K次的预测误差平方和的均值作为选择最优模型结构的依据8将数据集划分为训练集和测试集将数据集划分为训练集和测试集 在sklearn的model_selection模块中提供了train_test_split函数,可实现对数据集进行拆分,train_test_split函数 的基本使用格式如下train_test_split函数是最常用的数据划分方法,在model_selection模块中还提供了其他数据集划分的函数,如PredefinedSplit函数、ShuffleSplit函数等读者可以通过查看官方文档学习其使用方法sklearn.model_selection.train_test_split(*arrays,test_size=None,train_size=None,random_state=None,shuffle=True,stratify=None)9将数据集划分为训练集和测试集将数据集划分为训练集和测试集train_test_split函数的常用参数及其说明如下表所示。
数值型数据类型数值型数据类型说明说明*arrays接收list、numpy数组、scipy-sparse矩阵、Pandas数据帧表示需要划分的数据集若为分类回归,则分别传入数据和标签;若为聚类,则传入数据无默认值test_size接收float、int表示测试集的大小若传入为float型参数值,则应介于01之间,表示测试集在总数据集中的占比;若传入为int型参数值,则表示测试样本的绝对数量默认为Nonetrain_size接收float、int表示训练集的大小,传入的参数值说明与test_size参数的参数值说明相似默认为Nonerandom_state接收int表示用于随机抽样的伪随机数发生器的状态默认为Noneshuffle接收bool表示在拆分数据集前是否对数据进行混洗默认为Truestratify接收array表示用于保持拆分前类的分布平衡默认为None 10将数据集划分为训练集和测试集将数据集划分为训练集和测试集查看对应信息只需print()输入对应变量名.shape即可train_test_split函数可分别将传入的数据集划分为训练集和测试集如果传入的是一组数据集,那么生成的就是这一组数据集随机划分后的训练集和测试集,总共两组。
如果传入的是两组数据集,则生成的训练集和测试集分别两组,总共4组将breast_cancer数据集划分为训练集和测试集,如以下代码from sklearn.model_selection import train_test_split#加载diabetes数据集diabetes_data_train,diabetes_data_test,diabetes_target_train,diabetes_target_test=#定义变量名train_test_split(diabetes_data,diabetes_target,test_size=0.2,random_state=42)#调用函数划分数据集 11使用使用sklearn转换器进行数据预处理与降维转换器进行数据预处理与降维为了帮助用户实现大量的特征处理相关操作,sklearn将相关的功能封装为转换器转换器主要包括3个方法:fit()、transform()和fit_transform()转换器的3种方法及其说明如下表所示方法名称方法名称方法说明方法说明fit()主要通过分析特征和目标值提取有价值的信息,这些信息可以是统计量、权值系数等transform()主要用于对特征进行转换。
从可利用信息的角度分为无信息转换和有信息转换无信息转换是指不利用任何其他信息进行转换,如指数函数和对数函数转换等有信息转换根据是否利用目标值向量又可分为无监督转换和有监督转换无监督转换指只利用特征的统计信息的转换,如标准化和PCA降维等有监督转换指既利用了特征信息又利用了目标值信息的转换,如通过模型选择特征和LDA降维等fit_transform()即先调用fit()方法,然后调用transform()方法 12使用使用sklearn转换器进行数据预处理与降维转换器进行数据预处理与降维目前,使用sklearn转换器能够实现对传入的NumPy数组进行如下处理标准化处理归一化处理二值化处理PCA降维等操作在第5章中,基于pandas库介绍了标准化处理的原理、概念与方法但是在数据分析过程中,各类特征处理相关的操作都需要对训练集和测试集分开进行,需要将训练集的操作规则、权重系数等应用到测试集中如果使用pandas,那么应用至测试集的过程相对烦琐,使用sklearn转换器可以解决这一困扰13使用使用sklearn转换器进行数据预处理与降维转换器进行数据预处理与降维sklearn除了提供离差标准化函数MinMaxScaler外,还提供了一系列数据预处理函数,如下表所示。
函数名称函数名称函数说明函数说明StandardScaler对特征进行标准差标准化Normalizer对特征进行归一化Binarizer对定量特征进行二值化处理OneHotEncoder对定性特征进行独热编码处理FunctionTransformer对特征进行自定义函数变换 14使用使用sklearn转换器进行数据预处理与降维转换器进行数据预处理与降维 sklearn除了提供基本的特征变换函数外,还提供了降维算法、特征选择算法,这些算法的使用也是通过转换器的方式进行的sklearn的decomposition模块中提供了PCA类,可实现对数据集进行PCA降维,PCA类的基本使用格式如下class sklearn.decomposition.PCA(n_components=None,*,copy=True,whiten=False,svd_solver=auto,tol=0.0,iterated_power=auto,random_state=None)15使用使用sklearn转换器进行数据预处理与降维转换器进行数据预处理与降维PCA类常用参数及其说明如下表所示参数名称参数名称参数说明参数说明n_components接收int、float、mle。
表示降维后要保留的特征纬度数目若未指定参数值,则表示所有特征均会被保留下来;若传入为int型参数值,则表示将原始数据降低到n个维度;若传入为float型参数值,则将根据样本特征方差来决定降维后的维度数;若赋值为“mle”,则将会使用MLE算法来根据特征的方差分布情况自动选择一定数量的主成分特征来降维默认为Nonecopy接收bool表示是否在运行算法时将原始训练数据进行复制若为True,则运行算法后原始训练数据的值不会有任何改变;若为False,则运行算法后原始训练数据的值将会发生改变默认为Truewhiten接收bool表示对降维后的特征进行标准化处理,使得具有相同的方差默认为Falsesvd_solver接收str表示使用的SVD算法,可选randomized、full、arpack、autorandomized一般适用于数据量大,数据维度多,同时主成分数目比例又较低的PCA降维full是使用SciPy库实现的传统SVD算法arpack和randomized的适用场景类似,区别在于,randomized使用的是sklearn自己的SVD实现,而arpack直接使用了SciPy库的sparse SVD实现。
auto则代表PCA类会自动在上述3种算法中去权衡,选择一个合适的SVD算法来降维默认为auto 16目录目录1构建并评价聚类模型构建并评价聚类模型使用使用sklearn转换器处理数据转换器处理数据2构建并评价分类模型构建并评价分类模型3构建并评价回归模型构建并评价回归模型4 17使用使用sklearn估计器构建聚类模型估计器构建聚类模型聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度将它们划分为若干组,划分的原则是组内(内部)距离最小化,而组间(外部)距离最大化,如图所示18使用使用sklearn估计器构建聚类模型估计器构建聚类模型常用的聚类算法及其类别如下表所示算法类别算法类别包括的主要算法包括的主要算法划分(分裂)方法K-Means算法(K-平均)、K-。
