《python数据分析原理与应用》课件 王华清 第5-8章 文件的读写操作- sklearn与机器学习_第1页
《python数据分析原理与应用》课件 王华清 第5-8章 文件的读写操作- sklearn与机器学习_第2页
《python数据分析原理与应用》课件 王华清 第5-8章 文件的读写操作- sklearn与机器学习_第3页
《python数据分析原理与应用》课件 王华清 第5-8章 文件的读写操作- sklearn与机器学习_第4页
《python数据分析原理与应用》课件 王华清 第5-8章 文件的读写操作- sklearn与机器学习_第5页
已阅读5页,还剩191页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章文件的读写操作文件的读写方式r:以只读方式打开文件。文件必须存在,指针将放在文件开头。默认。rb:以二进制格式打开文件用于只读。默认模式。r+:打开文件用于读写。rb+:以二进制格式打开用于读写。w:打开文件只用于写入。文件可以不存在,会擦掉原有内容从头写。wb:以二进制格式打开文件只用于写入。w+:打开文件用于读写。wb+:以二进制格式打开文件用于读写。a:只能写,文件可以不存在,不修改原有内容,只能在结尾追加ab:以二进制格式打开文件用于追加。a+:打开文件用于读写。ab+:以二进制格式打开文件用于读写。5.1txt文件的读取5.2docx文件的读取5.3pdf文件的读取5.4CSV数据文件的读写5.4.1pandas读取csv文件5.4.2pandas写入csv文件condainstallopenpyxl-i/pypi/simple5.5Excel数据文件的读写5.5.1读取Excel文件5.5.2写入Excel文件5.6大文件数据集的读取与保存5.7批量合并excel文件5.7.1合并文件5.7批量合并excel文件5.7.1合并文件5.7.2提取多文件数据并合并5.7.3提取多个文件数据保存到一个文件的多个sheet5.7.4提取文件中多个sheet保存为一个工作表5.7.5glob的应用【应用案例】1.将数据按地区分别保存到文件“销售数据.xlsx”的四个表单里。2.读取“销售数据.xlsx”文件,汇总统计该公司各类产品的销售量、销售额、经销费用和利润,并将结果保存到“销售数据.xlsx”文件的第五个表单里。3.读取“销售数据.xlsx”文件,统计分析该公司各地区各类产品的利润额、利润率,并将结果保存到“销售数据.xlsx”文件的第六个表单里。4.选择合适的图形进行可视化分析。第6章sympy与符号计算“大数据分析技术”教学团队

经济管理学院大数据管理科学系6.1导入sympy6.2创建符号6.3定义数字6.4定义函数6.5表达式6.5.1定义表达式6.5.2表达式化简6.5.3表达式展开6.5.4因式分解6.5.5表达式求值6.6微积分6.6.1导数6.6.2积分6.6.3级数展开6.6.4极限6.6.5和与积6.7绘制函数的图像第7章scipy与科学计算大数据分析技术教学团队引言:应用sympy解方程7.1方程求解7.1.1线性方程组

方形方程组矩阵的秩:矩阵线性无关的行数或线性无关的列数,也称为该矩阵的奇异值。矩阵的迹:矩阵的主对角线元素之和。向量的范数:方程组的近似解向量与准确解向量之差称为误差向量,范数是估计误差向量大小的指标。1-范数:元素的绝对值之和;2-范数:元素的平方和的平方根;∞-范数:元素绝对值的最大值。矩阵的范数:1-范数:矩阵各个列向量元素的绝对值之和的最大值;2-范数:ATA最大特征值的平方根;∞-范数:矩阵各个行向量元素的绝对值之和的最大值。矩阵的条件数:等于A的范数与A的逆矩阵的范数的乘积(A的最大奇异值除以最小奇异值),描述矩阵性能的指标(解不因其系数矩阵的微小扰动而发生大的变化为良性矩阵。条件数越接近于1,矩阵的性能越好。病态矩阵和良性矩阵)。

矩形方程组

一个特征值的代数重数就是它在特征多项式中作为根出现的次数,几何重数就是它对应的特征空间的维数。7.1.2特征值的求解7.1.3非线性方程

单变量方程(1)二分法

定区间,找中点,中值计算两边看。同号去,异号算,零点落在异号间。周而复始怎么办?精确度上来判断。fm==0呢?iffm==0:break(2)牛顿法

割线法

非线性方程组求解

属性x:ndarray,解决方案(或不成功调用的最后一次迭代的结果)infodict:dict,带有键的可选输出字典:nfev,函数调用次数njev,雅可比调用次数fvec,在输出处评估的函数fjac,正交矩阵q,由最终近似雅可比矩阵的QR因式分解产生,按列存储r,同一矩阵的QR因式分解产生的上三角矩阵qtf,矢量(transpose(q)*fvec)ier:int,一个整数标志。如果找到解决方案,则设置为1。mesg:str,如果没有找到解决方案,会说明失败的原因。root方法

