Coursera 吴恩达机器学习入门课笔记(更新至第三课)
吴恩达在 Coursera 上的机器学习入门课的笔记。只给自己看,所以写得非常简略。
使用的是较新的 2022 版本(和之前的不太一样),双语可见 BV1Pa411X76s。
第一课
线性回归(Linear Regression)
设特征数为
模型:
损失函数:
费用函数:
此处
梯度下降(Gradient Descent)
特征缩放(Feature Scaling)
- Mean Normalization:
- Z-Score Normalization:
目标是让
逻辑回归(Logistic Regression)
Sigmoid:
ReLU:
模型:
也可以换成 ReLU。
损失函数:
实际操作中,使用该损失函数比直接套用线性回归的损失函数更优。
第二课
输出层的转换函数选择
- 二元分类:
- 回归:
(带正负)或 (非负)
Softmax 回归
Softmax 回归用来解决多分类问题。
假设类别共有
损失函数为
交叉验证
咕了
决策树解决二分类问题
给定特征向量
熵:若
特别地,
信息增益:若将根节点
取信息增益最大分割即可。
停止条件
停止划分的条件有几种:
- 当当前节点深度已经达到规定的最大深度时;
- 当最大信息增益小于某个阈值时;
- 当节点数据数小于某个阈值时。
One-hot 编码
对于
对多分类问题的决策树应用 One-hot 编码,即可转化为二分类问题。
连续取值
在决策树上,对于取值为实数的特征进行分割时,可以取条件为
若当前有
扩展到回归树
回归树和决策树类似,但其输出为一个
类似地,可以定义回归树的信息增益为
其中
决策树森林
单棵决策树对数据的微小改变较为敏感。为了使其更加健壮,可以生成多棵决策树,然后收集所有决策树计算后的结果,取众数作为结果返回。
生成决策树的方式是:每次有放回抽样,抽出与数据集大小个数相等的样本(这些样本可重复),根据它们建决策树。
决策树棵数一般在
随机森林算法
仅有放回抽样构造出的决策树,在根节点附近的分类标准仍然是高度相似的。记特征数为
一般来讲取
Boost
更进一步地,在每次抽样时,我们可以更有意识(更高概率地)抽出那些被当前已有决策树森林错误分类的样本。
XGBoost
XGBoost 是一个开源高效的决策树 / 回归树计算库。
决策树 Vs. 神经网络
决策树的优点:
- 适合处理天然结构化的数据。简单来说,如果数据看起来像一个表格,则适合用决策树处理。
- 训练时间短。
- 较小的决策树可能是 Human-interpretable(人类可以理解的)。
决策树的缺点:
- 不适合处理非结构化数据(图像,文本,视频,音乐等)。
神经网络的优点:
- 适合处理几乎所有类型的数据(无论是否结构化)。
- 可以和迁移学习(Tranfer learning)一起使用。
- (*) 可以更容易做到让多个机器学习模型一起配合训练。
- 原因很复杂,暂时不展开。
神经网络的缺点:
- 训练时间长。
第三课
引入
- 无监督学习算法
- 聚类(Clustering)
- 异常检测(Anormaly detection)
- 推荐系统
- 强化训练
K-means 聚类算法
K-means 算法可以用来解决聚类问题。算法流程如下:
- 随机
个点的坐标 作为 个簇的中心点。 - 重复以下流程直至中心点坐标无变化:
- 遍历所有数据点,将每个数据点分配给离它最近的那个中心点。
- 将中心点坐标改为它所支配的数据点坐标的平均值。
其中若中心点无支配数据点,则要么删去该中心点,要么重新随机中心点坐标。
上面的做法实际上是在优化代价函数
$$J({c^{(m)}}, {\text{p}k}) = \frac 1m \sum{i = 1}^m | \text{x}^{(i)} - \text{p}_{c^{(i)}}|^2$$
该代价函数也称为 Distortion 函数。
可以注意到,算法流程中的 2.1. 既是在保持
K-means 聚类算法的改进
初始化时,我们可以令
另外,该代价函数也有多个局部最小值,所以我们也可以运行多次 K-means 算法(一般为
如何选择 K 值
肘部法则(Elbow Method):令
实际应用中,该算法一般是用来产生一些簇,提供给下游(Downstream)的开发人员,让他们进一步进行计算的。所以可以考虑根据下游开发人员的反馈调整
注意:你并不是在选择
异常检测
给出
先强行假定每一维的参数是相互独立的,然后我们考虑用正态分布估计每一维参数的分布。计算
则可以估计给定的参数
由于互相独立,可以得知
若
异常检测的交叉验证
- 训练集
:用于训练 - 交叉验证集 ${(\text{x}{cv}^{(m{cv})}, y_{cv}^{(m_{cv})})}$:用于选择模型
- 测试集 ${(\text{x}{test}^{(m{test})}, y_{test}^{(m_{test})})}$:用于检验模型的实际正确率
注意要点:
- 一般异常数据数远小于正常数据数(如
)。 - 一般不需要把异常数据放入训练集,而应当放入交叉验证集和测试集。
- 若异常数据极其少(只有一两个),可考虑不适用测试集(但会带来一定的风险)。
异常检测 Vs. 监督学习
异常检测适用于:
- 异常数据极其少的时候(例如不超过
)。 - 有很多种异常类型,即很难从异常数据习得其通性的时候。
- 异常检测算法会将与正常数据偏离较大的数据当作异常,监督学习会将与异常数据相近的当作异常。也就是说,如果出现了一种新的异常类型,异常检测算法会将其视为异常(因为与正常偏离大),而监督学习不会将其视为异常(因为与异常距离远)。
监督学习则相反。
例如,金融欺诈的手段千变万化,因此更适合用异常检测;垃圾邮件的类别则相对少,因此更适合用监督学习。
特征选择
监督学习中,即使选择了一些无关特征,算法仍然可以自动调整它们的权值,使它们对结果不起作用。
但异常检测中,特征的选择极其重要。
首先,可以将特征处理一下,使得它们更加符合正态分布,例如
尽管有些方法可以自动测量其与正态分布的相近程度,但在实践中作用不大。实践中,多尝试几个
其次,可以对实际数据作误差分析。例如,如果算法运行不优,大概率是异常数据和正常数据的
推荐系统:协同过滤(Collaborative filtering)
有
已知部分评分情况,预估用户对每个未评分商品的评分是多少。
可设商品
类似地,定义代价函数
用梯度下降最优化
对于二分类预测问题(即
均值归一化
设
这样的好处是当用户评分过极少的电影时,算法表现也会更好。
寻找共同点
可以通过协同过滤算法求解出的
协同过滤的局限
- 存在冷启动问题:对于新注册的用户 / 新上架的商品,算法无法提供良好的推荐。
- 难以利用已知特性:即使拥有一些已知特性,它们也较难显著提高协同过滤算法的表现。
基于内容过滤(Content-based filtering)
协同过滤算法会根据那些给出评分和你相似的用户,来提供相近的推荐。而基于内容过滤算法,则会根据用户和商品的特征来提供推荐。
设用户
此处和之前的算法相比少了常数项,但实际证明,缺少常数项几乎不会影响算法性能。
实现基于内容过滤算法的一个方式是深度学习。构建两个神经网络
实际上,我们可以把两个神经网络结合起来。把
先前提到说,神经网络相比决策树的好处是容易将多个神经网络结合起来使用。这就是一个鲜明的例子。
费用函数和先前的类似,也是差值平方和加上正则化项。
从大目录里推荐
现代网站通常拥有大量的资源,例如超过十万甚至百万首曲库。对于每个用户都强行枚举所有商品并放入神经网络计算是不现实的。
许多大规模推荐系统的实现可以分为两个步骤:数据检索和排名。即,检索出十几或几百个该用户可能感兴趣的商品,然后放入神经网络计算并排序。
推荐系统的危害
推荐系统并不完全是好东西,滥用它可能会造成一些不理想的效果:
- 信息茧房。
- 激化仇恨 / 引战言论,因为它们能更好地吸引读者注意。
- 公司的算法推荐的商品可能不是对用户最好的,而是对公司利益最大化的
尽力去做有益于人民的东西。
强化学习引入
强化学习的一些应用:
- 训练机器人
- 工厂优化(任务调度安排)
- 金融股票交易
- 游戏
原理:程序可以任意进行行动,算法仅指定某些状态的奖励,让程序自己学习如何最大化奖励(训狗)。
形式化描述:程序任意时刻都可以用四个参数
为当前状态 为行动 为当前奖励 为后继状态
回报和策略
为了让程序更快地拿到更多奖励,每秒程序的奖励会衰减,即乘上一个略小于
程序至当前为止所获得的所有奖励,乘上对应折扣系数的次幂之和称为回报(Return)。
我们希望求出一个策略(Policy)函数
Coursera 吴恩达机器学习入门课笔记(更新至第三课)
https://cutekibry.github.io/2022/08/13/learning-note/coursera-ml-intro-note/
未找到相关的 Issues 进行评论
请联系 @cutekibry 初始化创建