为什么我用SVM训练预测spss数据分析结果解读的结果都是空的

使用我们学习过的LabelEncoder来转化类别特征:

 

1.2 使用管道创建工作流

很多机器学习算法要求特征取值范围要相同因此需要对特征做标准化处理。此外我们还想将原始的30维度特征壓缩至更少维度,这就需要用到主成分分析要用PCA来完成,再接着就可以进行logistic回归预测了

Pipeline对象接收元组构成的列表作为输入,每个元组苐一个值作为变量名元组第二个元素是sklearn中的transformer或Estimator。管道中间每一步由sklearn中的transformer构成最后一步是一个Estimator。

本次spss数据分析结果解读集中管道包含兩个中间步骤:StandardScaler和PCA,其都属于transformer而逻辑斯蒂回归分类器属于Estimator。

本次实例当管道pipe_lr执行fit方法时:

2)将转换后的spss数据分析结果解读输入给PCA;

对於管道来说,中间有多少个transformer都可以管道的工作方式可以用下图来展示(一定要注意管道执行fit方法,而transformer要执行fit_transform):

 

为什么要评估模型的泛化能仂相信这个大家应该没有疑惑,一个模型如果性能不好要么是因为模型过于复杂导致过拟合(高方差),要么是模型过于简单导致导致欠擬合(高偏差)如何评估它,用什么spss数据分析结果解读来评估它成为了模型评估需要重点考虑的问题。

我们常规做法就是将spss数据分析结果解读集划分为3部分,分别是训练、测试和验证彼此之间的spss数据分析结果解读不重叠。但如果我们遇见了spss数据分析结果解读量不多的時候,这种操作就显得不太现实这个时候k折交叉验证就发挥优势了。

2.1 K折交叉验证原理

先不多说先贴一张原理图(以10折交叉验证为例)。

Step 1:使用不重复抽样将原始spss数据分析结果解读随机分为k份;

Step 2:其中k-1份spss数据分析结果解读用于模型训练剩下的那1份spss数据分析结果解读用于测试模型;

Step 4:计算k折交叉验证结果的平均值作为参数/模型的性能评估。

2.1 K折交叉验证实现

K折交叉验证那么K的取值该如何确认呢?一般我们默认10折但根据实际情况有所调整。我们要知道当K很大的时候,你需要训练的模型就会很多这样子对效率影响较大,而且每个模型的训练集嘟差不多效果也差不多。我们常用的K值在5~12

我们根据k折交叉验证的原理步骤,在sklearn中进行10折交叉验证的代码实现:

当然实际使用的时候没必要这样子写,sklearn已经有现成封装好的方法直接调用即可。

 

模型准确率反馈了模型的效果大家看下图:

1)左上角子的模型偏差很高。它的训练集和验证集准确率都很低很可能是欠拟合。解决欠拟合的方法就是增加模型参数比如,构建更多的特征减小正则项。

2)祐上角子的模型方差很高表现就是训练集和验证集准确率相差太多。解决过拟合的方法有增大训练集或者降低模型复杂度比如增大正則项,或者通过特征选择减少特征数

3)右下角的模型就很好。

3.2 绘制学习曲线得到样本数与准确率的关系

10)将训练集大小划分为10个相等的區间,在0.1和1之间线性的取10个值learning_curve默认使用分层k折交叉验证计算交叉验证的准确率,我们通过cv设置k

下图可以看到,模型在测试集表现很好不过训练集和测试集的准确率还是有一段小间隔,可能是模型有点过拟合

3.3 绘制验证曲线得到超参和准确率关系

验证曲线是用来提高模型的性能,验证曲线和学习曲线很相近不同的是这里画出的是不同参数下模型的准确率而不是不同训练集大小下的准确率:

 

我们得到了參数C的验证曲线。和learning_curve方法很像validation_curve方法使用采样k折交叉验证来评估模型的性能。在validation_curve内部我们设定了用来评估的参数(这里我们设置C作为观測)。

从下图可以看出最好的C值是0.1。

网格搜索(grid search)作为调参很常用的方法,这边还是要简单介绍一下

在我们的机器学习算法中,有一类參数需要人工进行设定,我们称之为“超参”也就是算法中的参数,比如学习率、正则项系数或者决策树的深度等

网格搜索就是要找到一个最优的参数,从而使得模型的效果最佳而它实现的原理其实就是暴力搜索;即我们事先为每个参数设定一组值,然后穷举各种參数组合找到最好的那一组。

网格搜索的结果获得了指定的最优参数值c为100,gamma为0.001

4.2. 构建字典暴力检索

网格搜索的结果获得了指定的最优参數值c为1

网格搜索虽然不错,但是穷举过于耗时sklearn中还实现了随机搜索,使用 RandomizedSearchCV类随机采样出不同的参数组合。

Selection中指出使用嵌套交叉验证嘚到的测试集误差几乎就是真实误差

嵌套交叉验证外部有一个k折交叉验证将spss数据分析结果解读分为训练集和测试集,内部交叉验证用于選择模型算法

下图演示了一个5折外层交叉沿则和2折内部交叉验证组成的嵌套交叉验证,也被称为5*2交叉验证:

我们还是用到之前的spss数据分析结果解读集相关包的导入操作这里就省略了。

SVM分类器的预测准确率代码实现:

 

决策树分类器的预测准确率代码实现:

 

6.1 混淆矩阵及其实現

混淆矩阵大家应该都有听说过,大致就是长下面这样子的:

所以有几个概念需要先说明:

所以,衍生了几个常用的指标:

分类模型總体判断的准确率(包括了所有class的总体准确率)

混淆矩阵网络上有很多文章也不用说刻意地去背去记,需要的时候百度一下你就知道混淆矩阵实现代码:

 
 

6.2 相关评价指标实现

分别是准确度、recall以及F1指标的实现。

指定评价指标自动选出最优模型:

可以通过在make_scorer中设定参数确定需要鼡来评价的指标(这里用了fl_score),这个函数可以直接输出结果

如果需要理解ROC曲线,那你就需要先了解一下混淆矩阵了具体的内容可以查看一下之前的文章,这里重点引入2个概念:

对于一个特定的分类器和测试spss数据分析结果解读集显然只能得到一个分类结果,即一组FPR和TPR结果而要得到一个曲线,我们实际上需要一系列FPR和TPR的值

那么如何处理?很简单我们可以根据模型预测的概率值,并且设置不同的阈值來获得不同的预测结果什么意思?

我们需要选定阈值才能把概率转化为类别

如果我们选定阈值为0.1,那么5个样本被分进1的类别

如果选定0.3结果仍然一样

如果选了0.45作为阈值,那么只有样本4被分进0

之后把所有得到的所有分类结果计算FTR,PTR并绘制成线,就可以得到ROC曲线了当threshold(阈徝)取值越多,ROC曲线越平滑

查看下AUC和准确率的结果:

 

请问怎么得到预测值啊我只能鼡svmpredict得到精确度,不知道怎么得到预测值

我要回帖

更多关于 面板数据回归结果分析 的文章

 

随机推荐