Python机器学习及实践 知识总结
机器学习中的监督学习的任务重点在于,根据已有的经验知识对未知样本的目标/标记进行预测。
根据目标预测变量的类型不同,我们把监督学习的任务大体分为分类学习与回归预测两类。
监督学习
任务的基本架构流程:1首先准备训练数据 可以是文本 图像 音频等;2然后抽取所需要的特征,形成特征向量;3接着,把这些特征向量连同对应的标记/目标一并送入学习算法中,训练出一个预测模型;4然后,采用同样的特征方法作用于新的测试数据,得到用于测试的数据的特征向量;5最后,使用预测模型对这些待预测的特征向量进行预测并得到结果。
分类学习(二分类 多类分类 多标签分类(判断一个样本是否同时属于多个不同类别))
线性分类器 假设特征与分类结果存在线性关系的模型 通过计算每个维度的特征与各自权重的乘积来帮助类别决策。
①f=wx+b(向量表示形式)
二分类问题希望f∈{0,1} 因此需要一个函数把先得到的f∈R映射到(0,1)于是我们想到了②Logistic函数
整合①②我们得到经典的线性分类器模型行Logistic Regression
一种快速估计的算法 随机梯度上升法
sklearn中
Logistic Regression中解析参数的方式为精确计算 SGDClasifier解析参数的方式为梯度法估计
前者计算时间长 模型的性能高 后者相反
10万量机以上的数据 考虑到用时 建议用后者
支持向量机(分类) 原理:根据训练样本的分布,搜索所有可能的线性分类器中最佳的那个。
我们把可以用来真正帮助决策最优线性分类模型的数据点叫做“支持向量”(二维特征中 两个空间间隔最小的两个不同类别的数据的数据点)
朴素贝叶斯 构造基础是贝叶斯理论
抽象来说朴素贝叶斯分类器会单独思考每一维度特征被分类的条件概率,进而综合这些概率并对其所在的特征向量做出分类预测,因此,这个模型的数学基本假设是:各个维度特征被分类的条件概率之间是相互独立的
在假设条件下 每一种特征可能的取值只能有2种 那么只需估计2kn个参数 即 p(x1=0|y=c1)p(x1=1|y=c1),。。。,p(xn=1|y=ck)
k近邻分类 随着不同会取得不同的分类效果 无参数模型 非常高的计算复杂度和内存消耗 时间代价大
决策树 考虑特征节点的选取顺序 :信息熵 基尼不存性
集成模型(分类)
随机森林分类器
梯度提升决策树
线性回归器 LinearRegression SGDRegressor
支持向量机回归
k近邻回归 k个点 算数平均 /距离差异进行加权平均
回归树
集成模型(回归)
普通随机森林
提升树模型
极端随机森林:在每当构建一棵树的分裂节点的时候 不会任意地选取特征而是先随机收集一部分特征 然后利用信息熵和基尼不存性等指标挑选最佳的节点特征
无监督学习经典模型
无监督学习着重于发现数据本身的分布特点 无监督学习不需要对数据进行标记 节省大量人力 也让数据的规模 变得不可限量
1 发现数据群落 数据聚类 也可以寻找 离群样本
2 特征降维 保留数据具有区分性的低维特征
这些都是在海量数据处理中非常实用的技术
数据聚类
K均值算法(预设聚类的个数 不断更新聚类中心 迭代 ,是所有数据点到其所属聚类中心距离平方和趋于稳定)
过程
①首先 随机布设K个特证空间内的点作为初始的聚类中心
②然后 对于根据每个数据的特征向量 从K个聚类中心中 寻找距离最近的一个 并且把该数据标记为从属与这个聚类中心
③接着 在所有数据都被标记了聚类中心之后 根据这些数据新分配的类簇 重新对K个聚类中心做计算
④如果一轮下来 所有数据从属的聚类中心与上一次的分配的类簇没有变化 那么迭代可以 停止 否则回到②继续循环
性能测评:
①被用来评估的数据本身带有正确的类别信息 使用ARI ARI指标与分类问题中计算准确性的方法类似,同时也兼顾到了类簇无法和分类标记一一对应的问题
②如果被用于评估的数据没有所属类别,那么我们习惯使用轮廓系数来度量聚类结果的质量。轮廓系数同时兼顾了聚类的凝聚度和分离度
用于评估聚类的效果并取值范围为[-1,1]。轮廓系数值越大,表示聚类效果越好。
K聚类算法两大缺陷 ①容易收敛局部最优解 ②需要预先设定簇的数量
使用肘部观察法来粗略的预估相对合理的类簇个数
特征降维
1实际项目中遭遇特征维度非常之高的训练样本,而往往又无法凭借自己的领域知识人工构建有效特征
2肉眼只能观测三个维度的特征 降低数据维度 同时也维数据展现提供了可能
主成分分析(PCA分析)
我们可以把PCA当作特征选择,只是和普通理解的不同,这种特征选择是首先把原来的特征空间做了映射,使得新的映射后特征空间的数据彼此正交。
这样一来,我们通过主成分分析就尽可能保留下具有区分性的低纬数据特征。
特征提升(特征抽取和特征筛选)
特征抽取(数据->数据特征向量)
所谓特征抽取 就是逐条将原始数据转化维特征向量的形式 这个过程同时涉及对数据特征的量化表示
原始数据 :
1数字化的信号数据(声纹,图像)
2还有大量符号化的文本
①我们无法直接将符号化的文字本身用于计算任务 而是需要通过某些处理手段 ,预先将文本量化为特征向量
有些用符号表示的数据特征已经相对结构化,并且以字典这种数据结构进行存储。
这时我们使用DictVectorizer 对特征进行抽取和向量化
DictVectorizer处理字典存储的结构化的数据结构
DiceVectorizer 对特征的处理方式(字典):
1类别行 使用0/1二值方式
2数字型 维持原始数值即可
②另外一些文本数据更为原始 知识一系列的字符串 我们采用词袋法对特征进行抽取和向量化
词袋法的两种计算方式
CountVectorizer
TfidVectorizer
(a.)CountVectorizer——每个词(Term)在该训练文本中出现的频率(Term Frequency);
(b.)TfidfVectorizer——除了考量某一词汇在当前文本中出现的频率(Term Frequency)外,还要关注包含这个词汇的文本条数的倒数(Inverse Document Frequency)。训练文本的条目越多,TfidfVectorizer这种特征量化的方式就更有优势,因为计算词频(Term Frequency)的目的在于找出对所在文本的含义更有贡献的重要词汇
如果一个词几乎在每篇文章中都出现,说明这个词是常用词,不会帮助模型对文本进行分类。此外,在每条文本中都出现的常用词汇成为停用词(Stop Words),停用词在文本特征抽取时需要过滤掉。
特征筛选(保留有限的良好的数据特征组合)
良好的数据特征组合不需要太多,便可以使模型的性能表现突出。
冗余的特征不会影响到模型的性能,不过却使得CPU的计算做了无用功
主成分分析主要用于去除多余的那些线性相关的特长组合,原因在于这些冗余的特征组合并不会对模型训练有更多贡献。而不良的特征自然会降低模型的精度。
特征筛选与PCA 这类通过选择主成分进行对特征进行重建的方法略有区别:对于PCA而言,我们经常无法解释重建之后的特征;
但是特征筛选不存在对特征值的修改 而更加侧重于寻找那些对模型的性能提升较大的少量特征。
模型正则化
欠拟合与过拟合
模型的泛化能力:模型对未知数据的预测能力
拟合:机器学习模型在训练的过程中,通过更新参数,使模型不断契合可观测数据(训练集)的过程
存在过拟合和欠拟合两种模型的状态
正则化方法(L1正则化和L2正则化)
正则化的目的在于提高模型在未知测试数据上的泛化力,避免参数过拟合
因此,正则化的常见方法都是在原模型优化目标的基础上,增加对参数的惩罚项
L1正则化是让参数向量中的许多元素趋向于0,让有效特征变得稀疏,对应的L1正则化模型称为Lasso。
L2正则化是让参数向量中的大部分元素都变得很小,压制了参数之间的差异性,对应的L2正则化模型称为Ridge
模型检验
没有测试集的情况下 ,我们把现有的数据进行采样分割 成 训练集和开发集(验证集)
模型校验方式 留一验证 交叉验证
留一验证(用于早期)
随机采样一定比例作为训练集 ,留下的作为验证集 通常比例为7 3 但是由于对于验证集合随机采样的不确定性 使模型的性能不稳定
交叉验证(留一验证的高级版本)
多次进行留一验证 后求得平均结果
超参数搜索
网格搜索
对多种超参数组合的空间进行暴力搜索。每一套超参数组合被带入到学习函数中作为新的模型,并且为了比较新模型之间的性能,每个模型都会采用交叉验证的方法在多组相同的训练集和开发数据集下进行评估
并行搜索
用cpu所有的核训练 即并行的方式