《白话大数据与机器学习》

白话大数据与机器学习

    • 第四章
      • 高斯距离 曼哈顿距离
      • 同比和环比
      • 高斯分布(正态分布)
      • 泊松分布
      • 伯努利分布
    • 第六章 信息论
      • 信息量
      • 香农公式
      • 信息熵
      • 多维空间
    • 第八章 回归(分类算法)
      • 线性回归
      • 过拟合
      • 欠拟合
    • 第九章 聚类
      • 9.1 K-means 算法
      • 9.3 孤立点
      • 9.4 层次聚类
        • 层次聚类的应用
      • 9.5 密度聚类
      • 9.6 聚类评估
        • 9.6.1 聚类趋势
        • 9.6.2 簇数决定
        • 9.6.3 测定聚类质量(轮廓系数 Silhouette Coefficient)
    • 第十章 分类
      • 10.1 朴素贝叶斯
      • 10.2 决策树归纳
        • 信息增益
        • 连续型变量
          • 前剪枝
          • 后剪枝
      • 10.3 随机森林
      • 10.4 隐马尔可夫模型(*)
      • 10.5 支持向量机SVM
        • 年龄和好坏
        • 超平面
        • N维空间中的距离
        • 核函数
        • SVM小结
      • 10.6 遗传算法(**)
    • 第十一章 关联分析
      • 11.1 经典的Apriori算法
      • 11.2 关联分析和相关性分析
      • 11.3 稀有模式和负模式
    • 第十三章 推荐算法
      • 13.2 user-base CF
      • 13.3 item-based CF
      • 13.4 优化问题
    • 第十四章 文本挖掘
      • 14.1 文本挖掘的领域
      • 14.2 文本分类
        • (1)分词
        • (2)文本表示
        • (3) 分类标记
        • 14.2.1 Rocchio算法
        • 14.2.2 朴素贝叶斯算法
        • 14.2.3 K-近邻算法(KNN)
        • 14.2.4 支持向量机的SVM算法
    • 第十五章 人工神经网络(^)
      • 常见的神经网络
        • BP神经网络
          • 结构和原理
          • 训练过程
        • 玻尔兹曼机(*)
        • 卷积神经网络

该笔记只摘取重要部分进行记录,像有些章节讲述平均值,加权平均这些就没有记录,括号里面写*是属于略读而过的;标注 * * 的是完全没有读过埋坑;
标注^的是其中有部分内容有着比较详细的过程来不及做笔记的。

第四章

高斯距离 曼哈顿距离

高斯距离是各个维度平方和开方
曼哈顿距离是对于不同维度分别做差之后简单加和

同比和环比

同比:与相邻的同一时期相比,比如 比去年同比增长 多少多少
环比:直接和上一个报告期的相比,比如相比上个月的报告 增长多少多少

高斯分布(正态分布)

《白话大数据与机器学习》_第1张图片

u比较大,整个图像的中轴往右边挪动得比较多;
u比较小,整个 往左边挪动得比较多;
σ比较大,方差比较大,整个坡比较平缓;
σ比较小,方差比较小,整个坡比较陡。

泊松分布

《白话大数据与机器学习》_第2张图片

《白话大数据与机器学习》_第3张图片
泊松分布适合描述单位时间内随机事件发生的次数。
1.事件是小概率事件;
2.事件的每次发生都是独立的不会相互影响
3.事件的概率都是稳定的

只要记住这个公式的使用方法就可以了:
发生一件事情A的发生率是λ(总的发生了λ次),A的子事件B发生的次数是k
此时计算发生k次的概率就可以使用泊松分布来计算

伯努利分布

其实就是0-1分布,最简单的二项分布
《白话大数据与机器学习》_第4张图片


第六章 信息论

信息量

如果每件事件发生的概率是不相等的,那么不能简单地使用事件的个数来衡量单个事件发生的信息量,比如 l o g 2 m log_2 m log2m 。 此时使用另外一种表达方式,如
H ( X i ) = − l o g 2 P H(X_i)= -log_2 P HXi=log2P
其中 P 是事件发生的概率,这种情况下,P越小(也就是事件的可能性越小),这个信息的信息量越大,比如 中国乒乓球 对战 巴西乒乓球队 或者巴西足球 对战 中国足球队,两个场景中前者获胜(暂且称之为事件A)的概率会比较大,这种事情发生就是没有悬念的。那A事件的信息量就是比较小的。

香农公式

C = B ∗ l o g 2 ( 1 + S / N ) C = B*log_2 (1+S/N) C=Blog2(1+S/N)
S/N 是信噪比,信噪比越高信号越好。S是信号功率,N是噪声功率。

信息熵

H ( x ) = − ∑ i = 1 n p ( x i ) l o g 2 p ( x i ) H(x) = - \sum_{i=1}^{n} p(x_i) log_2 p(x_i) H(x)=i=1np(xi)log2p(xi)
其中i = 1 ~ n
在书中总结了一个结论,当且仅当每个事件发生的概率相等时,该场景的信息熵最大。

