Kmeans中心思想:事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。
优点:
1、算法原理简单、处理速度较快
2、当聚类是密集的,且类与类之间区别明显时,效果较好
缺点:
1、在K-means算法中,K是事先给定的,比较难确定
2、对孤立点比较敏感,噪声敏感(中心点易偏移)
3、结果不稳定,初始值的选定对结果有一些影响,结果不一定全局最优,只能保证局部最优(与k的个数及初选值有关)
4、空间复杂度o(N),时间复杂度o(IKN #N-样本点个数;K-中心点个数;I-迭代次数)。
优化算法:
K-means++
二分K-means
ISODATA
Kernel K-means
mini bath K-Means
K均值算法的调优一般可以从以下几个角度出发。
(1) 数据归一化和离群点处理。
K均值聚类本质上是一种基于欧氏距离度量的数据划分方法,均值和方差大的维度将对数据的聚类结果产生决定性的影响,所以未做归一化处理和统一单位的数据是无法直接参与运算和比较的。同时,离群点或者少量噪声数据就会对均值产生较大的影响,导致中心偏移,因此使用K均值聚类算法之前通常需要对数据做预处理。
(2)合理选择K值。
K值的选择是K均值聚类最大的问题之一,这也是K均值聚类算法的主要缺点。K值的选择一般基于经验或者多次实验结果。例如手肘法,就是尝试不同的K值,并将不同K值所对应的损失函数画成折线,横轴为K的取值,纵轴为误差平方和定义的损失函数。手肘法认为拐点就是K的最优值。
手肘法是一个经验方法,缺点是不能够自动化,因此研究员又提出来更先进的方法,其中包括比较有名的Gap Statistics方法,Gap Statistics方法的优点是不需要肉眼判断,只需要找到最大的Gap Statistics所对应的K即可,因此该方法也适用于批量优化作业。
(3)采用核函数。
采用核函数是另一种可以尝试的改进方向。传统的欧氏距离度量方式,使得K均值算法本质上假设了各个数据簇的数据具有一样的先验嫌疑,并呈现球形或者高维球形分布,这种分布在实际生活中并不常见。面对非凸的数据分布数据时,可能需要引入核函数来优化,这时算法又是通过一个非线性映射,将输入空间中的数据点映射到高位的特征空间中,并在新的特征空间中进行聚类。非线性映射增加了数据点线性可分的概率,从而在经典的聚类算法失效的情况下,通过引入核函数可以达到更为准确的聚类结果。
应用场景:
1、用户画像、广告推荐 / Data Segmentation / 搜索引擎的流量推荐 / 恶意流量识别
2、基于位置信息的商业推送 / 新闻聚类 / 筛选排序
3、图像分割,降维,识别 / 离群点检测,信用卡异常消费 / 发掘相同功能的基因片段
算法详细链接:https://blog.csdn.net/sinat_30353259/article/details/80887779
Apriori算法:算法是一种挖掘关联规则的算法,用于挖掘其内含的、未知的却又实际存在的数据关系,其核心是基于两阶段频集思想的递推算法
优点:
1、使用先验性质,大大提高了频繁项集逐层产生的效率
2、简单易理解,数据集要求低
缺点:
1、计算量很大,当商品数据量大时更显著,基本是不可计算的
2、在验证候选频繁K项集的时候,需要对整个数据库进行扫描,非常耗时
3、商品并不是全部平等销售的, 仅使用支持度衡量,容易导致出现假性关联
应用:
1、交叉销售
2、捆绑销售
3、买了还买、看了还看、买了还同时买……
4、基于兴趣的实时新闻推荐
算法链接:https://blog.csdn.net/sinat_30353259/article/details/80950824
FP(FP-growth)关联算法:将数据存储在一种称为FP树的紧凑数据结构中。FP代表频繁模式(Frequent Pattern)。一棵FP树看上去与计算机科学中的其他树结构类似,但是它通过链接(link)来连接相似元素,被连起来的元素项可以看成一个链表。
支持度:指某频繁项集在整个数据集中的比例。假设数据集有 10 条记录,包含{‘鸡蛋’, ‘面包’}的有 5 条记录,那么{‘鸡蛋’, ‘面包’}的支持度就是 5/10 = 0.5。
置信度:是针对某个关联规则定义的。有关联规则如{‘鸡蛋’, ‘面包’} -> {‘牛奶’},它的置信度计算公式为{‘鸡蛋’, ‘面包’, ‘牛奶’}的支持度/{‘鸡蛋’, ‘面包’}的支持度。假设{‘鸡蛋’, ‘面包’, ‘牛奶’}的支持度为 0.45,{‘鸡蛋’, ‘面包’}的支持度为 0.5,则{‘鸡蛋’, ‘面包’} -> {‘牛奶’}的置信度为 0.45 / 0.5 = 0.9。
停止条件:支持度或者置信度小于某个阈值
https://www.cnblogs.com/zlslch/p/6789179.html
决策树是一个基本的分类回归算法
决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果,本质是一颗由多个判断节点组成的树。
经典决策树算法:
ID3:只能对离散型属性的数据集构造决策树,信息增益作为节点特征选择
C4.5:ID3的扩展、可以处理连续型变量、可以处理缺失值、剪枝,信息增益比作为节点特征选择
CART:可以处理离散型或连续型变量、并可以分类/回归,使用gini系数作为节点特征选择
优点:
1、生成的决策树结果很直观
2、基本不需要预处理,不需要提前归一化,处理缺失值
3、既可以处理离散值也可以处理连续值
4、可以很容易处理分类问题
5、相比于神经网络之类的黑盒分类模型,决策树的可解释性很好
6、可以用交叉验证的剪枝来选择模型,从而提高泛化能力
7、对于异常值的容错能力号,健壮性高
缺点:
1、决策树算法容易过拟合
2、决策树会因为样本发生一点点的改动而导致结果变化
3、寻找最优的决策树是一个NP难的问题,容易陷入局部最优
4、有些复杂的关系,决策树很难学习到,例如异或关系
5、没有在线学习
适用情景:
因为它能够生成清晰的基于特征(feature)选择不同预测结果的树状结构,数据分析师希望更好的理解手上的数据的时候往往可以使用决策树。
同时它也是相对容易被攻击的分类器[3]。这里的攻击是指人为的改变一些特征,使得分类器判断错误。常见于垃圾邮件躲避检测中。因为决策树最终在底层判断是基于单个条件的,攻击者往往只需要改变很少的特征就可以逃过监测。
应用场景:
1、熵的例子:论坛流失性跟性别还是和活跃度有关
2、基尼的列子:拖欠贷款和是否有房、婚姻状况、收入的关联性
3、贷款风险评估
4、保险推广预测
优化算法:
C4.5 预剪枝和后剪枝
CART 预剪枝和后剪枝
算法链接:https://blog.csdn.net/sinat_30353259/article/details/80917362
SVM:寻找到一个超平面使样本分成两类,并且间隔最大。
SVM分为:
线性可分支持向量机、线性近似可分支持向量机、非线性支持向量机
优点:
1、解决小样本下机器学习问题。
2、解决非线性问题。
3、无局部极小值问题。(相对于神经网络等算法)
4、可以很好的处理高维数据集。
5、泛化能力比较强。
缺点:
1、对于核函数的高维映射解释力不强,尤其是径向基函数。
2、对缺失数据敏感。
3、大规模数据计算复杂度大
应用场景:
机器视觉:
1、行人检测及目标识别
2、病理诊断
数据挖掘:
1、基因序列检测
2、生物蛋白质检测
自然语言处理: 文本分类
算法链接:https://blog.csdn.net/sinat_30353259/article/details/80991273
K近邻法实际上利用训练集对特征向量空间进行划分,并作为其分类模型(分类回归)
三个基本要素:K值的选择(交叉验证),距离度量(欧氏距离),分类决策函数(多数表决)
实现方法:kd树
具体方法:给定一个训练集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类。
流程:
1) 计算已知类别数据集中的点与当前点之间的距离
2) 按距离递增次序排序
3) 选取与当前点距离最小的k个点
4) 统计前k个点所在的类别出现的频率
5) 返回前k个点出现频率最高的类别作为当前点的预测分类
k近邻既可以分类又可以回归
k近邻算法的实现:kd树
kd树:是二叉树,是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构
构造方法:通常依次选择坐标轴对空间切分,选择训练实例点在选定坐标轴上的中位数为切分点,这样得到的kd树是平衡的,但未必是最优的
优点:
1、思想简单、易于理解,易于实现
2、无需估计参数,无须训练
3、算法复杂度低
4、适合类域交叉样本
5、适用大样本自动分类
缺点:
1、惰性学习
2、类别分类不标准化
3、输出可解释性不强
4、不均衡性
5、进行分类时计算量大(要扫描全部训练样本计算距离)
应用场景:
1、约会网站的匹配
2、手写数字识别
优化算法: KD树
算法链接:https://blog.csdn.net/sinat_30353259/article/details/80901746
朴素贝叶斯是基于概率论的分类算法,属于生成模型
朴素贝叶斯的基本方法::通过已知样本求得先验概率P(Y)和条件概率P(X|Y),对于给定的实例,计算联合概率,进而求出后验概率。
也就是说,它尝试去找到底这个数据是怎么生成的(产生的),然后再进行分类。哪个类别最有可能产生这个信号,就属于那个类别。
基于贝叶斯定理与特征条件独立假设分类方法(多分类)
生成方法:由训练数据集学习联合概率分布P(X,Y),然后求得后验概率分布P(Y|X)
具体方法:利用训练数据学习P(X|Y)和P(Y)的估计,得到联合概率分布 P(X,Y) = P(Y)P(X|Y)
优点:
1, 算法逻辑简单,易于实现( 算法思路很简单, 只要使用贝叶斯公式转化即可! )
2, 分类过程中时空开销小( 假设特征相互独立, 只会涉及到二维存储)
3,适用于数据集少的情景
缺点:
理论上, 朴素贝叶斯模型与其他分类方法相比具有最小的误差率。 但是实际上并非总是如此, 这是因为朴素贝叶斯模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时, 分类效果不好。
应用场景:
病人分类
社区账号分类
性别分类
算法链接:https://blog.csdn.net/sinat_30353259/article/details/80932111
逻辑回归(LR):逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。
是由输入的线性函数表示的输出的对数几率模型
学习策略:极大似然估计或正则化极大似然估计
学习算法:梯度下降,拟牛顿法
逻辑回归为什么要用sigmoid?:
逻辑回归模型之所以是sigmoid 的形式,源于我们假设y服从伯努利分布,伯努利分布又属于指数分布族,经过推导,将伯努利分布变成指数分布族的形式后。我们发现伯努利分布的唯一参数Φ与指数分布族中的参数η具有sigmoid函数关系,于是我们转而求η与x的关系,此时,我们又假设η与x具有线性关系。至此,找到了我们要用的模型的样子,也就是逻辑回归。
链接:https://www.jianshu.com/p/a8d6b40da0cf
优点:
缺点:
应用领域:
1、预测是否发生、发生的概率(流失、客户响应等预测)
2、影响因素、危险因素分析(找出影响结果的主要因素)
3、判别、分类
算法链接:https://blog.csdn.net/sinat_30353259/article/details/81138453
回归分析是在一系列的已知或能通过获取的自变量与因变量之间的相关关系的基础上,建立变量之间的回归方程,把回归方程作为算法模型,通过其来实现对新自变量得出因变量的关系。因此回归分析是实用的预测模型或分类模型。
回归的目的是预测数值型的目标值。最直接的办法是依据输入写出一个目标值的计算公式,该公式就是所谓的回归方程(regression equation)。求回归方程中的回归系数的过程就是回归。
线性回归的几个特点:
如果一个回归,它的自变量指数超过1,则称为多项式回归
多项式回归的特点:
Bagging(Bootstrapped Aggregation的简称)对于给定数据处理任务,采用不同的模型、参数、特征训练出多个模型,最后采用投票或者加权平均的方式输出最终结果。
Bagging算法实现随机森林(有放回抽样),是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。
随机森林的生成方法:
1.从样本集中通过重采样的方式随机选择n个样本
2.假设样本中的特征数量为a,再从这些特征中,随机选择k个特征,用建立决策树的方式选择最佳分割点,构建决策树树
3.重复m次,产生m棵决策树
4.多数投票机制来进行预测
优点:
缺点:
随机森林应用场景:应用于各项AI大赛。
数据维度相对低(几十维),同时对准确性有较高要求时。
因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。
算法链接:https://blog.csdn.net/sinat_30353259/article/details/81034749
随机森林:
https://blog.csdn.net/sinat_30353259/article/details/81409980
训练基分类器时采用串行方式,各个基分类器之间有依赖。它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的加权得到最终结果。
boosting能够提升弱分类器性能的原因是降低了偏差
算法实现:adaboost
具体做法:
一、针对训练集修改权值,提高被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。
二、弱分类器的组合,采取加权多数表决的方法。针对弱分类器修改权值,加大分类误 差率小的弱分类器的权值,使其在表决中起较大作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小作用
AdaBoost,是英文”Adaptive Boosting”(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
AdaBoost优点:
缺点:
使用情景:
好的Boosting算法,它的准确性不逊于随机森林。虽然在[1]的实验中只有一个挤进前十,但是实际使用中它还是很强的。因为自带特征选择(feature selection)所以对新手很友好,是一个“不知道用什么就试一下它吧”的算法。
算法链接:https://blog.csdn.net/sinat_30353259/article/details/81071505
梯度提升决策树(Gradient Boosting Decision Tree,GBDT)算法是近年来被提及比较多的一个算法,这主要得益于其算法的性能,以及该算法在各类数据挖掘以及机器学习比赛中的卓越表现,在梯度提升决策树中,其基学习器是分类回归树CART,使用的是CART树中的回归树。
GBDT: 首先gbdt 是通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的残差来达到将数据分类或者回归的算法。针对一般损失函数优化困难问题,利用损失函数的负梯度在当前模型的值作为残差的近似值进行求解。
采用决策树作为弱分类器的Gradient Boosting算法被称为GBDT
损失函数:残差
https://blog.csdn.net/tinkle181129/article/details/79681702
优点:
1、精度高(boosting的共同特点)
2、能处理非线性数据,能做回归和分类
3、能适应多种损失函数(Gradient梯度的特点)
缺点:
1、计算复杂度大,耗时(Boosting的共性缺点)
梯度提升和梯度下降的区别:
相同点:每一轮迭代中,都利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新
梯度提升:模型并不需要进行参数化表示,而直接定义在函数空间中,大大扩展使用模型的种类
梯度下降:模型是以参数化表示,从而模型的更新等价于参数的更新。
XGBoost:采用最大化这个差值作为准则来进行决策树的构建,通过遍历所有特征的取值,寻找使得损失函数前后相差最大时对应的分裂方式。是GBDT的工程实现
https://blog.csdn.net/v_july_v/article/details/81410574
核心思想:
xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
优点:
1、除了可以是CART也可以是线性分类器
2、损失函数中加入了正则项,用于控制模型的复杂度
3、借鉴了随机森林的做法,支持特征抽样,不仅防止过拟合,还能减少计算
4、XGBoost工具支持并行化
5、XGBoost的运算速度和算法都会优于GBDT
缺点:
1、XGBoostScikit-learn目前在Scikit-learn中没有实现,但可以通过python调用
使用场景:
凡是结构化数据上的竞赛,基本都是XGBoost胜;非结构化数据,如视频、音乐都是深度学习胜!
算法链接:https://blog.csdn.net/a358463121/article/details/68617389
GBDT和XGBoost区别(百面机器学习):
1、GBDT是机器学习算法,XGBoost是该算法的工程实现
2、在使用CART作为基分类器时,XGBoost显式的加入正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力
3、GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数
4、传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器
5、传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样
6、传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值得处理策略