机器学习的思想路线

一.线性回归与非线性回归

1、一元线性回归,可用梯度下降法迭代求解空间 (梯度下降法比较万能!)

2、多元线性回归,可用梯度下降法迭代求解空间

3、利用线性回归的标准方程求解空间。在代价函数中对各个特征参数求偏导,再等于0,可求解全局最优解。这种方法相当于求解析解一样,直接把最优参数求出来。但有一个缺点,当特征数大于样本数(n列>m行)时,或者特征之间有很多存在线性关系时,导致样本矩阵不满秩,因此不存在逆矩阵,因此无法求出解空间。

4、多项式回归,eg:x, y , z, x^{2}, y^{2}, z^{2}, x^{3}...,  里面没有xy这样的交叉项。多元是在增加维度,就像平面到空间这样。多项式是在增加同一维度的复杂度,就像直线到曲线(直线-----二元一次-----三元一次.......)

5、岭回归,为解决标准方程可能不满秩的问题,引入岭回归,就是在代价函数里面加入L2正则项,最终一定满秩。但个人认为,最终求出来的最优解应该是存在偏差的。

6、LASSO回归, 就是在代价函数里面加入L1正则项

7、弹性网ElasticNet回归,将L1和L2正则项进行融合

8、线性回归相当于拟合一条直线、平面、超平面....

二.逻辑回归

1、逻辑回归主要用于分类,利用sigmoid函数将结果压缩到到0-1之间,以0.5作为分界点来区分类别,代价函数变了,变成“交叉熵”

2、线性逻辑回归和线性回归十分相似,由于sigmoid和交叉熵的区别,导致一个是分类,一个是拟合

3、非线性逻辑回归和多项式回归相似, 但里面有xy这样的交叉项,因此可以在一个平面里面得到一个圆圈曲线,来区分圆内和圆外的类别

三.KNN最近邻算法

1、依然是用来分类的

2、计算未知实例与所有已知实例的距离(欧氏距离d = \sqrt{(x-x_{1})^{2} + (y-y_{1})^{2} }),选择K个最近的已知实例,K各种类别数最多的那一类,将是未知实例的类别。

3、缺点:①算法复杂度较高,不过现在计算机的处理速度很快,如果不是特别大的数量(十万、百万.....),计算起来还吃得消;②当样本不平衡时,未知实例容易分到样本量过大的一方

四.决策树

1、比较适合分析离散数据,如果数据是连续的,可将连续的变成离散的,eg:对于年龄,大于30的为一类,小于30的为另一类;

2、有三种算法,ID3、C4.5、CART,CART用的比较多;

3、信息熵公式:H[x] = -\sum_{x}^{}p(x)log_{2}p(x),信息熵越小,不确定性越小,反之亦然;

4、ID3算法是根据信息增益来划分结点,信息增益最大的为根节点;信息增益怎么求勒?(不好描述,暂时不写)

5、连续型数据变离散数据的方法,求出连续数据中每相邻两个数据间的平均值,根据每一个平均值可将数据分为两类,有几个平均值就有几种划分方法,再求每个划分方法的信息增益,最大的那个将是最好的划分方法;

6、ID3算法缺陷:更倾向于分支比较多的作为节点;

7、C4.5算法,在信息增益的基础上除以了一个增益率,作为新的信息增益;

8、CART算法中的基尼(Gini)系数:Gini(D) = 1 - \sum_{i =1}^{m}p_{i}^{2},     Gini_{A}(D) = \frac{\left | D_{1} \right |}{\left | D \right |}Gini(D_{1}) + \frac{\left | D_{2} \right |}{\left | D \right |}Gini(D_{2})

9、基尼(Gini)系数增益:\Delta Gini(A) = Gini(D) - Gini_{A}(D), 增益最大的作为根节点;

10、剪枝: ①预剪枝:做决策树之前就去掉一些认为不重要的特征; ②后剪枝:做完决策树后,当分支特别细,但绝大多数只归为一类时,可以合并这整个分支为这一类。作用:降低复杂度,避免过拟合。

11、决策树优点:小规模数据集比较有效;  缺点:处理连续变量不友好,类别较多时错误率增加较快,不能处理大量数据;

12、决策树支持线性二分类和非线性二分类, 在 Sklearn中,决策树的参数:

