进阶
- 简单介绍如何通过抽取或筛选数据特征、优化模型配置,进一步提升经典模型的性能表现。
- 已存的高效模型和程序库:
用于自然语言处理的NLTK程序包;
词向量技术Word2Vec;
能提供强大预测能力的XGBoost模型;
Google发布的用于深度学习的Tensorflow框架等。
模型使用技巧
提升模型性能的方式:
1.预处理数据
2.控制参数训练
3.优化模型配置特征提升
特征抽取:逐条将原始数据转化为特征向量的形式,此过程同时涉及对数据特征的量化表示;
特征筛选:在高维度、已量化的特征向量中选择对指定任务更有效的特征组合,进一步提升模型性能。- 特征抽取
符号化的文字本身无法直接用于计算任务,因此需要通过某些处理手段,预先将文本量化为特征向量。
*有些用符号表示的数据特征已经相对结构化,并且以字典这种数据结构进行存储。
这时使用DictVectorizer对特征进行抽取和向量化。
在特征向量化的过程中,DictVectorizer对于类别型(Categorical)与数值型(Numerical)特征的处理方式有很大差异。由于类别性特征无法直接数字化表示,因此需要借助原特征的名称,组合产生新的特征,并采用0/1二值方式进行量化,而数值型特征的转化则相对方便,一般情况下只需维持原始特征值即可。
*另外一些更为原始的文本数据几乎没有使用特殊的数据结构进行存储,只是一系列的字符串。
处理这些数据比较常用的文本特征表示法为词袋法(Bag of Words):即不考虑词语出现的顺序,只是将训练文本中的每个出现过的词汇单独视作一列特征。
称这些不重复的词汇集合为词表(Vocabulary),于是每条训练文本都可以在高维度的词表上映射出一个特征向量。
特征数值的常见计算方式有两种,分别是:CountVectorizer和TfidfVectorizer. 特征筛选
特征筛选与PCA这类通过选择主成分对特征进行重建的方法略有区别:
对于PCA而言,经常无法解释重建之后的特征;但是特征筛选不存在对特征值的修改,而更加侧重于寻找那些对模型的性能提升较大的少量特征。模型正则化
- 任何机器学习模型在训练集上的性能表现,都不能作为其对未知测试数据预测能力的评估。正则化(Regularization)用于加强模型的泛化力,避免模型参数过拟合(Overfitting)。
欠拟合与过拟合
拟合是指机器学习模型在训练的过程中,通过更新参数,使得模型不断契合训练集的过程。
当模型复杂度很低,模型不仅没有对训练集上的数据有良好的拟合状态,而且在测试集上也表现不佳,这种情况叫做欠拟合(Underfitting);
当模型复杂度很高,几乎完全拟合了所有的训练数据,此时模型也变得非常波动,几乎丧失了对未知数据的预测能力,这种情况叫做过拟合(Overfitting)。
以上两种都是缺乏模型泛化力的表现。
*正则化的常见方法都是在原模型优化目标的基础上,增加对参数的惩罚项(Penalty)(调节因子λ)。例如让有效特征变得稀疏的L1正则化模型,Lasso;以及压制参数之间差异性的L2正则化模型,Ridge。模型检验
- 可利用现有数据对模型进行调优,但是需要注意的是,拿测试集的正确结果反复调优模型和特征是极其错误的,因为真正将模型应用于实践时,并不可能知晓正确答案。
通常调优模型的做法是对现有数据进行采样分割:一部分用于模型参数训练,叫做训练集;另一部分数据集合用于调优模型配置和特征选择,并且对未知的测试性能作出估计,叫做验证集。
例如:留一验证和交叉验证等。超参数搜索
- 模型配置一般统称为模型的超参数(Hyperparameters),如K近邻算法中的K值、支持向量机中不同的核函数(Kernal)等。多数情况下,超参数的选择是无限的。因此在有限的时间内,除了可以验证人工预设几种超参数组合以外,也可以通过启发式的搜索方法对超参数组合进行调优。
网格搜索
网格搜索(GridSearch)对多种超参数组合的空间进行暴力搜索。每一套超参数组合被代入到学习函数中作为新的模型,并且为了比较新模型之间的性能,每个模型都会采用交叉验证的方法在多组相同的训练和验证集下进行评估。
sklearn.model_selection GridSearchCV并行搜索
由于各个新模型在执行交叉验证的过程中间是相互独立的,所以可以充分利用多核处理器甚至是分布式的计算资源来从事并行搜索,这样能够成倍地节省运算时间。
网格搜索n_jobs=-1表示使用该计算机全部的CPU