<<Python机器学习及实践>>读书笔记
小结:
这本书对常见的机器学习算法都做了全面的概述,包括有监督学习,无监督学习,涵盖了全面的传统机器学习算法,已经集成学习算法,没有算法进行深入探究,介绍了每种算法的使用场景,已经算法的在skit-learn的使用方法,没有涉及到数学知识,非常适合初学者
特点:
介绍基本机器学习流程,算法全面,适合初学者对整体机器学习学科以及实践有全面的了解
进阶篇:
本章主要介绍了特征的抽取或者筛选,优化模型配置等内容。
一个好的model,常常以泛化能力是否好为衡量好坏的标准,而我们怎么能训练好一个模型呢?
训练数据的特征是不是最好的?模型的参数是否是最好的?
特征抽取:就是逐条将原始数据转化为特征向量的形式
DictVectorizer对以字典数据结构存储对数据,进行特征抽取和向量化,CountVectorizer对字符串进行特征向量化(统计所有字符串中出现词的词频Term Frequency),TfidfVectorizer也是对字符串进行特征向量化(除了使用词频,还是关注这个词汇在训练文本条数的倒数,可以利用它压制常见词汇对分类决策干扰)
停用词(Stop Words):像英文中the、a等
实践经验, 在处理大量文本时,去掉stop words,并使用Tfidf生成特征向量效果最佳
特征筛选:在高维度,已量化的特征向量中选择对指定任务更有效的特征组合
本书给出的结论,良好的数据特征组合不需要太多,就能是model性能表现突出,冗余的特征不会影响model性能,却会使cpu做无用功,而不良的特征会降低模型精度
总体来说就是按比例取出特征维度,分别训练model,使用交叉验证的方法分别验证acc,选择最好的特征比例进行model训练,使用的是sklearn-feature_selection
模型正则化:
model最重要的不是在trainset上的表现结果,而是它的泛化能力(Generalization),而正则化则是为了加强model的泛化能力,避免模型过拟合。
L1范式的结果会让参数向量的许多元素趋向于0,使得大部分特征失去对优化目标的贡献,这种让有效特征变的稀疏(Sparse)的L1正则化模型,通常被成为Lasso;
L2范式的结果会让参数向量中的大部分元素都变得很小,压制了参数之间的差异性,通常被称作Ridge
模型检验:
留一验证:存在不稳定性,因为对验证集合随机采样的不确定性
交叉验证:可以理解为从事了多次留一验证的过程,每次检验所使用的验证集之间是互斥的,并且保证每一条数据都被model验证过。交叉验证的优点是所有数据都被训练和验证的机会,尽最大可能让优化的模型性能表现更好。
超参数搜索:
网格搜索(GirdSearch):通过启发式的搜索方法对超参数组合进行挑优,叫做网格搜索,由于超参数的空间是无尽的,因此超参数的组合配置只能是“更优”解,没有最优解。在使用GirdSearchCV的时候将参数n_job=-1, 代表使用全部cpu,并行搜索
流行库:
NLTK用于自然语言(文本)处理,量化词汇语义相似度的词向量技术Word2Vec,XGBoost,深度学习框架tensorflow
word2vector,是寻找词汇之间的相似度,将词汇的表示向量化,通过计算表示词汇之间向量的相似度。
XGBoost属于集成学习模型,eXtreme Gradient Tree,提高了精度以及速度,可以自动利用cpu的多线程进行并行计算。XGBoost github:https://github.com/dmlc/xgboost
Gradient Tree Boosting,在生成每一颗树的时候采用梯度下降的思想,以之前生成的所有决策树为基础,向着最小化给定目标函数的方向再进一步,但是在合理的参数设置下,往往要生成一定数量的树才能达到满意的准确率,当数据集较大较复杂的时候,模型可能需要上千次的迭代计算。
Tensorflow: 与其他模型不同之处在于,它让使用者自由选取不同的操作,并组织一个学习系统,通过作者自己的对机器学习算法和理论的理解,完整的搭建一套学习系统,强烈建议大家在了解传统机器学习算法理论后使用tensorflow框架,实现一套完成的学习系统代替调包的过程。