多维空间

信息冗余有利于提高数据运算;两个正交的维度上的数值不相互影响,比如
{姓名,姓,名,出生年龄} 中姓和名是互相独立的,是正交的,而姓名是依赖于姓和名这两个维度的,称姓名和姓或者名是不正交的。
向量的设计应该采用维度正交的原则。


第八章 回归(分类算法)

线性回归

y = ax+b+e
高中物理 测小车的运动速度从而来得到重力加速度的实验,得到结论 v = gt.
在实验中其实是一个不太准确的函数 v = gt+e. 其中e是一个不确定的值,也就是这个值在任何实验点带入的情况下它都是取到不同的值,但是它依然有意义,反映了这个曲线的拟合程度。
通过调整g的值使得e(残差)尽可能小。

过拟合

危害:描述复杂;失去泛化能力;

原因:样本太少;把噪声也训练进模型中。

欠拟合

原因:参数过少;拟合不当(不正确)


第九章 聚类

9.1 K-means 算法

直接上算法原理:
1.从n个向量对象中选取k个作为初始聚类簇中心
2.根据在步骤1中设置的k个向量(中心对象向量),计算每个对象到这k个中心对象各自的距离
3.对于步骤2中的计算,任何一个向量都与这k个向量有一个距离,距离这个向量最近的中心对象向量就是该向量的中心
4.重新计算每个类簇的中心对象向量位置
5.重复3 4 步骤,知道类簇中向量归类变化极少为止,比如只有少于1%的向量还在类簇之间的归类漂移,此时分类基本完成,结束算法。

k-means需要事先指定类簇的数量;需要实现给定初始的类中心(但个人认为后半句不必要,因为是随机选取)。

9.3 孤立点

谈到聚类算法就要讲到孤立点,产生孤立点的原因可能是:1.数据清洗不当;2.孤立点通常有一些和群体里个体差异极大的样本组成。
在银行的信用卡诈骗识别中,通过对大量的信用卡用户信息和消费行为进行向量化建模和聚类,发现聚类中远离大量样本的点——这些点可能就是银行信用卡诈骗的导致的消费行为。

9.4 层次聚类

自顶向下不断细分种群,这期间可以使用简单的k-means;当然这种做法耗时不建议,接下来介绍一种 AgglomerativeClustering 的算法(scikit-learn)
1.初始化:树根是训练样本向量(没太懂),树叶就是每个单独的样本
2.自底向上:设计几个观察点,散布在整个训练样本中,自下而上进行类簇的合并,合并遵循一定的规则

这些规则有:
1.ward策略:让所有类簇的方差最小化(类内的,方差之和)
2.maximum策略:全连接策略,将类簇之间的距离最大值最小画
3.average linkage策略:将簇之间的距离的平均值最小化

使用这些策略事,只需要如下即可,

from sklearn.cluster import AgglomerativeClustering
# X 是数据集
cls = AgglomerativeClustering(linkage = 'ward' , n_clusters = n_clusters).fix(X)

层次聚类的应用

对于一个人爱听的歌曲进行层次化的聚类,对每首歌的各个信息维度进行向量建模,比如{‘音域’,‘调式’,‘节拍’,‘速度’,‘配乐乐器’},对上述信息进行量化,可以尝试挖掘这个用户喜欢的歌曲的大类别,以及其下的小类别,或者研究歌曲流行风格进化细化的趋势等。

9.5 密度聚类

《白话大数据与机器学习》_第5张图片
算法原理:
1.任意选一个没有类别的核心对象作为种子,然后找到所有这个核心对象密度可达的所有样本组成的集合,作为一个聚类簇
2.接着继续选择另外一个没有类别的核心对象去寻找密度可达的样本集合,直到所有的对象都有类别

from sklearn.cluster import DBSCAN
cls = DBSCAN(eps = 2000, min_samples = 1).fix(X)

eps:设置一个阈值,向外扩展的时候发现这个阈值距离范围内找不到向量,就认为这个类簇已经查找完毕。
min_samples : 告诉算法一个簇最小应该拥有多少个向量,如果这个值设置为3,则算法会认为所有小于3个向量的聚类作为噪声点,将在结果中丢弃。

使用DBSCAN算法可能遇到几种特殊情况,这里只描述一点,某些样本可能到两个核心对象的距离都小于 ϵ \epsilon ϵ ,
但是这两个核心不是密度直达,又不属于同一个聚类簇,那么一般按照先来后到,先进行聚类簇会标记和这个样本为它的类别。也就是说DBSCAN不是完全稳定的算法。

9.6 聚类评估

(1)估计聚类的趋势。这与其说是聚类的评判指标,不如说是能否进行聚类的条件,该数据集最好拥有非随机结构(分布不均匀的情况)。
(2)确定数据集中的簇数。人为地确定聚类簇的数量,需要考量人为动作是否合理。
(3)测量聚类的质量。使用量化的方法来测量聚类的质量。

9.6.1 聚类趋势

如果样本空间本身是随机的,那么使用聚类肯定是有问题的,在这里我们使用霍普金斯统计量。

