3.1 模型使用技巧
通常情况下,并不能保证:
1.所有用于训练的数据特征都是最好的
2.学习得到的参数一定是最优的
3.默认配置下的模型总是最佳的
所以提升模型的性能很关键,这其中通常包括预处理数据、控制参数训练以及优化模型的配置等方法。
3.1.1 特征提升
我们通常希望对数据特征的抽取或者筛选出来达到提升模型性能的目的。所谓的特征抽取,就是逐条将原始数据转换为特征向量的形式,这个过程同时设计对数据特征的量化表示;而特征筛选则更进一步,在高纬度、以量化的特征向量中选择对指定任务更有效的特征组合,进一步提升模型性能。
3.1.1.1 特征抽取
原始数据的种类有很多种,除了数字化的信息数据,还有大量的符号化的文本,然而我们无法直接将符号化的文本本身用于计算任务,而是需要通过某些处理手段,预先将文本量化为特征向量。
有些用符号表示的数据特征已经相对的机构化了,并用字典这种数据结构进行存储,这时,我们可以使用DictVectorizer对特征进行抽取和向量化。
由上述代码可知,DictVectorizer对于类别型与数值型特征的处理方式由很大的差异。由于类别性特征无法直接数字化显示,因此需要借助原特征的名称,组合产生新的特征并采用0/1的二值方式进行量化,而数值型的特征转换则相对方便,一般情况下只需要维持原始特征值即可。
如果是村文本形式的存储,都是一系列的字符串,处理这些数据的时候常用的文本特征表示方法为词袋法,不考虑词语的出现顺序,只是将训练文本中的每个出现过的词汇单独的视作一列特征,我们称这些不重复的词汇集合为词表。于是每条训练文本都可以在高纬度的词表上映射出一个特征向量。而特征数值的常见计算方式为2种,分别是: CountVectorizer和TfidiVectorizer,对于每一条训练文本,CountVectorizer只考虑每种词汇在该条训练文本中出现的频率,而TfidiVectorizer除了考量某一词汇在当前文本中出现的频率之外,同时关注包含这个词汇的文本数条数的倒数(Inverse Document Frequency)。相比之下训练文本的条数越多,TfidiVectorizer这种特征量化方式就更有优势。因为我们的目的就是找出所在的文本含义更有贡献的重要词汇。如果一个词几乎在每个文本中都要出现,说明这是一个常用的词汇,反而不会帮助模型对文本的分类,在训练文本量较多的时候,利用TfidiVectorizer压制这些常用词汇对分类决策的干扰,往往可以起到提高模型性能的作用。
我们通常称这些在每条文本中都出现的常用词汇为停用词(Stop Words),如英文中的the、a等。这些停用词在文本特征抽取中经常以黑名单的方式过滤掉,并且提高模型的性能表现。
|
|
|
|
从上面可以知道使用TdifiCectorizer比CountVectorizer在不去掉停用词的时候,对训练和测试文本就行特征量化,并利用默认配置的朴素贝叶斯分类器,在测试文本上可以得到TdifiVectorizer可以得到更高的准确率。而且平均精度、召回率和F1指标也都有提升。去掉停用词的时候效果更加好。
TdifiVectorizer的特征抽取和量化方法更加具备优势,使用停用词比不用停用词的模型综合性能要高.
3.1.1.2 特征筛选
良好的数据特征组合不需要太多,就可以是的模型的性能表现突出。冗余的特征虽然不会影响到模型的性能,不过却是的CPU的计算做了无用功,二不良的特征还会降低模型的精度,所以特征的筛选很重要。
特征筛选与PCA这类通过选择主成分特征进行重建的方法略有区别:对于PCA而言,我们经常无法解释重建之后的特征,但是特征筛选不存在对特征值的修改,更加侧重于寻找那些对模型的性能提升较大的少量特征。
3.1.2 模型正则化
通常我们需要重视模型的繁华里,也就是对未知的数据能有更好的适应能力表现能力,防止过拟合或者欠拟合。而通过正则化的方式可以加强模型的泛化力,避免模型过拟合。
3.1.2.1 欠拟合与过拟合
拟合就是指机器学习模型在训练过程中,通过更新参数,使得模型不断的契合可以观测数据(训练集)的过程。
一次多项式
二次多项式
四次多项式
准确度对比
如出现以上情况,当模型复杂度很低的时候Degree=1时,模型不仅没有对训练集上的数据有良好的拟合状态,而且在测试数据集上也表现平平,这种状态叫欠拟合(Underfitting),但是如果一味追求很高的模型复杂度如Degree=4的时候,尽管模型几乎完全的拟合了所有的训练数据,但是模型也会变得非常波动,几乎丧失了对未知数据的预测能力,这种情况叫做过拟合(Overfitting),这两种情况都是缺乏模型泛化力的表现。
为了能够在增加模型复杂度提高在训练集数据上表现性能的同时,又能够兼顾模型的泛化力,防止发生过拟合,平衡这个两难问题,采用模型正则化的方法,
3.1.2.2 L 1 范数正则化
Lass使得4次3次多项式的特征参数都为0,使得特征更为稀疏,并且调高了模型的性能。
3.1.2.3 L 2 范数正则化
L2也是增加惩罚项也叫ridge
ridge模型你和后参数之间的差异非常的小,不论是Lasso还是ridge的惩罚项中都会有一个因子兰布达进行调节,尽管其不属于拟合的参数,但是却有着非常重要的作用。
3.1.3 模型检验
3.1.3.1 留一验证
就是从任务提供的数据中,随机采样一定比例作为训练集,剩下的留作验证。一般取得比例为7:3,或者4:1,即70%作为训练集,30%作为测试集进行模型验证。这一验证方法不是很稳定,原因在于对验证集合随机采样的不确定性。
3.1.3.2 交叉验证
交叉验证可以理解为多次留意验证的集合的过程,只是每次检验所使用的验证集之间是互斥的,并且要保证每一条可用数据都被模型验证过。例如5折验证就是全部可用数据被随机的分割为平均数量的5组,每次迭代都选取其中的1组数据作为验证集, 其它4组作为训练集。交叉验证的好处在于可用保证所有的数据都有被训练和验证的机会,也尽最大可能让优化的模型性能保险的更加可信。
3.1.4 超参数搜索
模型中的一些重要参数,我们常常称为模型的超参数,如K邻近算法中的K值,支持向量机中的不同核函数等。
3.1.4.1 网格搜索
由于超参数的空间是无尽的,因此超参数的组合配置只能是更优解,没有最优解。通常情况下,我们依靠网格搜索对多种超参数组合的空间进行暴力搜索,每一条超参数组合被代入到学习函数中作为新的模型,并且为了比较新模型之间的性能,每个模型都会采用交叉验证的方法在多组相同的训练和开发数据集下进行评估。
共3x4=12组超参数,再乘以3折交叉验证共36项独立运行的计算任务。
3.1.4.2 并行搜索
网格搜索结合交叉验证来寻找超参数组合比较耗时,然而一旦获得了比较好的参数组合,都可以保持一段时间的使用,因此是非常值得推荐的提升方法,而且各个新模型在执行交叉验证的过程中间都是相互独立的,所以我们可以充分利用多核处理器,甚至是分布式的计算资源来从事并行搜索,这样就可以节省时间。