机器学习笔记-day05
十一、机器学习系统的设计
11.1 首先要做什么
头脑风暴,列出提高精度的方法
11.2 误差分析
构建一个学习算法的推荐方法:
- 先从构建一个简单的算法开始,这样你可以很快的实现它。
- 绘制学习曲线,以判断是需要更多数据,还是需要更多特征。
- 我们很难不经过测试就知道应该做哪些优化,所以不要提前优化。
- 我们必须用证据来领导我们的决策,而不是凭直觉。
- 误差分析:
- 通过对于交叉验证集中分类错误的数据进行分析,发现新的规律。这可能启发你构造新的特征变量,或者找到系统的短处,启发你去提高它。
- 人工检查交叉验证集中我们算法中产生预测误差的样本,看看这些样本是否有某种系统化的趋势
在交叉验证集上做误差分析,而不是在测试集上。
通过量化的数值来评估,而不是通过某几个例子。
11.3 类偏斜的误差度量
类偏斜情况表现为我们的训练集中有非常多的同一种类的样本,只有很少或没有其他类的样本。
例如我们希望用算法来预测癌症是否是恶性的,在我们的训练集中,只有0.5%的实例是恶性肿瘤。假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的,那么误差只有0.5%。然而我们通过训练而得到的神经网络算法却有1%的误差。这时,误差的大小是不能视为评判算法效果的依据的。
我们将算法预测的结果分成四种情况:
- 正确肯定(True Positive,TP):预测为真,实际为真
2.正确否定(True Negative,TN):预测为假,实际为假
3.错误肯定(False Positive,FP):预测为真,实际为假
4.错误否定(False Negative,FN):预测为假,实际为真
查准率=TP/(TP+FP)
查全率=TP/(TP+FN)
11.4 查准率和查全率之间的权衡
查准率(Precision)=TP/(TP+FP)
查全率(Recall)=TP/(TP+FN)
如何选择查准率和查全率的临界值?
一种方法是计算F1值:\(F1\,Score = 2\frac{PR}{P+R}\)
11.5 机器学习的数据
机器学习中的普遍共识:"取得成功的人不是拥有最好算法的人,而是拥有最多数据的人"。
一个关键的假设:特征值有足够的信息量,且我们有一类很好的函数,这是为什么能保证低误差的关键所在。
多特征,保证偏差小。
多数据,保证方差小。
十二、支持向量机
12.1 优化目标
支持向量机(Support Vector Machine),简称SVM
\(\displaystyle min\,C\sum^m_{i=1}\left[y^{(i)}cost_1(\theta^Tx^{(i)}) + (1-y^{(i)})cost_0(\theta^Tx^{(i)})\right] + \frac{1}{2}\sum^n_{i=1}\theta^2_j\)
目的是为了简化代价函数的计算量,可以简化为\(A+\lambda B\),换种形式,就是\(CA+B\),其中\(C = \frac{1}{\lambda}\)
12.2 大边界的直观理解
12.3 数学背后的大边界分类
12.4 核函数1
12.5 核函数2
12.6 使用支持向量机
十三、聚类
13.1 无监督学习:简介
无监督学习的一个例子:聚类算法
13.2 K-均值算法
K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。
K-均值是一个迭代算法,假设我们想要将数据聚类成n个组,其方法为:
首先选择个随机的点,称为聚类中心(cluster centroids);
对于数据集中的每一个数据,按照距离个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。
计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。
K-均值算法的伪代码如下:
1,随机初始化K个聚类中心
2,Repeat {
for \(i=1\) to \(m\)
\(c^{(i)} :=\) index (from 1 to K) of cluster centroid
closet to \(x^{(i)}\)
for \(k = 1\) to \(K\)
\(\mu_k :=\) average (mean) of points assigned to cluster \(k\)
}
第一个for循环是赋值步骤,对于每个样例i,计算其应该属于的类。
第二个for循环是聚类中心的移动。对每个类K,重新计算该类的质心。
13.3 优化目标
K-均值的代价函数(又称畸变函数 Distortion function)为:
$J(c{(i)},...,c,\mu_1,...,\mu_k) = \frac{1}{m}\summ_{i=1}||X-\mu{(i)}_c||2 $
\(c^{(i)}\)表示当前当前样本\(x^{(i)}\)所属的簇的索引
\(\mu_k\)表示第\(k\)个聚类中心的位置
$\mu_{c^{(i)}} \(表示\)x^{(i)}$所在簇的聚类中心
13.4 随机初始化
随机初始化所有的聚类中心点
- 我们应该选择K<m,即聚类中心点的个数要小于所有训练集实例的数量
- 随机选择K个训练实例,然后令K个聚类中心分别与这K个训练实例相等
K-均值的一个问题在于,它有可能会停留在一个局部最小值处,而这取决于初始化的情况。
为了解决这个问题,我们通常需要多次运行K-均值算法,每一次都重新进行随机初始化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果
这种方法在较小的时候(2-10)还是可行的,但是如果K较大,这么做也可能不会有明显地改善。
13.5 选择聚类数
聚类数通常与具体需求有关,通过人工选择,凭借经验。
还有种方法,叫做“肘部法则”,是关于k和代价函数的曲线图,如下图:

当左侧的曲线处于k=3时,斜率有个明显的变化,这个点就是所谓肘部。
然而如右侧曲线所示,并不是所有的数据都有这个关键点。
浙公网安备 33010602011771号