解方程组:7.2优化问题7.2.1单变量优化

scipy.optimize.brent(func,args=(),brack=None,tol=1.48e-08,full_output=0,maxiter=500)func:目标函数;args:附加参数(若有);brack:起止区间;tol:相对误差;full_output:True返回所有输出参数(xmin:最佳点。fval:最优值。iter:迭代次数。funcalls:进行的目标函数评估次数);maxiter:最大迭代次数。7.2.2双变量无约束优化问题

牛顿法优化成功终止。当前函数值:-3.867223;迭代次数:8;函数计算次数:10梯度计算次数:10;Hessian计算次数:8

暴力搜索法(全局搜索)7.2.3非线性最小二乘问题7.2.4有约束的优化问题

取值受约束

拉格朗日乘数SLSQP方法:序列最小二乘法

不等式约束

condainstall-cconda-forge/label/gcc7cvxopt

第6章

Sklearn与机器学习

(适用于大数据类各专业)

“大数据分析技术”教学团队

经济管理学院大数据管理科学系6.2多元线性回归6.2.1导入数据6.2.2查看数据6.2.3相关系数热力图6.2.4简单线性回归6.2.5逐步回归6.2.6预测分析第6章scikit-learn与机器学习6.1概述6.1.1库的安装与导入6.1.2机器学习的组成要素6.1.3机器学习的流程6.1.4样本及样本划分6.1.5泛化能力6.1.6导入或创建数据集6.1.7数据预处理6.3Lasso回归分析6.3.1导入数据6.3.2相关性分析6.3.3定义回归函数6.3.4划分数据集6.3.5误差分析6.3.6拟合模型6.4Logistic回归分析6.4.1导入数据6.4.2划分数据集第6章scikit-learn与机器学习6.4.3模型训练6.4.4结果分析6.5时间序列预测6.5.1ARIMA步骤6.5.2基本概念6.5.3导入数据6.5.4白噪声检验6.5.5单位根检验6.5.6一阶差分处理6.5.7模型选择与预测分析唐四薪主编,大数据分析实用教程,机械工业出版社,2021年06月。雷扎尔·卡里姆著,Scala和Spark大数据分析,清华大学出版社,2020年06月。余本国,python在机器学习中的应用,水利水电出版社,2019年06月。王东著,机器学习导论,清华大学出版社,2021年02月6.1机器学习概述6.1.1scikit-learn库库的安装:pipinstallscikit-learn-i

/simplescikit-learn(简记sklearn),是采用python语言实现的基于NumPy、SciPy、matplotlib扩展库的机器学习算法库,主要有分类、回归、聚类、数据将维、模型选择和数据预处理六大基本功能。6.1.2机器学习的组成要素机器学习:如果一个程序可以在任务T上,随着经验E的增加,效果P也随之增加,则称这个程序可以从经验中学习(吃十堑,长一智)。模型:假设空间(模型构成的集合)策略:从假设空间中挑选出参数最优模型的准则(误差最小)算法:从假设空间中挑选模型的方法(最优化方法)6.1.3机器学习的流程研究数据选择模型用训练数据进行模型训练(用算法搜寻模型的参数值,使代价函数最小)使用训练好的模型对新案例(样本)进行推断6.1.4样本及样本划分样本分为训练数据和测试数据。训练数据又分为训练集和验证集。训练(training):从数据中学得模型的过程称为学习(learning)或训练(training),这个过程通过执行某个学习算法来完成。训练过程中使用的数据称为训练数据(trainingdata),其中每个样本称为一个训练样本(trainingsample),训练样本组成的集合称为训练集(trainingset)。被预测的样本称为测试集(testingsample)泛化能力(generalization):学得模型适用于新样本的能力(准确率)。样本的作用:利用训练集来建立模型和参数估计,利用测试集进行模型测试。总体的均值、方差模型的参数(ANN中节点的权重)统计学机器学习参数划分样本的方法(1)train_test_split()函数划分样本fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(train_data,train_target,test_size=0.3,random_state=0)train_data:所要划分的样本特征集;train_target:待划分的样本标签test_size:样本占比(整数为测试集样本的数目);random_state:随机种子数train_test_split()函数返回4个值:训练集、测试集数据,训练集、测试集标签假设:已有样本和未知样本中蕴含相同规律。将已有的样本划分为训练集和验证集,也是基于这样的假设,即训练集蕴含的规律与验证集中蕴含的规律一致,因此,可以用训练集来训练模型,用验证集来验证模型,达到希望的效果后,再用来预测测试集。(2)k折交叉验证:针对小样本总体train_test_split()函数返回4个值(实际是一个元组)样本集TrainingfoldsTestfolds…E1E2E3E101次迭代2次迭代3次迭代10次迭代fromsklearn.model_selectionimportcross_val_predictpredicted=cross_val_predict(clf,iris.data,iris.target,cv=10)metrics.accuracy_score(iris.target,predicted)#交叉训练的结果验证结果更加稳定,尤其是在小数据集中。通过查看每份的验证结果,可以得到该数据集分布对模型的影响。更好地利用训练数据,如果是5折交叉验证,那么训练量占了80%。Clf:分类器iris.data:特征数据iris.target:类别数据模型在训练样本上产生的误差叫训练误差(trainingerror)。在测试样本上产生的误差叫测试误差(testerror)。6.1.5泛化能力