算法原理:
1.从所有样本向量中随机找到n个向量,称为p向量,每个向量分别是 p 1 , p 2 , p 3 . . . . . , p n p_1,p_2,p_3.....,p_n p1,p2,p3.....,pn,对每一对向量都在样本空间中寻找一个距离其最近的向量,然后求距离(欧式距离),使用 x 1 , x 2 , x 3 . . . . x n x_1,x_2,x_3....x_n x1,x2,x3....xn来表示这个距离。
2.在所有样本容量中,随机寻找n个向量,称为q向量,同样的记为 q 1 , q 2 . . . . q n q_1,q_2....q_n q1,q2....qn ,然后在样本空间中找到一个最近的向量,使用 y 1 , y 2 , y 3 . . . . . y n y_1,y_2,y_3.....y_n y1,y2,y3.....yn来表示这些距离。
3.秋初霍普金斯统计量 H

∑ i = 1 n y i ∑ i = 1 n x i + ∑ i = 1 n y i \frac{\sum_{i=1}^{n} y_i}{\sum_{i=1}^{n} x_i+\sum_{i=1}^{n} y_i} i=1nxi+i=1nyii=1nyi

如果样本空间是一个均匀 的,没有聚类趋势的空间,那么H应该是0.5左右,反之,如果是有聚类趋势的空间,那么H应该趋近于1 。

9.6.2 簇数决定

肘方法:尝试把样本空间划分为1个类,2个类,3个类…n个类 。每个类都有若干个向量,计算这些向量的空间中心点(也就是重心),然后计算每个类簇中每个向量和重心的距离的和。然后把m个类簇各自的距离和相加得到一个函数var(n),n 就是类簇数(最后是从横轴得到应该分成多少个类簇的)。
上面这个函数var(n)使用ML中的term即是SSE S S E = ∑ i = 1 m w i ( y i − y i ^ ) 2 SSE = \sum_{i=1}^{m} w_i (y_i - \hat{y_i})^2 SSE=i=1mwi(yiyi^)2
当然这里的 w i w_i wi 统一使用1,因为边与边之间默认没有权重。放个网图

《白话大数据与机器学习》_第6张图片
从两种极端情况来考量这个SSE:平方和最大的情况下应该是分成一个类,也就是不分类的时候,所有的向量到重心的距离都非常大,这样的距离和也是最大的。然后尝试划分为2个类,3个类,4个类…随着分类的增多,第m次划分时,每个向量到自己簇的重心的距离,就会比上一次(m-1次)临近的机会更大,那么这个距离SSE总体上就会缩小。极限情况就是最后分成n个类,n是整个空间向量的数量,每个向量一个类。SSE就等于0,每个向量距离自己的距离都是0。

整条曲线中斜率会逐步下降,一开始是快速下降的,下降过程中有一个拐点,让人感觉从陡变成平滑,那这个点就是要找的点。此时分为m个类簇,再分为更多的类簇,此时没有前面每次的“收获”那么大,此时的m被认为是最合适的类簇数目,曲线类似于人的手肘,称为肘方法。注意课本的距离使用的是曼哈顿距离,也就是说不止可以用SSE,只要一种合适的即可(SSE实际上是一种欧式距离)

9.6.3 测定聚类质量(轮廓系数 Silhouette Coefficient)

其实前面两种不是经常听到的,因为它们偏向于对聚类的可用性进行考量,而测定质量才是对更加微小的效果进行测量。

有内在方法和外在方法,重点考量内在方法,Bcubed精度和Bcubed召回率。内在方法使用轮廓系数 (Silhouette Coefficient)注意这里的系数英文名, 很多时候在论文中都可以看到这个字眼。

轮廓系数算法原理:
对于有n个向量的样本空间,假设它被分成k个类簇, C 1 , C 2 , C 3 . . . . . . C k C_1,C_2,C_3......C_k C1,C2,C3......Ck。对于任何一个样本空间中的向量v来说,可以求一个从v到本类簇中其他各点距离的平均值 a ( v ) a(v) a(v), 然后还可以求一个v到其他所有各类簇的最小平均距离(从每个类簇挑出一个距离v最近的向量,计算距离),求这些距离的平均值,得到 b ( v ) b(v) b(v),此时计算轮廓系数为
b ( v ) − a ( v ) m a x [ a ( v ) , b ( v ) ] \frac{ b(v) - a(v) }{max[a(v),b(v)]} max[a(v),b(v)]b(v)a(v)
这个数的结果在 -1到1之间。 a(v)表示的是类簇内部的紧凑性,越小越紧凑。b(v)表示该类簇和其他类簇之间的分离程度。如果函数值接近1,即a(v)比较小而 b(v) 比较大,说明 v 的类簇相当紧凑,而且远离其他簇,如果为负数,说明b < a,v距离其他的类簇比距离自己所在的类簇还要近,说明这是一个失败的聚类。
为了类簇划分更加合理,可以计算所有簇中所有对象的轮廓系数的平均值,这种做法可能计算量较大,提供两种思路剪枝求近似解
① 如果轮廓系数是负数可以直接淘汰,进行下一次聚类;
② 对数据进行抽样之后再进行轮廓系数的计算。