# max_depth,树的深度

# min_samples_split 内部节点再划分所需最小样本数

通过这两个参数可以达到剪枝的效果

五.集成学习

1、bagging算法,在原始数据集中进行S次有放回的抽样,构成S个新样本。新样本中很大概率有重复的样本,当然也会有没被抽到的样本。再利用S个数据集分别用不同的算法(神经网络、决策树等)构成S个模型,在预测时,S个模型得到的结果投票。

2、随机森林算法流程:

        ①样本的随机:从样本集中使用bagging的方法随机选择n个样本;

        ②特征的随机:从所有属性d中随机选择k个属性(k<d),然后从k个属性中选择最佳分割属性作为节点建立CART决策树;

        ③重复以上两个步骤m次,建立m棵CART决策树;

        ④这m棵CART决策树形成随机森林,通过投票决定数据属于哪一类;

3、Adaboost算法流程:

        ①首先,是初始化训练数据的权值分布D1。假设有N个训练样本数据,则每一个训练样本最开始时,都被赋予相同的权值:w1=1/N。

        ②然后,训练弱分类器hi。具体训练过程中是:如果某个训练样本点,被弱分类器hi准确地分类,那么在构造下一个训练集中,它对应的权值要减小;相反,如果某个训练样本点被错误分类,那么它的权值就应该增大。权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。

        ③最后,将各个训练得到的弱分类器组合成一个强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。

自己的看法(可能有误):Adaboost和随机森林都不是在玩算法本身,而是在玩数据,通过对原始数据进行切分、取样,构成多个新数据,再用已知算法拟合,将结果进行投票或者加权,从而形成一种“伪算法”。问题:随机森林的基本模型都是用决策树,Adaboost的基础模型可以是任意的嘛,或者多种任意基础算法的组合?

4、Stacking算法:使用多个不同的分类器(基础算法可以不同)对训练集进预测,把预测得到的结果作为一个次级分类器的输入。次级分类器的输出是整个模型的预测结果。

六.贝叶斯算法

1、已知P(X|H),求P(H|X), P(H|X) = \frac{P(X|H)P(H)}{P(X)},P(H)与P(X)都是先验概率,可以通过抽样计算先验概率,抽样数量越大,结果越接近真实值----大数定理

举例说明:

        P(H)垃圾邮件的先验概率;

        P(X)特定特征的先验概率;

        P(X|H)在垃圾邮件中,包含特定特征(比如“办证”)邮件的概率;

        P(H|X)包含特定特征(比如“办证”)的邮件属于垃圾邮件的概率;

邮件:总体100,正常70,垃圾30。 “办证”在正常邮件中出现10次,在垃圾邮件中出现25次

假设X为“办证”,H为垃圾邮件
P(X|H) = 25/30 = 5/6
P(H) = 30/100 = 3/10
P(X) = 35/100 = 7/20

P(H|X) = \frac{P(X|H)P(H)}{P(X)} = \frac{\frac{5}{6}*\frac{3}{10}}{\frac{7}{20}} = \frac{5}{7}

包含“办证”这个词的邮件属于垃圾邮件的概率为5/7

2、当特征很多之后,所有特征需要计算2^{n-1}次,n是特征数,计算量太大;

假设:特征X1,X2,X3……之间都是相互独立的

那么P(H|X) = \frac{P(X|H)P(H)}{P(X)} = \frac{P(X_{1}|H)P(X_{2}|H)...P(X_{n}|H)P(H)}{P(X_{1})P(X_{2})...P(X_{n})}

这就变成了“朴素贝叶斯”,虽然实际应用中这个假设优点牵强,但影响不大,因此应用很广

3、  多项式模型:重复出现的词(特征),视为出现多次;

        伯努利模型:重复出现的词(特征),视为出现一次;

        混合模型:训练时考虑重复的词,预测时不考虑重复词;

        高斯模型:可以处理连续型的变量,使得表达方式更加细腻;

4、词袋模型(Bag of Words)

        将所有可能出现的词构成一个巨大的字典,每一篇文章都可以根据这个字典来形成一个N(N表示字典中元素个数)维的向量来表示; 这样就可以形成一个统一格式,方便训练;

例如:

