Day1
机器学习:
有监督学习:有监督学习指的就是我们给学习算法一个数据集。这个数据集由“正确答案”组成。在房价的例子中,我们给了一系列房子的数据,我们给定数据集中每个样本的正确价格,即它们实际的售价然后运用学习算法,算出更多的正确答案。比如你朋友那个新房子的价格。用术语来讲,这叫做回归问题。我们试着推测出一个连续值的结果,即房子的价格。
回归这个词的意思是,我们在试着推测出这一系列连续值属性。
分类:分类指的是,我们试着推测出离散的输出值:0或1良性或恶性,而事实上在分类问题中,输出可能不止两个值。比如说可能有三种乳腺癌,所以你希望预测离散输出0、1、2、3。0 代表良性,1 表示第1类乳腺癌,2表示第2类癌症,3表示第3类,但这也是分类问题。
无监督学习:无监督学习中没有任何的标签或者是有相同的标签或者就是没标签。所以我们已知数据集,却不知如何处理,也未告知每个数据点是什么。别的都不知道,就是一个数据集。你能从数据中找到某种结构吗?针对数据集,无监督学习就能判断出数据有两个不同的聚集簇。这是一个,那是另一个,二者不同。是的,无监督学习算法可能会把这些数据分成两个不同的簇。所以叫做聚类算法
我们只是说,是的,这是有一堆数据。我不知道数据里面有什么。我不知道谁是什么类型。我甚至不知道人们有哪些不同的类型,这些类型又是什么。但你能自动地找到数据中的结构吗?就是说你要自动地聚类那些个体到各个类,我没法提前知道哪些是哪些。因为我们没有给算法正确答案来回应数据集中的数据,所以这就是无监督学习。聚类只是无监督学习中的一种
Day2
1.误差平方代价函数(也有其他的代价函数)在回归问题中比较好用。
2.梯度下降算法:用来求函数最小值的算法.梯度下降算法,你可以用它来最小化任何3.代价函数J,不只是线性回归中的代价函数J。
如果你之前学过线性代数,有些同学之前可能已经学过高等线性代数,你应该知道有一种计算代价函数最小值的数值解法,不需要梯度下降这种迭代算法。在后面的课程中,我们也会谈到这个方法,它可以在不需要多步梯度下降的情况下,也能解出代价函数的最小值,这是另一种称为正规方程(normal equations)的方法。实际上在数据量较大的情况下,梯度下降法比正规方程要更适用一些。
4. 你应该已经掌握了批量梯度算法(走的每一步都考虑到所有的样本),并且能把它应用到线性回归中了,这就是用于线性回归的梯度下降法。第一个机器学习算法
5. 这些矩阵和向量提供了一种有效的方式来组织大量的数据,特别是当我们处理巨大的训练集时,为了实现机器学习算法,我们只需要一些非常非常基础的线性代数知识。
6.矩阵的转置:设为阶矩阵(即行列),第行列的元素是,即:
定义的转置为这样一个阶矩阵,满足,即 (的第行第列元素是的第行第列元素),记。(有些书记为A’=B)
7.多变量梯度下降
解决的方法是尝试将所有特征的尺度(房屋面积、楼层、房间数。。)都尽量缩放到-1到1之间
-
学习率:要选择恰当,最佳画出J(θ)与迭代次数图像。
-
把所有的计算问题向量化,并且调用已有的函数库是很智慧的。
-
逻辑回归算法,这个算法的性质是:它的输出值永远在0到 1 之间。逻辑回归算法是分类算法,我们将它作为分类算法使用。有时候可能因为这个算法的名字中出现了“回归”使你感到困惑,但逻辑回归算法实际上是一种分类算法,它适用于标签 取值离散的情况,如:1 0 0 1。
Day3
-
逻辑回归算法:假设函数为:
-
Cost Function :
-
过度拟合:预测函数过度拟合训练集以至于预测效果不好。就以多项式理解,x 的次数越高,拟合的越好,但相应的预测的能力就可能变差。
5.如果我们发现了过拟合问题,应该如何处理?
5. 丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择的算法来帮忙(例如PCA)
6. 正则化。 保留所有的特征,但是减少参数的大小(magnitude)。
7. 正则化线性回归的代价函数为:(避免过度拟合):
-
也可以利用正规方程来求解正则化线性回归模型:
-
学习过程:有监督的 线性回归 and 分类问题
线性回归:使用梯度下降和正规方程 求解min CF 和 theta
分类(多类):使用逻辑回归 求解----------------
求解的H(x)图像会出现过度拟合,需要正则化(给指数高的theta设置惩罚参数λ) 以上的3个机器学习算法会出现新的 CF
1.神经网络:有约个(接近3百万个)特征。普通的逻辑回归模型,不能有效地处理这么多的特征,这时候我们需要神经网络。
如果你能把几乎任何传感器接入到大脑中,大脑的学习算法就能找出学习数据的方法,并处理这些数据。
2.神经网络的处理单元是:单个神经元(树突是input 轴突是output)
一般分为多层:
Input layer(输入特征项) hidden layer(隐含层 神经网络的计算层 可以由多层交互) output layer(输出预测值)
11. 神经网络也可用于多类分类预测,即输出层有多个神经元用来表示多个类。
12. 神经网络 其实就是不同的逻辑电路的相互交错 最终实现最后的组合逻辑得出假设
Day4
- 计算神经网络预测结果的时候我们采用了一种正向传播方法(前向传播),我们从第一层开始正向一层一层进行计算,直到最后一层的。
- 计算神经网络CF的导数时:采用反向传播。
神经网络理论学习篇遇到瓶颈 暂时跳过!!
Day5
1.改进机器学习算法:1)增加训练样本数量(无意义)
2)增加或减少特征值(浪费时间)
3)增加假设函数多项式
4)尝试减少或增加正则化程度
2.评估算法:1)训练集(0.7)测试集(0.3)
2)使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集
3.学习曲线:学习曲线是将训练集误差和交叉验证集误差作为训练集实例数量( )的函数绘制的图表。
-
构建一个学习算法的推荐方法为:
-
从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法
2.绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
- 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的样本,看看这些样本是否有某种系统化的趋势
- 总结一下,当你在研究一个新的机器学习问题时,我总是推荐你实现一个较为简单快速、即便不是那么完美的算法。我几乎从未见过人们这样做。大家经常干的事情是:花费大量的时间在构造算法上,构造他们以为的简单的方法。因此,不要担心你的算法太简单,或者太不完美,而是尽可能快地实现你的算法。当你有了初始的实现之后,它会变成一个非常有力的工具,来帮助你决定下一步的做法。因为我们可以先看看算法造成的错误,通过误差分析,来看看他犯了什么错,然后来决定优化的方式。另一件事是:假设你有了一个快速而不完美的算法实现,又有一个数值的评估数据,这会帮助你尝试新的想法,快速地发现你尝试的这些想法是否能够提高算法的表现,从而你会更快地做出决定,在算法中放弃什么,吸收什么误差分析可以帮助我们系统化地选择该做什么。
查准率(Precision)和查全率(Recall) 我们将算法预测的结果分成四种情况:
- 正确肯定(True Positive,TP):预测为真,实际为真
2.正确否定(True Negative,TN):预测为假,实际为假
3.错误肯定(False Positive,FP):预测为真,实际为假
4.错误否定(False Negative,FN):预测为假,实际为真
则:查准率=TP/(TP+FP)。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。
查全率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。
4. 偏差问题,我么将通过确保有一个具有很多参数的学习算法来解决,以便我们能够得到一个较低偏差的算法,并且通过用非常大的训练集来保证。
5. 神经网络 属于有监督学习
- 有监督算法:SVM(支持向量机)也是最大间距分类器,他的算法思想是使得所有正负样本点到边界的距离最大。
- 支持向量机:支持向量算法-----核函数(重组特征值)—特征缩放 也有不使用核函数的SVM
- SVM 的问题也可以用神经网络来解答,但是训练神经网络比较慢,而且SVM的代价函数是凸函数不会存在局部最小值得问题。
- 不带核函数的SVM ≈逻辑回归问题
- 好的预测函数取决于 :数据的多少 误差分析 排除学习算法的能力
Day6
- K-means 算法:在K很小的时候(2-10)可以通过多次迭代减小误差。K>10的效果就不好了。
- K的确定 1)画出J(theta)与k的图像 以肘部规则确定K为转折处的值
2)以自己的研究目的 自己想要把数据分为几类 来确定 - 无监督学习类型: 1)聚类 K-means
2)降维 (PCA:可以将n个特征降到k个)
4.压缩和数据可视化可以支持降维
5.异常检测:根据之前已有的数据,我们希望判断这个引擎是否需要进一步测试。因为,如果它看起来像一个正常的引擎,那么我们可以直接将它运送到客户那里,而不需要进一步的测试。异常检测主要用来识别欺骗,再一个例子是检测一个数据中心,用来判断某些计算机是不是有可能出错了。
通常来说,正样本的数量很少,甚至有时候是0,也就是说,出现了太多没见过的不同的异常类型,那么对于这些问题,通常应该使用的算法就是异常检测算法。
6.总结:
在这门课中,我们花了大量的时间介绍了诸如线性回归、逻辑回归、神经网络、支持向量机等等一些监督学习算法,这类算法具有带标签的数据和样本。
然后我们也花了很多时间介绍无监督学习。例如 K-均值聚类、用于降维的主成分分析,以及当你只有一系列无标签数据 时的异常检测算法。当然,有时带标签的数据,也可以用于异常检测算法的评估。
此外,我们也花时间讨论了一些特别的应用或者特别的话题,比如说推荐系统。以及大规模机器学习系统,包括并行系统和映射化简方法,还有其他一些特别的应用。比如,用于计算机视觉技术的滑动窗口分类算法。
最后,我们还提到了很多关于构建机器学习系统的实用建议。这包括了怎样理解某个机器学习算法是否正常工作的原因,所以我们谈到了偏差和方差的问题,也谈到了解决方差问题的正则化,同时我们也讨论了怎样决定接下来怎么做的问题,也就是说当你在开发一个机器学习系统时,什么工作才是接下来应该优先考虑的问题。因此我们讨论了学习算法的评价法。介绍了评价矩阵,比如:查准率、召回率以及F1分数,还有评价学习算法比较实用的训练集、交叉验证集和测试集。我们也介绍了学习算法的调试,以及如何确保学习算法的正常运行,于是我们介绍了一些诊断法,比如学习曲线,同时也讨论了误差分析、上限分析等等内容。
所有这些工具都能有效地指引你决定接下来应该怎样做,让你把宝贵的时间用在刀刃上。现在你已经掌握了很多机器学习的工具,包括监督学习算法和无监督学习算法等等。