在多个正数方案中选择尽可能靠近1的聚类方法即可。


第十章 分类

分类算法是机器学习的一个重点,也可以称为“有监督学习”。这是一种利用一系列已知类别的样本来对模型进行训练调整分类的参数,使其到达所要求的性能的过程。

分类和回归有一定的相似之处:因变量是定量型的归纳学习称为回归,或者称为连续变量预测;因变量是定性型的归纳学习的归纳学习称为分类,或者称为离散变量预测

10.1 朴素贝叶斯

贝叶斯决策理论方法是统计模型决策的一个基本方法,基本的思想如下:
(1)已知类条件概率密度参数表达式和先验概率
(2)利用贝叶斯公式转换成后验概率
(3)根据后验概率的大小进行决策分类

D 1 , D 2 , . . . . . . , D n D_1,D_2,......,D_n D1,D2,......,Dn 为样本空间的一个划分,如果以 P ( D i ) P(D_i) P(Di)表示 D i D_i Di发生的概率,而且每个P(D)大于0。对于任何一个事件 x , P ( x ) > 0 x , P(x)>0 x,P(x)>0,则有 P ( D j ∣ x ) = P ( x ∣ D j ) P ( D j ) ∑ i = 1 n P ( x ∣ D i ) P ( D i ) P(D_j|x) =\frac{P(x|D_j)P(D_j)}{\sum_{i=1} ^{n}P(x|D_i)P(D_i)} P(Djx)=i=1nP(xDi)P(Di)P(xDj)P(Dj)

在一个样本空间里有很多事件发生, D i D_i Di 就是指不同的事件划分,并且 D i D_i Di可以把整个空间划分完毕,在每个 D i D_i Di事件发生的同时都记录着事件x的发生;等式的右边分母就是 D i D_i Di发生时发生x发生的概率加和 D i D_i Di。所以分母这一项其实就是在整个样本空间里,x发生的概率。 P ( D j ∣ x ) P(D_j|x) P(Djx)这一项是指x发生的情况下, D j D_j Dj发生的概率。右侧的分母和左侧相乘得到在全样本空间中,在x发生的情况下又发生 D j D_j Dj的情况的概率。右侧分子部分的含义是 D j D_j Dj发生的概率乘以 D j D_j Dj发生的情况下又发生 x x x的概率。
所以贝叶斯公式也可以写成
P ( D j ∣ x ) P ( x ) = P ( x ∣ D j ) P ( D j ) P(D_j|x)P(x) = P(x|D_j)P(D_j) P(Djx)P(x)=P(xDj)P(Dj)
也就是说在全样本空间中,发生x的概率乘以在发生x的情况下发生D_j的概率, 等于 ,发生 D j D_j Dj的概率乘以在发生 D j D_j Dj的情况下发生x的概率。

也可以简写为 P ( A ∣ B ) P ( B ) = P ( B ∣ A ) P ( A ) P(A|B)P(B) = P(B|A)P(A) P(AB)P(B)=P(BA)P(A)
这个公式也成为朴素贝叶斯公式,naive bayesian.
P ( A ) P(A) P(A) 叫做A事件的先验概率,在一般情况下,认为A发生的概率;
P ( B ∣ A ) P(B|A) P(BA) 叫做似然度,在A假设条件成立的情况下发生B的概率;
P ( A ∣ B ) P(A|B) P(AB) 叫做后验概率,在B发生的情况下发生A的概率,也就是要计算的概率;
P ( B ) P(B) P(B) 叫做标准化常量,和A的先验概率定义类似,在一般情况下,B的发生概率。
注意对比一下代码,不同于聚类的代码的是,我们在fix的过程需要有Y,这也是有监督算法和之前无监督算法的根本区别

from sklearn.naive_bayes import GaussianNB
clf = GaussianNB().fix(X,Y)

sklearn中有几种贝叶斯分类的变种模型,其中以上代码使用了高斯朴素贝叶斯
(1)高斯朴素贝叶斯
(2)多项式朴素贝叶斯
(3)伯努利朴素贝叶斯

(1)利用了高斯概率密度公式唉进行分类拟合的;
(2)多用于高维度向量分类,最常用的场景是文章分类;
(3)伯努利朴素贝叶斯一般是针对布尔类型特征值的向量做分类的过程。
(本身伯努利就是一种0-1分布)

10.2 决策树归纳

信息增益