基于文本的BoW模型的一个简单例子如下:
首先给出两个简单的文本文档如下:
John likes to watch movies. Mary likes too.
John also likes to watch football games.
基于上述两个文档中出现的单词,构建如下一个词典(dictionary):
{"John": 1, "likes": 2,"to": 3, "watch": 4, "movies": 5,"also": 6,"football": 7, "games": 8,"Mary": 9, "too": 10}
上面的词典中包含10个单词, 每个单词有唯一的索引, 那么每个文本我们可以使用一个10维的向量来表示。如下:
[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
[1, 1,1, 1, 0, 1, 1, 1, 0, 0]
该向量与原来文本中单词出现的顺序没有关系,而是词典中每个单词在文本中出现的频率。

5、TF-IDF算法

        相当于利用统计的方法给字典中的词取了一个权重(没有深入研究,大概是这么个意思

七.聚类算法

1、K-means算法:算法接受参数k ;然后将事先输入的n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小;

2、K-means思想:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果;

3、K-means流程:

        ①先从没有标签的元素集合A中随机取k个元素,作为k个子集各自的重心。

        ②分别计算剩下的元素到k个子集重心的距离(这里的距离也可以使用欧氏距离),根据距离将这些元素分别划归到最近的子集;

        ③根据聚类结果,重新计算重心(重心的计算方法是计算子集中所有元素各个维度的算数平均数);

        ④将集合A中全部元素按照新的重心然后再重新聚类;

        ⑤重复第4步,直到聚类结果不再发生变化;

4、Mini Batch K-Means:此算法是K-Means算法的变种,采用小批量的数据子集减小计算时间。这里所谓的小批量是指每次训练算法时所随机抽取的数据子集,采用这些随机产生的子集进行训练算法,大大减小了计算时间,结果一般只略差于标准算法。该算法的迭代步骤有两步:

        ①从数据集中随机抽取一些数据形成小批量,把他们分配给最近的质心;

        ②更新质心,与K均值算法相比,数据的更新是在每一个小的样本集上。Mini Batch K-Means比K-Means有更快的收敛速度,但同时也降低了聚类的效果,但是在实际项目中却表现得不明显。

5、K-means算法的局限性:

        ①对k个初始质心的选择比较敏感,容易陷入局部最小值;

        {解决方法:使用多次的随机初始化,计算每一次建模得到的代价函数的值,选取代价函数最小结果作为聚类结果。代价函数:求每个样本到对应质心的模,累加后求平均值。sklearn封装的K-means算法自带这个步骤}

        ②k值的选择是用户指定的,不同的k得到的结果会有挺大的不同;

        {解决方法:1.逐步试K值,使用肘部法选择K值;2.肘部法不适用时,可根据实际情况分析选择K值}

        ③存在局限性,遇到下面这种非球状的数据分布就搞不定了;(根据欧式距离计算)

         ④数据集比较大的时候,收敛比较慢;(可用Mini Batch K-Means的方法解决)

6、一个K-means可视化网站:(可以自己加质心,看每一步的变化情况)

Visualizing K-Means Clustering

https://www.naftaliharris.com/blog/visualizing-k-means-clustering/

7、基于密度的聚类方法:DBSCAN  (DBSCAN = Density-Based Spatial Clustering of Applications with Noise)本算法将具有足够高密度的区域划分为簇,并可以发现任何形状的聚类;可用于解决K-means的局限性③;

𝛆邻域:给定对象半径𝜀内的区域称为该对象的𝜀邻域;
核心对象:如果给定𝜀 邻域内的样本点数大于等于Minpoints,则该对象为核心对象;
直接密度可达:给定一个对象集合D,如果p在q的𝜀邻域内,且q是一个核心对象,则我们说对象p从q触发是直接密度可达的(directly density-reachable);
密度可达:集合D,存在一个对象链p1,p2…pn,p1=q,pn=p,pi+1是从pi关于𝜀和Minpoints直接密度可达,则称点p是从q关于𝜀和Minpoints密度可达的;
密度相连:集合D存在点o,使得点p、q是从o关于𝜀和Minpoints密度可达的,那么点p、q是关于𝜀和Minpoints密度相连的;

算法流程:

①指定合适的𝜀和Minpoints;

②计算所有的样本点,如果点p的𝜀邻域里有超过Minpoints个点,则创建一个以p为核心点的新族;

③反复寻找这些核心点直接密度可达(之后可能是密度可达)的点,将其加入到相应的簇,对于核心点发生“密度相连”状况的簇,给予合并;

④ 当没有新的点可以被添加到任何簇时,算法结束;

 缺点:

①当数据量增大时,要求较大的内存支持I/O消耗也很大;

②当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差;

DBSCAN和K-MEANS比较:
• DBSCAN不需要输入聚类个数
• 聚类簇的形状没有要求
• 可以在需要时输入过滤噪声的参数

8、一个DBSCAN可视化网站:

Visualizing DBSCAN Clustering

https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/

八.主成分分析

1、PCA(Principal Component Analysis),一种降维算法;

2、降维思想:找到数据最重要的方向(方差最大的方向);

3、降维方法:第一个主成分就是从数据差异性最大(方差最大)的方向提取出来的,第二个主成分则来自于数据差异性次大的方向,并且要与第一个主成分方向正交;以此类推

4、算距离时,与线性回归类似,但不同;eg:线性回归算同一个x对应的两个y的距离;PCA算点到直线(超平面)的投影距离

5、PCA算法流程

        ①数据预处理:中心化X-\overline{X}

        ②求样本的协方差矩阵\frac{1}{m}XX^{T}

        ③对协方差\frac{1}{m}XX^{T}矩阵做特征值分解

        ④选出最大的k个特征值对应的k个特征向量

        ⑤将原始数据投影到选取的特征向量上

        ⑥输出投影后的数据集

方差描述一个数据的离散程度:

var(X)=\frac{\sum_{i=1}^{n}(X_{i}-\overline{X})(X_{i}-\overline{X})}{n-1}

协方差描述两个数据的相关性,接近1就是正相关,接近-1就是负相关,接近0就是不相关:

con(X,Y)=\frac{\sum_{i=1}^{n}(X_{i}-\overline{X})(Y_{i}-\overline{Y})}{n-1}

6、协方差只能处理二维问题,那维数多了自然需要计算多个协方差,我们可以使用矩阵来组织这些数据。协方差矩阵是一个对称的矩阵,而且对角线是各个维度的方差。

二维例子: C = \bigl(\begin{smallmatrix} conv(x,x) &conv(x,y) \\ conv(y,x) & conv(y,y) \end{smallmatrix}\bigr) = \bigl(\begin{smallmatrix} \frac{1}{m}\sum_{i}^{m}x_{i}^{2} &\frac{1}{m}\sum_{i}^{m}x_{i}y_{i} \\ \frac{1}{m}\sum_{i}^{m}y_{i}x_{i}& \frac{1}{m}\sum_{i}^{m}y_{i}^{2} \end{smallmatrix}\bigr)

三维例子:C = \bigl(\begin{smallmatrix} conv(x,x) &conv(x,y) &conv(x,x) \\ conv(y,x) & conv(y,y) &conv(y,z) \\conv(z,x) &conv(z,y) &conv(z,z) \end{smallmatrix}\bigr)

九.支持向量机SVM

1、为什么用w*x_{1} + b = 1  和  w*x_{2} + b = -1 来代表支持向量;重点是为什么是1和-1,为什么不是其他数,难道只是为了计算方便吗,在真实求d = \frac{2}{\left \| w \right \|} 时不起作用?

2、求解d = \frac{2}{\left \| w \right \|}  最大值,相当于求解min\frac{\left \| w \right \|^{2}}{2}

3、w*x + b \geqslant 1,则分类为y=1;w*x + b \leqslant -1,则分类为y=-1;   合并他们y(w*x+b)\geqslant 1

4、凸优化问题

        ①无约束优化问题(费马定理): minf(x)

        ②带等式约束的优化问题(拉格朗日乘子法):L(x,\lambda ) = f(x) + \sum_{i=1}^{n}\lambda _{i}h_{i}(x); \left \{ h_{i}(x) = 0\right \}

        ③带不等式约束的优化问题(KKT条件): L(x,\lambda ,v) = f(x) + \sum_{i=1}^{n}\lambda _{i}g_{i}(x) + \sum_{i=1}^{n}v _{i}h_{i}(x); \left \{ h_{i}(x) = 0,g_{i}(x)\leqslant 0\right \}

5、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫呱呱

如果这篇博文对你有用,求打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值