一.线性回归与非线性回归
1、一元线性回归,可用梯度下降法迭代求解空间 (梯度下降法比较万能!)
2、多元线性回归,可用梯度下降法迭代求解空间
3、利用线性回归的标准方程求解空间。在代价函数中对各个特征参数求偏导,再等于0,可求解全局最优解。这种方法相当于求解析解一样,直接把最优参数求出来。但有一个缺点,当特征数大于样本数(n列>m行)时,或者特征之间有很多存在线性关系时,导致样本矩阵不满秩,因此不存在逆矩阵,因此无法求出解空间。
4、多项式回归,eg:, 里面没有xy这样的交叉项。多元是在增加维度,就像平面到空间这样。多项式是在增加同一维度的复杂度,就像直线到曲线(直线-----二元一次-----三元一次.......)
5、岭回归,为解决标准方程可能不满秩的问题,引入岭回归,就是在代价函数里面加入L2正则项,最终一定满秩。但个人认为,最终求出来的最优解应该是存在偏差的。
6、LASSO回归, 就是在代价函数里面加入L1正则项
7、弹性网ElasticNet回归,将L1和L2正则项进行融合
8、线性回归相当于拟合一条直线、平面、超平面....
二.逻辑回归
1、逻辑回归主要用于分类,利用sigmoid函数将结果压缩到到0-1之间,以0.5作为分界点来区分类别,代价函数变了,变成“交叉熵”
2、线性逻辑回归和线性回归十分相似,由于sigmoid和交叉熵的区别,导致一个是分类,一个是拟合
3、非线性逻辑回归和多项式回归相似, 但里面有xy这样的交叉项,因此可以在一个平面里面得到一个圆圈曲线,来区分圆内和圆外的类别
三.KNN最近邻算法
1、依然是用来分类的
2、计算未知实例与所有已知实例的距离(欧氏距离),选择K个最近的已知实例,K各种类别数最多的那一类,将是未知实例的类别。
3、缺点:①算法复杂度较高,不过现在计算机的处理速度很快,如果不是特别大的数量(十万、百万.....),计算起来还吃得消;②当样本不平衡时,未知实例容易分到样本量过大的一方
四.决策树
1、比较适合分析离散数据,如果数据是连续的,可将连续的变成离散的,eg:对于年龄,大于30的为一类,小于30的为另一类;
2、有三种算法,ID3、C4.5、CART,CART用的比较多;
3、信息熵公式:,信息熵越小,不确定性越小,反之亦然;
4、ID3算法是根据信息增益来划分结点,信息增益最大的为根节点;信息增益怎么求勒?(不好描述,暂时不写)
5、连续型数据变离散数据的方法,求出连续数据中每相邻两个数据间的平均值,根据每一个平均值可将数据分为两类,有几个平均值就有几种划分方法,再求每个划分方法的信息增益,最大的那个将是最好的划分方法;
6、ID3算法缺陷:更倾向于分支比较多的作为节点;
7、C4.5算法,在信息增益的基础上除以了一个增益率,作为新的信息增益;
8、CART算法中的基尼(Gini)系数:,
9、基尼(Gini)系数增益:, 增益最大的作为根节点;
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)与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
包含“办证”这个词的邮件属于垃圾邮件的概率为5/7
2、当特征很多之后,所有特征需要计算次,n是特征数,计算量太大;
假设:特征X1,X2,X3……之间都是相互独立的
那么
这就变成了“朴素贝叶斯”,虽然实际应用中这个假设优点牵强,但影响不大,因此应用很广
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算法流程
①数据预处理:中心化
②求样本的协方差矩阵
③对协方差矩阵做特征值分解
④选出最大的k个特征值对应的k个特征向量
⑤将原始数据投影到选取的特征向量上
⑥输出投影后的数据集
方差描述一个数据的离散程度:
协方差描述两个数据的相关性,接近1就是正相关,接近-1就是负相关,接近0就是不相关:
6、协方差只能处理二维问题,那维数多了自然需要计算多个协方差,我们可以使用矩阵来组织这些数据。协方差矩阵是一个对称的矩阵,而且对角线是各个维度的方差。
二维例子:
三维例子:
九.支持向量机SVM
1、为什么用 和 来代表支持向量;重点是为什么是1和-1,为什么不是其他数,难道只是为了计算方便吗,在真实求 时不起作用?
2、求解 最大值,相当于求解
3、,则分类为y=1;,则分类为y=-1; 合并他们
4、凸优化问题
①无约束优化问题(费马定理):
②带等式约束的优化问题(拉格朗日乘子法):
③带不等式约束的优化问题(KKT条件):
5、