还记得我们在之间讲过信息熵 i n f o = − ∑ i = 1 m p i l o g 2 p i info = -\sum_{i=1}^{m} p_i log_2 p_i info=i=1mpilog2pi
这是一个加和结果,m的数量就是分类(决策)的种类,就是分支的个数。从熵的定义来看,如果熵越大说明信息混乱程度比较大,做切割时比较复杂,要切割若干次才能完成。
那对于决策树算法来说,目的就是消除信息混杂,哪种切分的方法能使得信息混乱消除程度最大,说明这种方法的效果就会更好。
假设用某个字段A来划分,在这种划分规则下,熵为 i n f o A = − ∑ j = 1 v p j ∗ i n f o ( A j ) info_A = - \sum_{j=1}^{v} p_j * info(A_j) infoA=j=1vpjinfo(Aj)
info_A就是指要求的熵,v就是分支的个数, p j p_j pj表示这个分支的概率,也可以认为是一种权重, i n f o A info_A infoA就是在当前分组状态下的期望信息值。

连续型变量

设定一个阈值,将节点进行切分

前剪枝

提前终止树的构造

后剪枝

等树完全构造完了之后,再进行剪枝
(这部分内容书中没有过多的内容,详细的剪枝策略可以谷歌)

10.3 随机森林

在决策树中会遇到过拟合和欠拟合的问题,在随机森林算法中,在一棵树上不会追求极其精确的拟合,希望决策树的简洁和计算的快速

(1)随机挑选一个字段构造树的第一层
(2)随机挑选一个字段构造树的第二层

()随机挑选构造n层
()按照以上的方式构造m棵决策树

原则:
1.树的层数 一般比较浅;
2.每棵树的分类都不能保证分类精度很高;
3.一个样本进行分类时同时对这m棵决策树做分类概率判断;

由于决策树的数量多了,那此时一定能得到比较好的决策划分。

10.4 隐马尔可夫模型(*)

这块内容基本看了一遍,但是对于HMM书中更多的是讲了一个例子,没有讲太难的理论,因此没有过分总结
隐含状态,转换概率,可见状态链,隐含状态链;
维特比算法
前向算法

10.5 支持向量机SVM

年龄和好坏

假设 客户的好坏只和年龄有关,那么可以在某个年龄的分水岭切一刀,左右分别是好客户和坏客户

关键点
1.切入点在SVM中称为超平面:一位是一个点,二维是一条线,三维是一个面
2.过拟合:容易导致一刀切,分割边界有一些错误分类的点
3.不纯度:在降低不纯度的同时,需要考虑降低不纯度而做出的训练成本

超平面

在平面直角坐标系中,如果有一条直线,方程 Ax+By+C = 0,那么点(x0,y0)到达该直线的距离如下 d = ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 d=\frac{|Ax_0+By_0+C|}{\sqrt{ A^2+B^2}} d=A2+B2 Ax0+By0+C 如果数轴(也就是一维)上也需要类似的,”x-27.5>0“对应好的客户,”x-27.5<0“代表不好的客户;
如果是二维的平面,如上式所示,”Ax+By+C > 0“就是好的客户,”Ax+By+C<0“就是不好的客户;
如果是三维空间上,那就是 AX+BY+CZ+D>0…
如果是四维空间,那就是AX+BY+CZ+Dα+E>0…
一般的,超平面写成 g ( v ) = w v + b g(v) = wv + b g(v)=wv+b v 是样本向量,b是常数。
在二维空间中v=(x,y),wt = AX+BY;三维v=(x,y,z),wt = AX+BY+CZ;也就是说, g ( x ) = w T x + b g(x) = w^T x + b g(x)=wTx+b或者 g ( x ) = w x + b g(x) = \bm{wx} + b g(x)=wx+b

N维空间中的距离

d = ∣ A x 0 + B y 0 + C ∣ A 2 + B 2 d=\frac{|Ax_0+By_0+C|}{\sqrt{ A^2+B^2}} d=A2+B2 Ax0+By0+C
由这个式子可以归纳得出距离公式可以写成 d = ∣ g ( v ) ∣ ∣ ∣ w ∣ ∣ d = \frac{|g(v)|}{||\bm{w}||} d=wg(v)
||w|| 是范数,是超平面方程的各维度系数的平方和再开方,范数有欧几里德范数和绝对值范数,具体wiki一下。

核函数

核函数的作用就是把在当前维度下线性不可分的问题映射到高维度上去,构造分类函数,核函数有线性核函数,多项式核函数,径向基核函数,高斯核函数等等。
这里映射到高维度有点抽象,研究二维空间上的向量分类问题,经过核函数映射,最后得到的超平面变成了二维空间上的曲线,同时也是三维空间上的一次方程;三维空间上的向量分类问题,经过核函数映射,最后得到的超平面变成了三维空间上的曲面,同时也是思维空间上的一次方程,实际上这在数学上只是一个变量代换关系,不用深究。

SVM小结

SVM解决问题的方法可以总结为:
1.把所有的样本和对应的分类标记交给算法进行训练;
2.如果发现线性可分,直接找出超平面;
3.如果线性不可分,映射到n+1维空间,找出超平面
4.最后得到超平面的表达式,也就是分类函数

10.6 遗传算法(**)


第十一章 关联分析

啤酒和尿布案例
支持度和置信度
支持度:就是百分比
置信度:就是条件概率,有向的;购买了啤酒里面购买了香烟的占比 不等于 购买了香烟里面购买了啤酒的占比。

