1.只评价一个模型:
对于评价一个(自己或者他人的)模型,只需要选择不同的指标在test set上去评估。最常见的就是:
test error.
2.自己训练一个模型并评价:
(1)对于不同的模型或者没有使用正则化的模型来说:将所有集合划分成三部分:Training set,Cross validation set,Test set。用途如下:
Training set(60%) | CV set(20%) | Test set(20%) |
不同模型拟合出不同参数 | 根据不同的参数得到的hypothesis在CV error上的误差大小,选择出一个最小误差所对应的hypothesis | 用于测试最好hypothesis所对应的性能指标 |
一个非常好的图像如下:
相关分析如下:
Trainging error和对模型进行优化的函数不一样。
Training error是模型进行捕获“是否数据中含有某种规律的”性能反映(对于已知的数据)。
CV error是检测模型是否含有泛化能力的反映。(对于新的,没有见过的数据)。
当模型复杂程度比较低时,伴随着欠拟合的风险,此时,Training error和CV error比较高是因为模型没有很好的符合训练集合上的结构。比如训练集是二次函数形式的,用线性的函数就比较差了,即两个误差都比较大。
当模型复杂程度较高时,伴随着过拟合的风险,此时,模型已经非常好地捕获了训练集上结构,所以Training error比较低,但是因为太过了的缘故,对于未见过的数据的泛化能力就比较差了,所以CV error比较高。
(2)对于同一个使用了正则化的模型来说,根据的不同,所得到的参数也就不同,会导致性能也不一样。
和(1)中完全一样,只不过图像中的横轴“复杂程度”就变成了的大小,通过在Training set上调整不同的参数,比较它们在CV set上的误差大小,最终选择一个合适的参数,即选择图像中,CV error 最低的。
(3)Learning Curve
对于一个模型,要判断它是否过拟合/欠拟合,可以使用Learning Curve
首先要强调的是:对于任何模型来说(无论过拟合,欠拟合还是正常模型),
在训练集合比较少的时候,Training error都比较低,因为模型都有可能因为偶然性的原因使得对较少训练集有非常好的效果,
一个非常简单的例子就是:
实际上数据成二次函数分布,但因为数据量较少,可能表面上呈现出线性形式。
同理,在训练集合比较少的时候,CV error比较高也是因为偶然性使得模型没有任何泛化性能。
但是随着训练样本越来越多,error的趋势就不一样了,具体如下:
高偏差:
高偏差时,模型是欠拟合的,因为模型本身没有捕获数据内在的结构,所以当训练集合增加时,Training error会越来越大,趋于稳定是因为模型最好只能捕获到模型所能达到的地步。
随着训练集合增加,CV error在除去刚开始完全没有泛化性能后,有一点点泛化性能,但是因为模型本身欠拟合,所以这种泛化性能还是非常差,所以CV error下降的不会太多,最终还是有着high error.
接着就是:
高方差:
高方差时,模型是过拟合的。随着训练样本数目增加,Training error会逐渐趋于真实的误差。
而CV error因为过拟合的缘故,随着训练样本数目增加,会逐渐放弃掉只是训练样本的一些结构,从而泛化能力会加强,所以误差也在渐渐降低。
正常情况下的模型:
随着训练集合的增加,模型渐渐趋于真实的误差,比较低。
3.Machine Learning System Design/暂时总结的流程:
1.数据的预处理:数据归一化,缺失值处理(矩阵补全),异常值检测,可视化数据帮助理解
2.特征选择/是否需要降维(流形学习,PCA除去一些误差?)
3.根据问题的目的选择算法:
(1)聚类,发掘数据之间的关系(kmeans,高斯聚类,谱聚类等等)
(2) 分类:选择不同的算法
回归,SVM,神经网络,贝叶斯,GDA,决策树,以及集成学习等。
在训练集上训练出模型以后,在验证集上进行评估:
通过learning carve观察算法的状态(欠/过拟合?),为下一步的步骤决策。(调参/增加样本等等步骤)
性能度量,看指标(acc/precision/recall),进行误差分析,优先选择对算法最后结果提升最大的环节进行提升
4,进行循环,最终得到比较满意的算法,然后在测试集上评价。
从更细化的应用角度分,要对症下药,随机应变!
异常检测,推荐系统,数据可视化,聚类,文本分类等等
4.分类指标/聚类指标:
acc:正确率,分类/聚类中,预测正确的样本数/全部样本数 err:1-acc 错误率
Actual class | |||
1 | 0 | ||
predict class | 1 | True Positive | False Positive |
0 | False Negative | True Negative |
True是指预测正确的,False是指预测错误的.Positive指预测的类是正类,Negative指预测的类是负类。
,P表述的是:我们预测的正类中,有多少是正确的。
,R表述的是:实际上的正类中,有多少是被我们预测出来的。
以诊断癌症的例子去理解就是:
当我们希望我们有很大的把握是正确的时候,即预测的多数都是正确的,那么P就要大一些。相反地,
如果只是为了避免癌症的发生(如果有癌症,就尽早发现),抱着“宁可错杀,不肯放过”的原则,那么R就要大一些。
是对算法更综合的评价。
5.大数据下的学习方法:
在学习这一部分的时候,突然想到之前在赵老师的课程中,他对于算法的提问就是:当数据量小的时候,算法是可以的,重点在于当数据量很大的时候,如何解决问题?这是一个很实际的问题,因为互联网时代,最不缺少的就是数据。
在以后学习算法的过程中,自己要主动地思考:当算法遇到大数据时,能否改进并且改进的办法是什么?这里,我记录一下对于算法必要的思考:1.算法来源的实际问题与解决的其他问题. 2.算法的计算代价(时间/空间复杂度) 3.大数据下的处理办法
有点扯远了,在第10周的学习中,大数据下的处理办法有以下几种:
(1)梯度下降法的变种以及判断算法收敛的方法
A. batch gradient descent: 在每一次的求梯度过程中,都使用所有的训练样本。
B. mini-batch gradient descent: 在求梯度时,每次使用b个样本(b<样本总数)
C. stochastic gradient descent: 求梯度时,每一次仅使用1个样本(b=1)
在判断算法收敛性的时候,对于A,直接画出随着迭代次数的图像。对于C来说,判断收敛的办法就是,
在每b次的迭代过程中,画出使用b个训练样本的损失函数的平均值随着迭代次数的图像。
对于B,C来说,如果想使用它们使得优化目标达到最优解,可以让学习率随着迭代次数的增加而减少。
(2)online learning:每一次仅使用一个样本进行训练
(3) Map‐reduce and data parallelism
(2),(3)这里不细说了,以后去找个实践经历后理解才会更深。
参考:
吴恩达coursera 机器学习