线性回归模型三次多项式模型五次多项式模型九次多项式模型训练误差20195342094测试误差578247123238492和2597781144138496泛化能力与模型复杂度:衡量模型好坏的是测试误差,它标志了模型对未知新实例的预测能力,因此一般追求的是测试误差最小的模型。模型对新实例的预测能力称为泛化能力,模型在新实例上的误差称为泛化误差。训练集、验证集的数据要尽可能充分且分布平衡,并符合一定的清洁度要求。泛化能力评估方法将训练数据划分为训练集和验证集的方法称为保持法(holdoutmethod),一般保留已知样本的20%到30%作为验证集。K-折交叉验证是将总样本集随机地划分为K个互不相交的子集。对于每个子集,将所有其它样本集作为训练集训练出模型,将该子集作为验证集,并记录验证集每一个样本的预测结果。每个子集都这样处理完后,所有样本都有一个预测值。然后与真实值进行比对,从而评估模型的效果。这个方法将每一个样本都用来进行了验证,其评估的准确性一般要高于保持法。6.1.6导入或创建数据集:导入Sklearn自带的样本数据集数据集名称调用函数适用数据规模波士顿房价数据集load_boston()回归506行*13鸢尾花数据集load_iris()分类150*4糖尿病数据集load_diabetes()回归442*10体能训练数据集load_linnerud()

手写数字图像数据集load_digits()分类5620*64脸部图像数据集fetch_olivetti_faces()降维400*64*64新闻分类数据集fetch_20newsgroups()分类

大带标签人脸数据集fetch_lfw_people()降维

