阅读感想
极客时间这门《数据分析40讲》,属于比较基础、入门级别的课程,内容的难度类似《写给程序员的数据挖掘指南》,比较适合初学者,我花了一早上过了一遍(大概四十多讲的样子)。
但整体来看,作者还是蛮用心的,譬如课程的模块划分、文章的配图、循序渐进的内容设计等。整体来说,课程的优缺点如下:
- 优点:课程讲解细致,深入浅出,便于入门;
- 缺点:算法篇介绍太少太少,原理基本忽略,整体难度偏低,没怎么深入。
对数据分析不太熟悉的小伙伴可以看看,有一定经验的小伙伴可以忽略啦。
基础篇
数据挖掘学习路径
Python 基础
浙江大学 ACM 的 OnlineJudge。一个在线答题系统,做题后你可以在后台提交代码,然后 OnlineJudge 会告诉你运行的结果,如果结果正确就反馈:Accepted,如果错误就反馈:Wrong Answer。
深入学习 NumPy
&& Pandas
。
数据变换
数据规范化
1. Min-max 规范化
Min-max
规范化方法是将原始数据变换到 [0,1] 的空间中,本质上是指将原始数据的最大值映射成1,是最大值归一化。用公式表示就是:
新数值 =(原数值 - 极小值)/(极大值 - 极小值)。
2. Z-Score 规范化
Z-Score
的主要目的就是将不同量级的数据统一转化为同一个量级,统一用计算出的 Z-Score
值衡量,以保证数据之间的可比性。本质上是指将原始数据的标准差映射成1,是标准差归一化。用公式表示就是:
新数值 =(原数值 - 均值)/ 标准差。
标准差分数可以回答这样一个问题:“给定数据距离其均值多少个标准差”的问题,在均值之上的数据会得到一个正的标准化分数,反之会得到一个负的标准化分数。
3. 小数定标规范化
小数定标规范化就是通过移动小数点的位置来进行规范化。小数点移动多少位取决于属性 A 的取值中的最大绝对值。
Min-max
规范化 和Z-Score
规范化 的各自使用场景?
算法篇
决策树:C4.5
我们在做决策树的时候,会经历两个阶段:构造和剪枝。
什么是构造呢?构造就是生成一棵完整的决策树。简单来说,构造的过程就是选择什么属性作为节点的过程,包括根节点、内部节点、叶节点。
决策树构造出来之后是不是就万事大吉了呢?也不尽然,我们可能还需要对决策树进行剪枝。剪枝就是给决策树瘦身,这一步想实现的目标就是,不需要太多的判断,同样可以得到不错的结果。之所以这么做,是为了防止“过拟合”(Overfitting
)现象的发生。过拟合意味着模型的“泛化能力”差。
剪枝可以分为“预剪枝”(Pre-Pruning
)和“后剪枝”(Post-Pruning
)。
- 预剪枝是在决策树构造时就进行剪枝。方法是在构造的过程中对节点进行评估,如果对某个节点进行划分,在验证集中不能带来准确性的提升,那么对这个节点进行划分就没有意义,这时就会把当前节点作为叶节点,不对其进行划分。
- 后剪枝就是在生成决策树之后再进行剪枝,通常会从决策树的叶节点开始,逐层向上对每个节点进行评估。如果剪掉这个节点子树,与保留该节点子树在分类准确性上差别不大,或者剪掉该节点子树,能在验证集中带来准确性的提升,那么就可以把该节点子树进行剪枝。
纯度和信息熵
可以把决策树的构造过程理解成为寻找纯净划分的过程。数学上,我们可以用纯度来表示,纯度换一种方式来解释就是让目标变量的分歧最小。经典的 “不纯度”的指标有三种,分别是信息增益(ID3
算法)、信息增益率(C4.5
算法)以及基尼指数(Cart
算法)。
信息熵(entropy
)表示了信息的不确定度。
p(i|t)
代表了节点 t
为分类 i
的概率,其中 log2
为取以 2 为底的对数。当不确定性越大时,它所包含的信息量也就越大,信息熵也就越高。
当集合中的所有样本均匀混合时,信息熵最大,纯度最低。
ID3
ID3
就是要将信息增益最大的节点作为父节点,这样可以得到纯度高的决策树。信息增益指的就是划分可以带来纯度的提高,信息熵的下降。它的计算公式,是父亲节点的信息熵减去所有子节点的信息熵。在计算的过程中,我们会计算每个子节点的归一化信息熵,即按照每个子节点在父节点中出现的概率,来计算这些子节点的信息熵。
优缺点:
ID3
的算法规则相对简单,可解释性强。ID3
算法倾向于选择取值比较多的属性,有些属性可能对分类任务没有太大作用,但是他们仍然可能会被选为最优属性。ID3
构造决策树的时候,对噪声敏感,容易产生过拟合的情况。
C4.5
C4.5
都在哪些方面改进了 ID3
呢?
采用信息增益率
ID3
在计算的时候,倾向于选择取值多的属性。为了避免这个问题,C4.5
采用信息增益率的方式来选择属性。信息增益率 = 信息增益 / 属性熵。- 当属性有很多值的时候,相当于被划分成了许多份,虽然信息增益变大了,但是对于
C4.5
来说,属性熵也会变大,所以整体的信息增益率并不大。
采用悲观剪枝
- 采用悲观剪枝(PEP),这样可以提升决策树的泛化能力。
- 悲观剪枝是后剪枝技术中的一种,通过递归估算每个内部节点的分类错误率,比较剪枝前后这个节点的分类错误率来决定是否对其进行剪枝。这种剪枝方法不再需要一个单独的测试数据集。
离散化处理连续属性
C4.5
可以处理连续属性的情况,对连续的属性进行离散化的处理。C4.5
选择具有最高信息增益的划分所对应的阈值。
处理缺失值
C4.5
需要对数据集进行多次扫描,算法效率相对较低。
决策树:CARD
CART
算法,英文全称叫做 Classification And Regression Tree,中文叫做分类回归树。ID3
和 C4.5
算法可以生成二叉树或多叉树,而 CART 只支持二叉树。
CART 分类树
CART
分类树与 C4.5
算法类似,只是属性选择的指标采用的是基尼系数。基尼系数本身反应了样本的不确定度。当基尼系数越小的时候,说明样本之间的差异性小,不确定程度低。分类的过程本身是一个不确定度降低的过程,即纯度的提升过程。所以 CART
算法在构造分类树的时候,会选择基尼系数最小的属性作为属性的划分。
假设 t
为节点,那么该节点的 GINI
系数的计算公式为:
这里 p(Ck|t)
表示节点 t
属于类别 Ck
的概率,节点 t
的基尼系数为 1 减去各类别 Ck
概率平方和。
假设节点 D
被属性 A
划分为子节点 D1
和 D2
,则节点 D
的基尼系数等于子节点 D1
和 D2
的归一化基尼系数之和,用公式表示为:
归一化基尼系数代表的是每个子节点的基尼系数乘以该节点占整体父亲节点 D
中的比例。节点 D
划分后的基尼系数越大,样本集合的不确定性越大,也就是不纯度越高。
CART 回归树
CART
回归树划分数据集的过程和分类树的过程是一样的,只是回归树得到的预测结果是连续值,而且评判“不纯度”的指标不同。在 CART
回归树中,根据样本的离散程度来评价“不纯度”。
样本的离散程度具体的计算方式是,先计算所有样本的均值,然后计算每个样本值到均值的差值。我们假设 x
为样本的个体,均值为 u
。为了统计样本的离散程度,我们可以取差值的绝对值,或者方差,这两种离散值的选择方式分别对应着两种目标函数最优化的标准,即用最小绝对偏差(LAD
),或者使用最小二乘偏差(LSD
,通常使用最小二乘偏差的情况更常见一些。
CART 决策树的剪枝
CART
决策树的剪枝主要采用的是 CCP
方法,它是一种后剪枝的方法,英文全称叫做 cost-complexity prune,中文叫做代价复杂度。这种剪枝方式用到一个指标叫做节点的表面误差率增益值,以此作为剪枝前后误差的定义。用公式表示则是:
其中 Tt
代表以 t
为根节点的子树,C(Tt)
表示节点 t
的子树没被裁剪时子树 Tt
的误差,C(t)
表示节点 t 的子树被剪枝后节点 t
的误差,|Tt|
代子树 Tt
的叶子数,剪枝后,T
的叶子数减少了|Tt|-1
。公式可以理解为:节点的表面误差率增益值等于节点 t
的子树被剪枝后的误差变化除以剪掉的叶子数量。
整体剪枝流程:寻找最小 α
值对应的节点,把它剪掉,这时候生成了第一个子树。重复上面的过程,继续剪枝,直到最后只剩下根节点,即为最后一个子树。
三种决策树对比
ID3
算法,基于信息增益做判断,信息增益最大的,选取作为根节点。;C4.5
算法,基于信息增益率做判断,信息增益率最大的,选取作为根节点;CART
算法,分类树是基于基尼系数做判断,选取基尼系数最小的属性作为属性划分。回归树是基于偏差做判断。
决策树实战
特征选择是分类模型好坏的关键。选择什么样的特征,以及对应的特征值矩阵,决定了分类模型的好坏。
对于不知道测试集实际结果的,要使用 K
折交叉验证才能知道模型的准确率。
K
折交叉验证的原理是这样的:
- 将数据集平均分割成
K
个等份; - 使用 1 份数据作为测试数据,其余作为训练数据;
- 计算测试准确率;
- 使用不同的测试集,重复 2、3 步骤。
朴素贝叶斯
朴素贝叶斯,是一种简单但极为强大的预测建模算法。之所以称为朴素贝叶斯,是因为它假设每个输入变量是独立的。这是一个强硬的假设,实际情况并不一定,但是这项技术对于绝大部分的复杂问题仍然非常有效。
贝叶斯原理、贝叶斯分类和朴素贝叶斯这三者之间是有区别的。贝叶斯原理是最大的概念,它解决了概率论中“逆向概率”的问题,在这个理论基础上,人们设计出了贝叶斯分类器,朴素贝叶斯分类是贝叶斯分类器中的一种,也是最简单,最常用的分类器。
朴素贝叶斯分类常用于文本分类,尤其是对于英文等语言来说,分类效果很好。它常用于垃圾文本过滤、情感预测、推荐系统等。
什么是 TF-IDF
TF-IDF
实际上是词频 TF
和逆向文档频率 IDF 的乘积。用来评估某个词语对于一个文件集或文档库中的其中一份文件的重要程度。
**词频 TF
**计算了一个单词在文档中出现的次数,它认为一个单词的重要性和它在文档中出现的次数呈正比。
**逆向文档频率 IDF
**,是指一个单词在文档中的区分度。它认为一个单词出现在的文档数越少,就越能通过这个单词把该文档和其他文档区分开。IDF 越大就代表该单词的区分度越大。
SVM 分类器
SVM
就是帮我们找到一个超平面,这个超平面能将不同的样本划分开,同时使得样本集中的点到这个分类超平面的最小距离(即分类间隔)最大化。**SVM
既可以做回归,也可以做分类器。**
在这个过程中,支持向量(Support Vector
)就是离分类超平面最近的样本点,实际上如果确定了支持向量也就确定了这个超平面。所以支持向量决定了分类间隔到底是多少,而在最大间隔以外的样本点,其实对分类都没有意义。
SVM
的核心概念:
- 完全线性可分情况下的线性分类器,也就是线性可分的情况,是最原始的
SVM
,它最核心的思想就是找到最大的分类间隔; - 大部分线性可分情况下的线性分类器,引入了软间隔的概念。软间隔,就是允许一定量的样本分类错误;
- 线性不可分情况下的非线性分类器,引入了核函数。它让原有的样本空间通过核函数投射到了一个高维的空间中,从而变得线性可分(例:两类数据,分别分布为两个圆圈的形状)。
常见核函数:
linear
:线性核函数,运算速度快,效果好,但它不能处理线性不可分的数据;poly
:多项式核函数,可以将数据从低维空间映射到高维空间,但参数比较多,计算量大;rbf
:高斯核函数(默认),相比于多项式核函数来说所需的参数比较少,通常性能不错;sigmoid
:sigmoid
核函数,当选用sigmoid
核函数时,SVM
实现的是多层神经网络。
KNN
K
值选择多少是适合的呢?一般采用交叉验证的方式选取 K
值。交叉验证的思路就是,把样本集中的大部分样本作为训练集,剩余的小部分样本用于预测,来验证分类模型的准确性。所以在 KNN
算法中,我们一般会把 K
值选取在较小的范围内,同时在验证集上准确率最高的那一个最终确定作为 K
值。
关于距离的计算方式:
- 欧氏距离;
- 曼哈顿距离;
- 闵可夫斯基距离;
- 切比雪夫距离;
- 余弦距离。
K-Means
K-Means 的工作原理
- 选取
K
个点作为初始的类中心点,这些点一般都是从数据集中随机抽取的; - 将每个点分配到最近的类中心点,这样就形成了
K
个类,然后重新计算每个类的中心点; - 重复第二步,直到类不发生变化,或者你也可以设置最大迭代次数,这样即使类中心点发生变化,但是只要达到最大迭代次数就会结束。
如何确定 K 类的中心点?
在初始设置中,会进行 n_init
次的选择,然后选择初始中心点效果最好的为初始值。
如何将其他点划分到 K 类中?
通过对点进行距离计算,看它离哪个类的中心点的距离最近,就属于哪一类。
如何区分 K-Means 与 KNN?
- 两个算法解决数据挖掘的两类问题。
K-Means
是聚类算法,KNN
是分类算法; - 这两个算法分别是两种不同的学习方式。
K-Means
是非监督学习,也就是不需要事先给出分类标签,而KNN
是有监督学习,需要我们给出训练数据的分类标识; - K 值的含义不同。
K-Means
中的K
值代表K
类。KNN
中的K
值代表K
个最接近的邻居。
EM 聚类
EM
的英文是 Expectation Maximization,所以 EM
算法也叫最大期望算法。
EM
算法是一种求解最大似然估计的方法,通过观测样本,来找出样本的模型参数。最大似然估计是什么呢?它指的就是一件事情已经发生了,然后反推更有可能是什么因素造成的。
EM
聚类的工作原理:如果我们把潜在类别当做隐藏变量,样本看做观察值,就可以把聚类问题转化为参数估计问题。这也就是 EM
聚类的原理。K-Means
是通过距离来区分样本之间的差别的,且每个样本在计算的时候只能属于一个分类,称之为是硬聚类算法。而 EM 聚类在求解的过程中,实际上每个样本都有一定的概率和每个聚类相关,叫做软聚类算法。
EM
算法相当于一个框架,你可以采用不同的模型来进行聚类,常用的 EM
聚类有 GMM
高斯混合模型和 HMM
隐马尔科夫模型。
举例:我们事先知道聚类的个数,但是不知道每个样本分别属于哪一类,我们可以假设样本是符合高斯分布的(也就是正态分布)。
- 先初始化每个组成部分的高斯分布的参数,然后再看来每个样本是属于哪个组成部分。这也就是
E
步骤; - 通过得到的这些隐含变量结果,反过来求每个组成部分高斯分布的参数,即
M
步骤; - 反复
EM
步骤,直到每个组成部分的高斯分布参数不变为止。
关联规则挖掘
关联规则挖掘可以让我们从数据集中发现项与项(item 与 item)之间的关系。
一些概念:
- 支持度:支持度是个百分比,它指的是某个商品组合出现的次数与总次数之间的比例;
- 置信度:它指的就是当你购买了商品 A,会有多大的概率购买商品 B;
- 提升度:代表的是“商品 A 的出现,对商品 B 的出现概率提升的”程度。
我们可以用下面的公式来计算商品 A 对商品 B 的提升度:提升度 (A→B)= 置信度 (A→B)/ 支持度 (B)。
Apriori
算法的递归流程:
K
=1,计算K
项集的支持度;- 筛选掉小于最小支持度的项集;
- 如果项集为空,则对应
K-1
项集的结果为最终结果。
Apriori
算法在实际工作中需要对数据集扫描多次,会消耗大量的计算时间,所以在 2000 年 FP-Growth
算法被提出来,它只需要扫描两次数据集即可以完成关联规则的挖掘。FP-Growth
算法最主要的贡献就是提出了 FP
树和项头表,通过 FP
树减少了频繁项集的存储以及计算时间。
PageRank
一个网页的影响力 = 所有入链集合的页面的加权影响力之和,用公式表示为:
u
为待评估的页面,Bu
为页面 u
的入链集合。针对入链集合中的任意页面 v,它能给 u
带来的影响力是其自身的影响力 PR(v)
除以 v
页面的出链数量,即页面 v
把影响力 PR(v)
平均分配给了它的出链,这样统计所有能给 u
带来链接的页面 v
,得到的总和就是网页 u
的影响力,即为 PR(u)
。
PageRank 面临的两个问题:
- 等级泄露(
Rank Leak
):如果一个网页没有出链,就像是一个黑洞一样,吸收了其他网页的影响力而不释放,最终会导致其他网页的PR
值为 0。 - 等级沉没(
Rank Sink
):如果一个网页只有出链,没有入链,计算的过程迭代下来,会导致这个网页的PR
值为 0(也就是不存在公式中的V
)。
PageRank 的随机浏览模型:
定义了阻尼因子 d
,这个因子代表了用户按照跳转链接来上网的概率,通常可以取一个固定值 0.85,而 1-d
=0.15 则代表了用户不是通过跳转链接的方式来访问网页的,比如直接输入网址,N
为网页总数。通过数学定理(这里不进行讲解)也可以证明,最终 PageRank 随机浏览模型是可以收敛的,也就是可以得到一个稳定正常的 PR
值。
AdaBoost
AdaBoost
的英文全称是 Adaptive Boosting
,中文含义是自适应提升算法。Boosting
算法是集成算法中的一种,同时也是一类算法的总称。这类算法通过训练多个弱分类器,将它们组合成一个强分类器。
AdaBoost
算法与随机森林算法一样都属于分类算法中的集成算法。
假设弱分类器为 Gi(x)
,它在强分类器中的权重 αi
,那么就可以得出强分类器 f(x)
:
Q1
:每个弱分类器在强分类器中的权重是如何计算的?
答:通过弱分类器对样本的分类错误率来决定它的权重。
其中 ei
代表第 i
个分类器的分类错误率。
Q2:如何得到弱分类器,也就是在每次迭代训练的过程中,如何得到最优弱分类器?
AdaBoost
算法是通过改变样本的数据分布来实现的。AdaBoost
会判断每次训练的样本是否正确分类,对于正确分类的样本,降低它的权重,对于被错误分类的样本,增加它的权重。再基于上一次得到的分类准确率,来确定这次训练样本中每个样本的权重。然后将修改过权重的新数据集传递给下一层的分类器进行训练。这样做的好处就是,通过每一轮训练样本的动态权重,可以让训练的焦点集中到难分类的样本上,最终得到的弱分类器的组合更容易得到更高的分类准确率。
一些疑问
Q1:决策树的剪枝在 sklearn 中是如何实现的?
实际上决策树分类器,以及决策树回归器(对应 DecisionTreeRegressor 类)都没有集成剪枝步骤。一般对决策树进行缩减,常用的方法是在构造 DecisionTreeClassifier 类时,对参数进行设置,比如 max_depth
表示树的最大深度,max_leaf_nodes
表示最大的叶子节点数。通过调整这两个参数,就能对决策树进行剪枝。
实战篇
随机森林
随机森林的英文是 Random Forest
,英文简写是 RF
。它实际上是一个包含多个决策树的分类器,每一个子分类器都是一棵 CART
分类回归树。所以随机森林既可以做分类,又可以做回归。当它做分类的时候,输出结果是每个子分类器的分类结果中最多的那个。你可以理解是每个分类器都做投票,取投票最多的那个结果。当它做回归的时候,输出结果是每棵 CART
树的回归结果的平均值。
参数优化
GridSearchCV 是 Python 的参数自动搜索模块。我们只要告诉它想要调优的参数有哪些以及参数的取值范围,它就会把所有的情况都跑一遍,然后告诉我们哪个参数是最优的,结果如何。
Pipeline 管道机制让我们把每一步都按顺序列下来,从而创建 Pipeline 流水线作业。每一步都采用 (‘名称’, 步骤) 的方式来表示。譬如,采用 Pipeline 管道机制,用随机森林对 IRIS 数据集做一下分类。先用 StandardScaler 方法对数据规范化,然后再用随机森林分类
1 | rf = RandomForestClassifier() |
逻辑回归
逻辑回归,也叫作 logistic
回归。虽然名字中带有“回归”,但它实际上是分类方法,主要解决的是二分类问题,当然它也可以解决多分类问题,只是二分类更常见一些。
在逻辑回归中使用了 Logistic
函数,也称为 Sigmoid
函数。
数据预测准确率
数据预测的四种情况:TP
、FP
、TN
、FN
。我们用第二个字母 P 或 N 代表预测为正例还是负例,P
为正,N
为负。第一个字母 T
或 F
代表的是预测结果是否正确,T
为正确,F
为错误。
TP
:预测为正,判断正确;FP
:预测为正,判断错误;TN
:预测为负,判断正确;FN
:预测为负,判断错误。
精确率 :P = TP/ (TP+FP)
。
召回率 :R = TP/ (TP+FN)
,也称为查全率。
F1
指标综合了精确率和召回率,可以更好地评估模型的好坏,数值越大代表模型的结果越好。
不是所有的分类都是样本平衡的情况,针对正例比例极低的情况,比如信用卡欺诈、某些疾病的识别,或者是恐怖分子的判断等,都需要采用精确率 - 召回率来进行统计。
时间序列预测
对一个数值进行预测的时候,如果考虑的是多个变量和结果之间的关系,可以采用回归分析,如果考虑单个时间维度与结果的关系,可以使用时间序列分析。
在时间序列预测模型中,有一些经典的模型,包括 AR、MA、ARMA、ARIMA
。
AR
AR
的英文全称叫做 Auto Regressive
,中文叫自回归模型。这个算法的思想比较简单,它认为过去若干时刻的点通过线性组合,再加上白噪声就可以预测未来某个时刻的点。
AR
模型还存在一个阶数,称为 AR(p)
模型,也叫作 p
阶自回归模型。它指的是通过这个时刻点的前 p
个点,通过线性组合再加上白噪声来预测当前时刻点的值。
MR
MA
的英文全称叫做 Moving Average
,中文叫做滑动平均模型。它与 AR 模型大同小异,AR 模型是历史时序值的线性组合,MA 是通过历史白噪声进行线性组合来影响当前时刻点。
AR
和 MA
模型都存在阶数,在 AR
模型中,我们用 p
表示,在 MA
模型中我们用 q
表示,这两个模型大同小异,与 AR
模型不同的是 MA
模型是历史白噪声的线性组合。
ARMR
ARMA
的英文全称是 Auto Regressive Moving Average
,中文叫做自回归滑动平均模型,也就是 AR
模型和 MA 模型的混合。相比 AR
模型和 MA
模型,它有更准确的估计。同样 ARMA
模型存在 p
和 q
两个阶数,称为 ARMA(p,q)
模型。
ARIMA
ARIMA
的英文全称是 Auto Regressive Integrated Moving Average
模型,中文叫差分自回归滑动平均模型,也叫求合自回归滑动平均模型。相比于 ARMA
,ARIMA
多了一个差分的过程,作用是对不平稳数据进行差分平稳,在差分平稳后再进行建模。ARIMA
的原理和 ARMA
模型一样。相比于 ARMA(p,q)
的两个阶数,ARIMA
是一个三元组的阶数 (p,d,q)
,称为 ARIMA(p,d,q)
模型。其中 d
是差分阶数。
AIC
准则,也叫作赤池消息准则,它是衡量统计模型拟合好坏的一个标准,数值越小代表模型拟合得越好。
数据挖掘/机器学习/深度学习
数据挖掘通常是从现有的数据中提取规律模式(pattern)以及使用算法模型(model)。核心目的是找到这些数据变量之间的关系,因此我们也会通过数据可视化对变量之间的关系进行呈现,用算法模型挖掘变量之间的关联关系。通常情况下,我们只能判断出来变量 A 和变量 B 是有关系的,但并不一定清楚这两者之间有什么具体关系。在我们谈论数据挖掘的时候,更强调的是从数据中挖掘价值。
机器学习是通过训练数据和算法模型让机器具有一定的智能。一般是通过已有的数据来学习知识,并通过各种算法模型形成一定的处理能力,比如分类、聚类、预测、推荐能力等。这样当有新的数据进来时,就可以通过训练好的模型对这些数据进行预测,也就是通过机器的智能帮我们完成某些特定的任务。
深度学习属于机器学习的一种,它的目标同样是让机器具有智能,只是与传统的机器学习算法不同,它是通过神经网络来实现的。神经网络中我们更关注的是网络结构,以及网络结构中每层神经元的传输机制。我们不需要告诉机器具体的特征规律是什么,只需把我们想要训练的数据和对应的结果告诉机器大脑即可。
常用的神经网络
FNN
(Fully-connected Neural Network)指的是全连接神经网络,全连接的意思是每一层的神经元与上一层的所有神经元都是连接的。
CNN
叫作卷积神经网络,在图像处理中有广泛的应用,包括了卷积层、池化层和全连接层。 流程:通过卷积层提取特征,通过激活函数让结果映射到非线性空间,增强了结果的表达能力,再通过池化层压缩特征图,降低了网络复杂度,最后通过全连接层归一化,然后连接 Softmax 分类器进行计算每个类别的概率。
- 卷积操作是对图像进行了特征的提取。实际上每个卷积核都是一种滤波器,它们把图像中符合条件的部分筛选出来,也就相当于做了某种特征提取;
- 激活函数通常都是非线性的函数,使用它们的目的是把线性数值映射到非线性空间中。卷积操作实际上是两个矩阵之间的乘法,得到的结果也是线性的。只有经过非线性的激活函数运算之后,才能映射到非线性空间中,这样也可以让神经网络的表达能力更强大;
- 池化层通常在两个卷积层之间,它的作用相当于对神经元的数据做降维处理,这样就能降低整体计算量。常用的池化操作是平均池化和最大池化,均池化是对特征点求平均值,最大池化则是对特征点求最大值;
- 全连接层将前面一层的输出结果与当前层的每个神经元都进行了连接。
RNN
称为循环神经网络,它的特点是神经元的输出可以在下一个时刻作用到自身,这样 RNN 就可以看做是在时间上传递的神经网络。它可以应用在语音识别、自然语言处理等与上下文相关的场景。
Softmax
是个很有用的分类器,通过它可以把输入值映射到 0-1 之间,而且所有输出结果相加等于 1。
常用的深度学习框架对比
Keras,你可以理解成是把 Tensorflow 或 Theano 作为后端,基于它们提供的封装接口,这样更方便我们操作使用。
工作篇
数据思维的培养
打标签是一种抽象能力。当你对这些事件逐一分析打标签的时候,就有可能从更高的维度上观察到这些事件的规律。
培养数据分析思维是重要不紧急的事。
- 学会提问,它从提问的角度训练我们的数据化思维,让我们对事物看得更清楚;
- 学会分享,它从反馈的角度让我们的训练过程更加收敛,效率得到提升,也更容易获得成就感。
课程中的一些实践
乳腺癌检测:采用 SVM 方法,对美国威斯康星州的乳腺癌诊断数据集进行分类,最终实现一个针对乳腺癌检测的分类器:链接
内容抓取:通过 Python 爬虫对豆瓣电影中的电影数据和海报等信息进行抓取:链接
邮件数据分析:通过 PageRank 算法分析邮件中的人物关系图谱,并针对邮件数量较大的情况筛选出重要的人物,进行绘制:链接
微博文档分类:采用朴素贝叶斯的方法,对微博的内容进行分类,最终实现一个简单的文档分类器:链接
电影数据集关联规则挖掘:采用 Apriori 算法,分析电影数据集中的导演和演员信息,从而发现导演和演员之间的频繁项集及关联规则:链接
歌词词云可视化:动态抓取指定明星的歌曲列表,保存歌词文件,去除歌词中的常用词,并对歌词进行词云展示,分析歌曲的作词风格:链接
信用卡违约率分析:针对台湾某银行信用卡的数据,构建一个分析信用卡违约率的分类器。采用 Random Forest 算法,信用卡违约率识别率在 80% 左右:链接
信用卡欺诈分析:针对欧洲某银行信用卡交易数据,构建一个信用卡交易欺诈识别器。采用逻辑回归算法,通过数据可视化方式对混淆矩阵进行展示,统计模型的精确率,召回率和 F1 值,F1 值为 0.712,并绘制了精确率和召回率的曲线关系:链接
比特币走势分析:分析 2012 年 1 月 1 日到 2018 年 10 月 31 日的比特币价格数据,并采用时间序列方法,构建自回归滑动平均模型(ARMA 模型),预测未来 8 个月比特币的价格走势。预测结果表明比特币将在 8 个月内降低到 4000 美金左右,与实际比特币价格趋势吻合(实际最低降到 4000 美金以下):链接