11.1 经典的Apriori算法

1.设置一个最小支持度作为阈值门限值进行扫描,对同时过滤最小支持度和最小置信度这两个操作来说,最小支持度的查找更为简单一点。
2.查找满足条件的2项模式,根据已经过滤出的单品,组合一下看候选的2项模式有哪些。(本算法中假设只使用了支持度来过滤)
3.如果要寻找3项模式,那么需要在1项和2项满足模式中取出来进行组合,满足阈值即可。

求出所有的频繁模式
在所有的2项模式中找出置信度符合条件的,正向一次,反向一次。

11.2 关联分析和相关性分析

提升度 l i f t ( A , B ) = P ( B ∣ A ) P ( B ) lift(A,B) = \frac{P(B|A)}{P(B)} lift(A,B)=P(B)P(BA)
其实就是贝叶斯公式(一直贝叶斯一直爽)

11.3 稀有模式和负模式

设置一个小的多的数字作为过滤条件。如果X和Y都是频繁出现的,但是很少或者不会一起出现,那么就说X和Y是负相关的。或者说X和Y组成的模式的支持度远远小于X的支持度和Y的支持度,那么就说X和Y是负强相关的。


第十三章 推荐算法

生活中的推荐系统就不举例子了,随处都是

13.2 user-base CF

余弦值cos的求解可以简单wiki一下,高一或者初中都有学过

用户001 {8,7,8,5,8}
用户002 {10,7,2,4,null}
这几个字段分别表示 白酒 红酒 女装(雾) 男装 运动鞋,就是用户在这些领域上的喜好
这里计算一下用户1和用户2的相似度,将上述两个向量带入余弦值的求解公式中即可,结果等于0.89,接近于1,说明用户1和用户2的相似度还是很高的。

这种就是朴素的基于用户的协同过滤算法思路

13.3 item-based CF

基于商品的协同过滤算法。整个算法的核心就是,有很多人喜欢商品A,同时他们喜欢商品B,因此A和B应该是比较类似的商品。
公式 c o s ( A , B ) = N ( A ∩ B ) N ( A ) ⋅ N ( B ) cos(A,B) = \frac{N(A∩B)}{\sqrt{N(A)·N(B)}} cos(A,B)=N(A)N(B) N(AB)
为了方便可以构造一个临接矩阵存所有商品两两之间的cos值(只是这里的cos值和刚才的定义已经不一样了,但是为了方便我们还是称之为cos)

如何应用这个算法呢?要对一个用户做推荐的时候,先把这个用户的历史购买记录列出来,每件商品都有对应的相似度比较高的商品,选出来之后top排序一下,推荐给用户即可

13.4 优化问题