大路透社新闻语料数据集fetch_rcv1()分类804414*47236特征属性:[‘sepallength(cm)’,‘sepalwidth(cm)’,‘petallength(cm)’,‘petalwidth(cm)’](萼片长度、宽度,花瓣长度、宽度)类别属性:['setosa''versicolor''virginica’]利用Sklearn生成随机的数据集make_<name>函数:make_circles():生成环形数据。make_moons():生成月亮形(半环形)数据。make_blobs():生成球型数据,多类单标签数据集。make_classification():多类单标签数据集,为每个类分配一个或多个正态分布的点集。make_gaussian_quantiles():将一个单高斯分布的点集划分为两个数量均等的点集,作为两类。make_hastie-10-2():产生一个相似的二元分类数据集,有10个维度。包括去除唯一属性、处理缺失值、属性编码、数据标准化、特征选择、主成分分析数据标准化:消除特征属性之间不同量级的影响数量级较大的属性占主导地位。

数量级差异将导致迭代收敛速度减慢。以样本距离的算法对于数量级非常敏感。常用的数据标准化方法:(1)min-max标准化(归一化):新数据=(原数据-最小值)/(最大值-最小值)归一化对离群值很敏感;当有新数据加入时,可能导致max和min值发生较大变化。归一化会改变数据的原始距离、分布,使得归一化后的数据分布呈现类圆形。优点是归一化后,最优解的寻找过程会变得更平缓,更容易正确地收敛到最优解。常用于图像处理、神经网络算法中。6.1.7数据预处理(2)z-score标准化函数StandardScaler()(规范化)新数据=(原数据-均值)/标准差如果数据服从正态分布,采用之。当不确定采用哪种方法时,就用之。常用于聚类分析、主成分分析。(3)正则化函数Normalizer()正则化的主要思想:对每个样本计算其p-范数,然后对该样本中每个元素除以该范数。正则化在逻辑回归、支持向量机、神经网络中经常使用。(4)二值化函数binarizer()6.1.8Sklearn中的模型种类x1x2x1x1*x2*x2x1*回归:梯度下降回归(SGD)、Lasso回归、岭回归等。分类:朴素贝叶斯、K近邻算法(KNN)、支持向量机(SVM)、决策树和随机森林、逻辑回归等。聚类:k均值(K-means)、层次聚类、DBSCAN。降维:主成分分析(PCA)、线性判别分析(LDA)。矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。估计器(Estimator)其实就是模型,它用于对数据的预测或回归。fit(X,y):传入数据(X)以及标签(y)即可训练模型,对于无监督学习,调用方法是fit(X)。score(x,y):用于对模型的正确率进行评分(分数范围是0-1)。predict(x):用于对数据的预测,它接受输入,并输出预测标签,输出结果的格式为numpy数组。估计器(Estimator)转化器(Transformer)用于对数据的处理,例如标准化、降维以及特征选择等。转化器具有以下方法:fit(x,y):该方法接受输入和标签,计算出数据变换的方式。transform(x):根据已经计算出的变换方式,返回对输入数据x变换后的结果(不改变x)fit_transform(x,y):该方法在计算出数据变换方式之后对输入x就地转换。转化器(Transformer)6.2多元线性回归回归分析是一种针对连续型数据进行预测方法,目的在于分析两个或多个变量之间是否相关以及相关方向和强度。回归分析解决的问题:确定是否存在相关关系,预测或控制及能达到的精度,因素分析。6.2.1导入数据分析建筑物的供热负荷和制冷负荷要求(即能源效率)与建筑参数的关系。Enb=pd.read_excel("ENB2012_data.xlsx")print(Enb.sample(5))#从数据集中随机抽取5个样本X1相对紧凑X2表面积X3墙面积X4屋顶区域X5总高度X6方向X7玻璃区域X8玻璃面积分布y1加热负载y2冷却负荷

/ml/datasets/Energy+efficiency6.2.2查看数据##查看数据基本信息E()#参数verbose=None:TrueorFalse,是否显示所有列的信息X1相对紧凑X2表面积X3墙面积X4屋顶区域X5总高度X6方向X7玻璃区域X8玻璃面积分布y1加热负载y2冷却负荷End.describe()6.2.3相关系数热力图x

:一维或二维数组。rowvar

:True(默认值)则每一行代表一个变量。否则,每一列代表一个变量,而行包含观察值。Square:为真,则将轴设置为“equal”,以便每个单元格都是方形。annot:为真,则在每个单元格中写入数据值。linewidths=0.3,linecolor=“grey”,方格间隙和颜色;cbar_kws:横向显示颜色X1-X4和Y1之间有很强相关性,且X1、X4之间还有很强的相关性。但由于X6、X8的取值较为离散,所以与Y1的相关性很小,且X6、X8之间没有相关性。分析完热力图后,将全部变量(X1-X8)作为自变量,Y1作为因变量进行多元线性回归分析模型的建立。6.2.4简单线性回归使用"Y1~X1+X2+X3+X4+X5+X6+X7+X8"定义了回归模型的形式,并使用smf.ols()建立了回归模型,用fit方法拟合了数据集Enb,最后使用print(lm.summary())输出模型的结果,3行代码就完成了模型的建立和求解。

R-squared:可决系数,用于度量因变量的变异中可由自变量解释部分所占的比例,以此来判断统计模型的解释力,越接近1说明对y的解释能力越强。Adj.R-squared:如果添加新的变量,调整R方变小,该变量多余;变大,有用。F-statistic:衡量拟合的显著性的重要程度。值越大越好。Prob(F-statistic):<α时,表示拒绝原假设,即认为模型显著。(1)模型的显著性检验模型的显著性检验主要是F检验。在statsmodels的输出结果中,会输出F-statistic值和Prob(F-statistic),如果Prob(F-statistic)<0.05,则说明在置信度为95%时,可以认为回归模型是成立的。如果Prob(F-statistic)>0.1,说明回归模型整体上没有通过显著性检验,需要进一步调整。(2)R-squared称为决定系数(R^2),用于度量因变量的变异中可由自变量解释部分所占的比例,以此来判断统计模型的解释力,取值范围为[0,1],取值越接近1,说明回归模型的模拟程度越好。此外,Adj.R-squared表示调整的决定系数。(3)AIC和BIC:均是评估统计模型的复杂度和衡量统计模型拟合优良性的标准。AIC:赤池信息量准则,建立在熵的概念基础上,假设模型的误差服从独立正态分布。由日本统计学家赤池弘次创立。AIC=(2k-2L)/n。k是所拟合模型中参数的数量,L是对数似然值,n是观测值数目。k小意味着模型简洁,L大意味着模型精确。L=-(n/2)ln(2pi)-(n/2)*ln(sse/n)-n/2,其中sse为残差平方和,L主要取决于残差平方和。模型差异主要体现在似然函数项-2ln(L),当似然函数差异不显著时,随着模型中参数个数增加,2k增大,AIC增大,从而参数个数少的模型是较好的选择。AIC越小,模型越好,通常选择AIC最小的模型。BIC=-2ln(L)+ln(n)*k。BIC的惩罚项比AIC的大,样本数量过多时,可有效防止模型精度过高造成的模型复杂度过高。AIC是从预测角度选择好的模型,BIC是从拟合角度选择对现有数据拟合最好的模型。(4)系数显著性检验:t检验。如果相应的P值<0.05(0.1),说明该系数在置信度为95%(90%)水平下,系数是显著的。如果系数不显著,说明对应的变量不能添加到模型中,需要对变量进行筛选,重新建立回归模型。

(6)条件数Cond.No:是衡量输入参数的微小变化对输出值的影响矩阵A的条件数等于A的范数与A的逆的范数的乘积,即cond(A)=‖A‖·‖A的逆‖。Cond.No.<100,说明共线性程度小;如果100<Cond.No.<1000,则存在较多的多重共线性;如果Cond.No.>1000,则存在严重的多重共线性。[1]标准误差假设误差指定为误差的协方差矩阵。[2]最小的特征值为3.81e-24。这可能表明存在强烈的多重共线性问题或数据矩阵是奇异的。核心代码归纳6.2.5逐步回归逐步回归可以自动对众多的自变量进行筛选,挑选出那些对因变量影响较大、较重要的自变量,而对因变量影响很小或者没有影响的变量则剔除。针对那些影响小的自变量可以简单的认为它是一种噪声或者干扰,它们的存在并没有提高模型的精度和可解释性,反而会使模型变得更加不稳定,预测效果更差,所以需要剔除它们来增加模型的稳定性。逐步回归也是解决模型具有多重共线性的一种办法。比如:自变量之间具有很强的线性关系,可以使用逐步回归通过剔除多余的自变量,来缓解甚至解决多重共线性问题。该方法就是针对所有的自变量组合进行回归分析,输出Bic值、Aic值、条件数Cond.No.和R-squared,然后再选择合适的模型。可以发现bic最小的回归方程只用到了(X1,X4,X5,X7,X8)5个自变量,并且R2

=0.9157,并且条件数下降到7622,接下来使用5个自变量进行多元回归分析。variablebicaicCondR_squared194(X1,X4,X5,X7,X8)3869384176220.915722118(X1,X4,X5,X7)3871384776170.914785230(X1,X2,X4,X5,X7,X8)387138381428810.916195235(X1,X3,X4,X5,X7,X8)38713838746340.916195226(X1,X2,X3,X5,X7,X8)38713838.1525000.916195选定变量formula=“Y1~X1+X4+X5+X7+X8“#选定变量lm=smf.ols(formula,Enb).fit()print(lm.summary())回归模型中R-squared=0.916非常接近1,说明该模型对原始数据拟合得较好。并且F检验的P值Prob(F-statistic)远小于0.05,说明该模型是显著的。所有系数的P值均小于0.05,说明所有自变量都是显著的。条件数为7620,相对来说大幅度减小,说明多重共线性问题得到了很好的解决。模型为:Y1=45.45–43.87*X1–0.11*X4+4.16*X5+19.93*X7+0.20*X86.2.6拟合分析2.08538946445264056.3Lasso回归分析6.3.1导入数据diabete=pd.read_csv(“diabetes.csv”,sep=“\t”)#糖尿病数据集print(diabete.sample(5))通过构造一个惩罚函数L1得到较为精炼的模型,使得它压缩一些系数,同时设定一些系数为零,以达到同时进行变量筛选和复杂度调整的目的。无论因变量是连续的还是离散的,都可以使用Lasso回归建立模型然后进行预测,或者找到对因变量影响大的自变量。6.3.2相关性分析datacor=np.corrcoef(diabete,rowvar=0)datacor=pd.DataFrame(data=datacor,columns=diabete.columns,index=diabete.columns)##热力图可视化相关系数plt.figure(figsize=(8,8))ax=sns.heatmap(datacor,square=True,annot=True,fmt=".3f",linewidths=.5,cmap="flag",cbar_kws={"fraction":0.046,"pad":0.03})ax.set_title("数据变量相关性")plt.show()6.3.3定义回归函数mean_absolute_error:平均绝对误差(MAE),用于评估预测结果和真实数据的接近程度,其值越小说明拟合效果越好。mean_squared_error:均方差(MSE),拟合数据和原始数据对应样本点的误差的平方和的均值,值越小拟合效果越好。r2_score:判定系数,是解释回归模型的方差得分,取值范围是[0,1],越接近于1说明自变量越能解释因变量方差变化。%c读入一个字符%d读入十进制整数%s读入一个字符串,遇空格、制表符或换行符结束。%f,%F,%e,%E,%g,%G用来输入实数。alphar2_scoremaeAGESEXBMIBPS1S2S3S4S5S60.63160.30993750.03840.038062-9.83873.7281580.7873160.005727-0.0422-0.63065.35402231.53080.4603361.15790.2877651.18850.082251-5.98063.0283220.6582320.028417-0.0077-0.55215.04432225.490170.4542490.42100.31913749.265750.004488-12.3784.1300380.858668-0.0130-0.0613-0.66735.413235.32860.4452690.21050.32652248.6016-0.047379-15.96824.649480.948534-0.0531-0.0732-0.69955.31777741.07110.402931.26310.28373551.35980.08722-5.46592.9224030.6380810.031031-0.0029-0.53874.97483724.61140.449945颜色可用元组表示,元组由4各元素组成(R,G,B,A),每个元素范围在[0,1]之间.6.3.6拟合模型Logistic回归模型的适用条件因变量为二分类的分类数值型变量。残差和因变量都要服从二项分布。自变量和Logistic概率是线性关系各观测对象间相互独立。6.4.1导入数据fromsklearn.linear_modelimportLogisticRegressioncredit=pd.read_excel("defaultofcreditcardclients.xls")23个自变量、1个二分类因变量Y,其中1代表还款,0代表未还款。共计30000个样本。6.4Logistic回归分析#6636个不违约,其余的违约print(credit["Y"].sum())响应函数6.4.2数据集切分trainx=['X1','X2','X3','X4','X5','X6','X7','X8','X9','X10','X11','X12’,'X13','X14','X15','X16','X17','X18','X19','X20','X21','X22','X23']Target=["Y"]##将训练集切分为训练集和验证集traindata_x,valdata_x,traindata_y,valdata_y=train_test_split(credit[trainx],credit[Target],test_size=0.25,random_state=1)print(traindata_x.sample(5))print(traindata_y.sum())定义好自变量trainx和因变量Target,用train_test_split函数将25%的数据集作为测试,剩余的数据作为训练集。使用函数LogisticRegression(penalty="l2")定义logistic回归模型。启用参数penalty="l2"代表模型使用L2范数来约束自变量。这里的L2范数和Lasso回归中的惩罚函数一样,都有对变量进行控制的作用,以防止回归模型的过拟合。最后使用metrics.classification_report()函数输出模型在测试集上的预测报告。6.4.3模型训练clf_l2_LR=LogisticRegression(penalty="l2")clf_l2_LR.fit(traindata_x,traindata_y)pre_y=clf_l2_LR.predict(valdata_x)print(metrics.classification_report(valdata_y,pre_y))classification_report函数用于显示主要分类指标的文本报告,在报告中显示每个类的精确度,召回率,F1值等信息。主要参数:valdata_y

:1维数组,或标签指示器数组/稀疏矩阵,目标值。pre_y

:1维数组,或标签指示器数组/稀疏矩阵,分类器返回的估计值。labels:array,shape=[n_labels],报表中包含的标签索引的可选列表。target_names:字符串列表,与标签匹配的可选显示名称(相同顺序)。sample_weight:类似于shape=[n_samples]的数组,可选项,样本权重。digits:int,输出浮点值的位数.fromsklearn.metricsimportclassification_reportlabel={0:'科技',1:'体育',2:'社会',3:'娱乐',4:'股票'}y_true=[0,3,2,2,1,1,4,3,2,4,1,0,0]y_pred=[0,3,1,2,1,2,4,3,2,2,1,3,0]print(classification_report(y_true,y_pred,target_names=['科技','体育','社会','娱乐','股票']))precision:精确率是针对预测结果而言的,它表示预测为正的样本中有多少是真正的正样本。recall:召回率是针对原来的样本而言的,它表示样本中的正例有多少被预测正确了。f1-score:综合评价指标是精确率和召回率的加权调和平均,更具有综合代表性。support:相应类别的数量。weightedavg:带权重平均,表示类别样本占总样本的比重与对应指标的乘积的累加和,即

precision=1.0*3/13+0.67*3/13+0.5*3/13+0.67*2/13+1.0*2/13=0.76

recall=0.67*3/13+0.67*3/13+0.67*3/13+1.0*2/13+0.5*2/13=0.69

f1-score=0.8*3/13+0.67*3/13+0.57*3/13+0.8*2/13+0.67*2/13=0.70Accuracy:准确率,也即正确预测样本量与总样本量的比值,即9/13=0.69macroavg:宏平均,表示所有类别对应指标的平均值,即precision=(1.0+0.67+0.5+0.67+1.0)/5=0.77recall=(0.67+0.67+0.67+1.0+0.5)/5=0.70f1-score=(0.8+0.67+0.57+0.8+0.67)/5=0.70该模型的平均精确率约为0.78,综合评价指标f1-score=0.78,说明模型的效果不错。下面绘制该模型的ROC曲线并计算AUC以评估模型的效果。为了得到ROC曲线,上面的代码使用predict_proba方法得到了预测的概率,并使用metrics.roc_curve()函数计算出假正例率和真正例率,用metrics.auc()函数计算出AUC,最后通过绘图得到ROC曲线。TPR=tp/(tp+fn):即真正率或灵敏度或召回率或查全率本来为正样本的样本被预测为正样本的总样本数量÷真实结果为正样本的总样本数FNR=fn/(tp+fn)=1-TPR:即假负率本来为正样本的样本被预测为负样本的总样本数量÷真实结果为正样本的总样本数FPR=fp/(fp+tn):即假正率本来为负样本的样本被预测为正样本的总样本数量÷真实结果为负样本的总样本数TNR=tn/(fp+tn)=1-FPR:即真负率或特异度本来为负样本的样本被预测为负样本的总样本数量÷真实结果为负样本的总样本数真实类别1真实类别0预测类别1Truepositives(tp)Falsepositives(fp)预测列表0Falsenegatives(fn)Turenegatives(tn)精确度或查准率=tp/(tp+fp)准确得分=(tp+tn)/(tp+fp+fn+tn)y_true=np.array([0,0,0,1,1,0,0,0,1,0])y_score=np.array([0,0,0,1,1,0,0,0,0,0])#y_score是标签数据print(metrics.roc_curve(y_true,y_score))threshold:[2,1,0]tpr:[0,0.67,1]fpr:[0,0,1]threshold返回的结果是y_score内的元素去重后‘最大值+1’的值降序排序后组成的数据,每一个元素作为阈值,数据类型是一维数组。比如y_score=np.array([0,1,2,0,3,1])对应的threshold=np.array([4,3,2,1,0])当index=0,阈值等于threshold[0]=2。此时,假定y_score中所有大于等于2的元素对应index在y_true中的样本为正样本,其他为负样本,然后与y_true对应元素对比组成混淆矩阵,因没有大于等于2的值,所以TP和FP都为0,tpr[0]=0/3=0,fpr[0]=0/7=0当index=1,阈值等于1。假定y_score中所有大于等于1的元素对应index在y_true中的样本为正样本,其他为负样本,因大于等于1的数有2个,所以TP=2和FP=0,tpr[1]=2/3=0.67,fpr[1]=0/7=0当index=2,阈值0。假定y_score中所有大于等于0的元素对应index在y_true中的样本为正样本,其他为负样本,因大于等于0的数有10个,所以TP=3和FP=7,tpr[2]=3/3=1,fpr[2]=7/7=1y_true=np.array([0,0,1,1])y_score=np.array([0.1,0.4,0.35,0.8])#y_score是概率值fpr,tpr,threshold=roc_curve(y_true,y_score)threshold:[1.8,0.8,0.4,0.35,0.1]tpr:[0.,0.5,0.5,1.,1.]fpr:[0.,0.,0.5,0.5,1.]当index=0,阈值等于threshold[0]=1.8。此时,假定y_score中所有大于等于1.8的元素对应index在y_true中的样本为正样本,其他为负样本,因没有大于等于1.8的值,所以TP和FP都为0,即tpr[0]=0/2=0.0,fpr[0]=0/2=0.0当index=1,阈值等于threshold[1]=0.8。此时,假定y_score中所有大于等于1的元素对应index在y_true中的样本为正样本,其他为负样本,因大于等于0.8的数有1个,刚好y_true中该位置元素值为1,所以TP=1和FP=0,即tpr[1]=1/2=0.5,fpr[1]=0/2=0.0当index=2,阈值等于threshold[2]=0.4。此时,假定y_score中所有大于等于0.4的元素对应index在y_true中的样本为正样本,其他为负样本,因大于等于0.4的数有2个,所以TP=1和FP=1,即tpr[2]=1/2=0.5,fpr[2]=1/2=0.5当index=3,阈值等于threshold[3]=0.35。此时,假定y_score中所有大于等于0.35的元素对应index在y_true中的样本为正样本,其他为负样本,因大于等于0.35的数有3个,所以TP=2和FP=1,即tpr[3]=2/2=1.0,fpr[3]=1/2=0.5当index=4,阈值等于threshold[4]=0.1。此时,假定y_score中所有大于等于0.1的元素对应index在y_true中的样本为正样本,其他为负样本,因大于等于0.1的数有4个,所以TP=2和FP=2,即tpr[4]=2/2=1.0,fpr[4]=2/2=1.06.5.1ARIMA(自回归综合移动平均线)步骤根据时间序列的散点图、自相关函数和偏自相关函数图识别其平稳性。对非平稳的时间序列数据进行平稳化处理。直到处理后的自相关函数和偏自相关函数的数值非显著非零。根据所识别出来的特征建立相应的时间序列模型。平稳化处理后,若偏自相关函数是截尾的,而自相关函数是拖尾的,则建立AR模型;若偏自相关函数是拖尾的,而自相关函数是截尾的,则建立MA模型;若偏自相关函数和自相关函数均是拖尾的,则序列适合ARMA模型。常用的时间序列模型有四种:自回归模型AR(p)、移动平均模型MA(q)、自回归移动平均模型ARMA(p,q)、自回归差分移动平均模型ARIMA(p,d,q),可以说前三种都是ARIMA(p,d,q)模型的特殊形式。参数估计,检验是否具有统计意义。假设检验,判断(诊断)残差序列是否为白噪声序列。利用已通过检验的模型进行预测。6.5时间序列预测6.5.2基本概念平稳性:指数据的分布在时间上平移时不发生变化。差分:指将非平稳数据转换为平稳的过程,去除其非恒定的趋势。“差分消除了时间序列水平的变化,消除了趋势和季节性,从而稳定了时间序列的平均值。”AR-自回归:及时地“回顾”过去,分析数据中先前的值,并对它们做出假设。I-表示综合:当应用差分步骤时,数据是“综合”的,以消除非平稳性。表示原始观测值的差异,以允许时间序列变得平稳,即数据值被数据值和以前的值之间的差异替换。MA-移动平均线:是将观测值与应用于滞后观测值的移动平均模型的残差之间的相关性合并。Airp=pd.read_csv("AirPassengers.csv",index_col="Month")Airp=Airp.astype("float64",copy=False)##调整数据类型##调整数据索引Airp.index=pd.date_range(start=Airp.index.values[0],periods=Airp.shape[0],freq="MS")print(Airp.head(5))print(Airp.tail(5))##该数据集为1949年到1960年的数据集Airp.plot(kind="line",figsize=(12,6))plt.grid("on")plt.show()6.5.3导入数据6.5.4白噪声检验##该检验用来检查序列是否为随机序列,如果是随机序列,那它们的值之间没有任何关系。使用LB检验来检验序列是否为白噪声,原假设为在延迟期数内序列之间相互独立。lags=[4,8,12,16,20,24,28,32,36,64,128]LB=sm.stats.diagnostic.acorr_ljungbox(Airp,lags=lags)LB=pd.DataFrame(data=np.array(LB).T,columns=["LBvalue","P-value"])LB["lags"]=lagsprint(LB)LBvalueP-valuelags0427.7386842.817731e-9141709.4844986.496271e-148821036.4819072.682212e-2141231289.0370761.137910e-2641641434.1489075.300473e-2922051606.0838170.000000e+002461732.2797060.000000e+002871792.5230030.000000e+003281866.6250620.000000e+003691960.3288570.000000e+0064105085.2314480.000000e+001286.5.5单位根检验:检验序列的平稳性dftest=sm.tsa.adfuller(Airp.Passengers,autolag='BIC')print("adf:",dftest[0])print("pvalue:",dftest[1])print("usedlag:",dftest[2])dfoutput=pd.Series(dftest[0:4],index=['TestStatistic','p-value','#LagsUsed','NumberofObservationsUsed’])print(dfoutput)adf:0.815

p-value:0.991

usedlag:13TestStatistic(检验统计量)0.815

p(值)0.991

#LagsUsed13.NumberofObservationsUsed(使用的观察次数)130.从P值>0.05说明我们不可以拒绝原假设,认为序列是不平稳的。因为不平稳可以确定参数i!=06.5.6一阶差分处理datadiff=Airp.diff().dropna()print(datadiff.describe())##将时间序列可视化datadiff.plot(kind="line",figsize=(12,6))plt.grid("on")plt.title('diffdata')plt.show()##一阶差分后序列的白噪声检验:该检验用来检查序列是否为随机序列,如果是随机序列,那它们的值之间没有任何关系。使用LB检验来检验序列是否为白噪声,原假设为在延迟期数内序列之间相互独立。lags=[4,8,12,16,20,24,28,32,36,64,128]LB=sm.stats.diagnostic.acorr_ljungbox(datadiff,lags=lags)LB=pd.DataFrame(data=np.array(LB).T,columns=["LBvalue","P-value"])LB["lags"]=lagsprint("差分后序列的白噪声检验:\

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论