规模和效率 可以进一步筛选缩小数据规模,减少运算量(指item-base CF
覆盖率 意思就是我们希望生成一个种类比较多的推荐列表,而不是我买了一把乒乓球拍之后,淘宝的猜你喜欢底下,全是各种各样品牌的乒乓球

解决覆盖率问题只要将数据归一化即可。

第十四章 文本挖掘

14.1 文本挖掘的领域

搜索和信息检索,搜索引擎和关键字搜索
文本挖掘,使用聚类,对词汇,片段,段落或者文件进行分组和归类
文本分类,对词汇,片段,段落或者文件进行分类
web挖掘,在互联网上进行数据和文本挖掘,并特别关注网络的规模和相互联系
信息抽取,从非结构化文本中识别与提取有关的事实和关系;从非结构化或者半结构化文本中提取出结构化数据的过程
自然语言处理NLP,将语言作为一种有意义的,有规则的符号系统,在底层解析和理解语言的任务;目前的技术主要从语法和语义的角度发现语言最本质的结构和所表达的意义
概念提取,把单词和短语按照语义分成意义相似的组

14.2 文本分类

(1)分词

由于文本本身是半结构化或者非结构化,没办法直接做向量标记,所以第一步总是分词。SLM(基于统计语言模型)—— NLPIR汉语分词系统——ICTCLAS2013
召回率 检索出的相关文档数和文档库中所有相关文档数的比率,衡量了检索系统的查全率
精度 检索出的相关文档数与检索出的文档综述的比率,衡量了系统的查准率
放一张wiki的图,不止是在文本挖掘,ML中也常用到这两个衡量指标
《白话大数据与机器学习》_第7张图片

(2)文本表示

( w 1 , w 2 , w 3 . . . . . . . w n ) (w_1,w_2,w_3.......w_n) (w1,w2,w3.......wn) 其中w_i是第i个特征项的权重,一般选词作为特征项,权重用词频表示,词频分为相对词频和绝对词频。
词频TF 是一个词语出现的次数除以该文件的总词数。文件频率 I D F IDF IDF,是有多少份文件出现过“汽车”这个词(假设100),然后除以所有的文件(假设1k)。
最后的 T F − I D F TF-IDF TFIDF就等于 l o g 10 1000 / 100 ∗ T F log_{10} 1000/100 * TF log101000/100TF, 其中 l o g 10 1000 / 100 log_{10} 1000/100 log101000/100就是逆文件频率。 TF-IDF分数和词频以及逆向文件频率成正比。

也就是说,如果一个词在一篇文章中出现的频率TF比较高,并且在其他文章很少出现,那这个词汇具有很高的类别区分能力,适合用来分类。TF-IDF越高说明这个词具有更高的类别区分能力。

(3) 分类标记

前面得到的分词和分词权重 要和分类的标签产生一个映射关系,可以基于概率来实现,可以基于向量空间的回归来实现。

14.2.1 Rocchio算法

给每一个文档的类别都做一个标准向量(原型向量),然后用待分类的文档的向量和这个标准向量比一下余弦相似度,相似度越高可能属于该分类。反之则不然。

文章1:(‘坦克,0.05’,‘侵略,0.03’,‘反击,0.01’,‘战争,0.03’,‘爆发,0.01’,‘动员,0.01’,…)
类似这样的向量就是原型向量,这样的维数可以是几万的。
然后计算新文章和老文章(有娱乐,经济,体育,军事类)进行计算余弦相似度,那么结果显而易见应该是归类到了军事中。
Rocchio有一种改进的版本,不仅有正样本,还有负样本,在计算相似度得出推荐结果的时候,还可以加入一种权衡——也尽量选和负样本尽可能不相同的类别。

比较致命的两个缺陷:
1.一个类别的文档仅仅聚集在一个质心的周围,实际文章却往往不是如此
2.训练数据是绝对正确的,没有任何定量衡量样本是否含有噪声的机制,错误的分类数据会影响质心的位置

14.2.2 朴素贝叶斯算法

朴素贝叶斯关注的是文档属于某个类别的概率,文档属于某个类别的概率 等于 文档中每个词属于该类别的概率的综合表达式。而每个词属于该类别的概率又在一定程度上可以用这个词在该类别训练文档中出现的次数来粗略估计。
前两步依然是分词和向量化
朴素贝叶斯公式 P ( D j ∣ x ) = P ( x ∣ D j ) P ( D j ) ∑ i = 1 n P ( x ∣ D i ) P ( D i ) P(D_j|x) = \frac{P(x|D_j)P(D_j)}{\sum_{i=1}^{n}P(x|D_i)P(D_i)} P(Djx)=i=1nP(xDi)P(Di)P(xDj)P(Dj)

x,y,z代表类别比如军事娱乐经济;D表示某个词的词频;但是需要强调的是,后文的 P ( x ∣ D j ) P(x|D_j) P(xDj)是对这个文本所有词一起做计算。

算法的几个步骤如下:
1.训练文章分词化
2.对所有文章类别计算 P ( D j ∣ x ) P(D_j|x) P(Djx), P ( D j ∣ y ) P(D_j|y) P(Djy), P ( D j ∣ z ) P(D_j|z) P(Djz)等等
3.带分类文章分词化
4.使用待分类文章计算词向量中每个词计算 P ( x ∣ D j ) , P ( y ∣ D j ) , P ( z ∣ D j ) P(x|D_j),P(y|D_j),P(z|D_j) P(xDj),P(yDj),P(zDj)
5.计算概率,看属于哪个类别的文章概率比较大

这里解释一下第四部怎么算词向量的似然 P ( D j ∣ x ) = P ( D 1 ∣ x ) P ( D 2 ∣ x ) . . . . . . . . . . P ( D 1 000 ∣ x ) P(D_j|x) = P(D_1|x) P(D_2|x)..........P(D_1000|x) P(Djx)=P(D1x)P(D2x)..........P(D1000x)
完了之后底下这个式子就是我们的终极目标,也就是第五步在干的事情,
P ( x ∣ D j ) = P ( D j ∣ x ) P ( x ) P ( D j ) P(x|D_j) = \frac{P(D_j|x)P(x)}{P(D_j)} P(xDj)=P(Dj)P(Djx)P(x)
P ( D j ) P(D_j) P(Dj)设置为1,对于已经拿到的待分类样本,所有词频发生的概率就已经是1了
P ( x ) P(x) P(x)很好理解,就是训练集中这一类的样本个数,比如军事类的训练集有100,总共有300篇文章,那就是0.333333。

14.2.3 K-近邻算法(KNN)

注意KNN和K-means没有一毛钱关系

插一段wiki关于KNN的解释

在模式识别领域中,最近邻居法(KNN算法,又译K-近邻算法)是一种用于分类和回归的非参数统计方法[1]。在这两种情况下,输入包含特征空间(Feature Space)中的k个最接近的训练样本。

在k-NN分类中,输出是一个分类族群。一个对象的分类是由其邻居的“多数表决”确定的,k个最近邻居(k为正整数,通常较小)中最常见的分类决定了赋予该对象的类别。若k = 1,则该对象的类别直接由最近的一个节点赋予。
在k-NN回归中,输出是该对象的属性值。该值是其k个最近邻居的值的平均值。
最近邻居法采用向量空间模型来分类,概念为相同类别的案例,彼此的相似度高,而可以借由计算与已知类别案例之相似度,来评估未知类别案例可能的分类。

K-NN是一种基于实例的学习,或者是局部近似和将所有计算推迟到分类之后的惰性学习。k-近邻算法是所有的机器学习算法中最简单的之一。

无论是分类还是回归,衡量邻居的权重都非常有用,使较近邻居的权重比较远邻居的权重大。例如,一种常见的加权方案是给每个邻居权重赋值为1/ d,其中d是到邻居的距离。

邻居都取自一组已经正确分类(在回归的情况下,指属性值正确)的对象。虽然没要求明确的训练步骤,但这也可以当作是此算法的一个训练样本集。

k-近邻算法的缺点是对数据的局部结构非常敏感。本算法与K-平均算法(另一流行的机器学习技术)没有任何关系,请勿与之混淆。

其中最核心的一句话就是
在k-NN分类中,输出是一个分类族群。一个对象的分类是由其邻居的“多数表决”确定的,k个最近邻居(k为正整数,通常较小)中最常见的分类决定了赋予该对象的类别。若k = 1,则该对象的类别直接由最近的一个节点赋予。
在k-NN回归中,输出是该对象的属性值。该值是其k个最近邻居的值的平均值。
它的缺点也是十分致命的,效率极其低,需要把带分类样本和训练数据全部做一次对比,然后top一下相似度最高的,而且这种算法没有所谓的训练过程,有了数据即可进行分类。

14.2.4 支持向量机的SVM算法

还记得我们的
g ( v ) = w v + b g(v) = wv + b g(v)=wv+b
只不过此时由于是整个文本,所以v的维数为非常多。

总体来说SVM分类器的文本分类效果最好,可以认为是最好的分类器之一,它有很多优点,通用性比较好,分类精度高,分类速度快,分类速度和训练样本个数无关;查准率和查全率都好过KNN以及朴素贝叶斯方法。

训练速度很大程度受到训练集规模的影响(因为v的维数多),计算开销比较大,针对SVM,有很多改进方法,chunking,Osuna,SMO,交互SVM等等。

径向基核函数 和 线性核函数 比较常用的两个核。文章分类一般使用线性核函数,这种函数的计算效率极高,对文章的分类的准确性也非常高。

第十五章 人工神经网络(^)

神经网络有以下几个非常优秀的特点:
1.大规模并行分布式结构
2.神经网络的学习能力以及由此而来的泛化能力

单个细胞人工神经网络一般用来处理手写识别、垃圾邮件分类、金融欺诈行为,网络注册用户是否真实等等。

神经网络和SVM的思路的不同之处在于,在线性不可分的时候,SVM会映射到高维空间去划分超平面,而神经网络是增加输入的变量、网络层次、输出层。

常见的神经网络

感知机网络 单细胞的神经网络就是感知机最简单的形式
BP神经网络,按误差逆传播的多层前馈网络(Back Propagation)
自组织特征映射神经网络,SOM
Hopfield网络
玻尔兹曼机网络
卷积神经网络 CNN

这里重点介绍几种比较重要的

BP神经网络

误差逆传播算法训练的多层前馈网络,构建的思路比较简单。

《白话大数据与机器学习》_第8张图片
如图所示是两层的,只有隐含层和输出层是参与计算和权值调整的节点层。

结构和原理

激活函数logistic函数 f ( v ) = 1 1 + e − ( w T v + b ) f(v) = \frac{1}{1+e^{-(w^T v+b)}} f(v)=1+e(wTv+b)1
实际上是两个函数 f ( t ) = 1 1 + e − t f(t) = \frac{1}{1+e^{-t}} f(t)=1+et1和函数 t = w T v + b t = w^T v + b t=wTv+b的复合函数。
其中外层函数 也可以写成 f ( t ) = 1 1 + e − m t f(t) = \frac{1}{1+e^{-mt}} f(t)=1+emt1
其中m是可以调整的参数,m越大越陡。分类边界就更加果断。

《白话大数据与机器学习》_第9张图片

训练过程

训练其实就是为了得到每个树突上的权值,分为三个部分:
(1)误差计算
(2)反向传播
(3)权值修正
这部分推导公式比较多,有空再补上,埋个坑,本质就是求出一个关于误差的函数,然后求这个函数的极值,求极值用到的方法是步长试探方法,也就是梯度下降方法。

玻尔兹曼机(*)

卷积神经网络

一般来说,卷积神经网络包括两层
第一层是特征提取层,每个神经网络的输入和前一层的局部接受域相连,并提取该局部特征。
第二层为特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核销的sigmoid函数作为卷积神经网络的激活函数,使得特征映射具有位移不变性。

权值共享降低网络的复杂性
由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这个特色也是卷积神经网络独有的。两次特征提取结构减小了特征分辨率,关于CNN的详细计算过程参考吴恩达的慕课视频。

卷积
基于卷积的图像识别
1.设计卷积层
2.设计采样层(池化层)

你可能感兴趣的:(笔记,机器学习,数据挖掘,神经网络)