K最近邻(K-Nearest Neighbors,KNN)算法是一种分类算法,也是最简单易懂的机器学习算法。应用场景有字符识别,文本分类,图像识别等领域。该算法的思想是:一个样本与数据中的K个样本最相似,如果这K个样本中的大多数属于某一类别,则该样本也属于这个类别。通常k是不大于20的整数。
说明:KNN没有显示的训练过程,它是“懒惰学习”的代表,它在训练阶段只是把数据保存下来,训练时间开销为0,等收到测试样本进行处理。
接下来对KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类.
优点:
缺点:
K取值设置过小会降低分类精度;若设置过大,且测试样本属于训练集中包含数据较多的类,则会增加噪声,降低分类效果。通常,K值的设定采用交叉检验的方式。经验规则:k一般低于训练样本数的平方根。
压缩训练样本;
确定最终的类别时,不是简单的采用投票法,而是进行加权投票,距离越近权重越高。
1)计算测试数据与各个训练数据之间的距离;
2)按照距离的递增关系进行排序;
3)选取距离最小的K个点;
4)确定前K个点所在类别的出现频率;
5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。
1:K近邻算法是基本且简单的分类与回归方法,knn基本做法是:对给定的训练实例点和输入实例点,首先确定输入实例点的k个最近邻实例点数,然后用这k个训练实例点的累的多数预测输入实例点的类
2:knn模型对应于基于数据集对特征空间的一个划分,knn中当训练集、距离度量、k值及分类决策规则确定后,其结果唯一确定。
3:knn三要素:距离度量、k值的选择和分类决策规则
在KNN中,通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题,在这里距离一般使用欧氏距离或曼哈顿距离:
聚类算法是一种无监督的学习算法。所谓非监督学习,就是数据是没有类别标记的,算法要从对原始数据的探索中提取出一定的规律。在聚类算法中根据样本之间的相似性,将样本划分到不同的类别中,对于不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧式距离法。
将各个聚类子集内的所有数据样本的均值作为该聚类的代表点通过迭代过程把数据集划分为不同的类别,使得评价聚类性能的准则函数达到最优,从而使生成的每个聚类内紧凑,类间独立。
通俗的讲:一堆散点中,选出k个凝聚点,根据相应的计算方法进行欧氏距离计算和迭代,最后将散点分成k类,使得各类间的相似度尽可能低,各类内的相似度尽可能高。
使用K均值算法对测试数据进行聚类,一般情况下效果不错。但有时候效果就不好了,因为K均值聚类收敛的是局部最小值,而不是全局最小值。如图所示:
如何解决这个问题呢?二分类K均值算法。
二分K均值聚类算法
二分K均值算法是K均值算法的改进版。该算法首先将所有的点作为一个簇,然后将该簇一分为二,之后选择其中的一个簇继续划分,哪个簇进行划分取决于对其划分是否可以最大程度的降低误差平方和。重复上述基于平方和的划分过程,直到簇数目和K值相等。
在商业上,聚类可以帮助市场分析人员从消费者数据库中区分出不同的消费群体来,并且概括出每一类消费者的消费模式或者说习惯。
比如要对于现有的客户分群,那么就要根据最终分群的目的选择不同的变量来分群。如果要优化客户服务的渠道,那么就应选择与渠道相关的数据;如果要推广一个新产品,那就应该选用用户目前的使用行为的数据来归类用户的兴趣。
它作为数据挖掘中的一个模块,可以作为一个单独的工具以发现数据库中分布的一些深层的信息,并且概括出每一类的特点,并且,也可以作为数据挖掘中其他分析算法的一个预处理步骤。
根据用户的属性进行归类,在推送、转化等很多过程中,可以更加精准化,以便于在推送及转化过程中获得更大的收益。
①重要价值客户
②重要唤回客户
③重要深耕客户
④重要挽留客户
⑤潜力客户
⑥新客户
⑦一般维持客户
⑧流失客户
算法思想:
RFM分析就是根据客户活跃程度和交易金额的贡献,进行客户价值细分的一种方法
R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。
F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。
M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。
Knn与k-means的区别:
KNN |
K-Means |
1.KNN是分类算法 2.监督学习 3.喂给它的数据集是带label的数据,已经是完全正确的数据 |
1.K-Means是聚类算法 2.非监督学习 3.喂给它的数据集是无label的数据,是杂乱无章的,经过聚类后才变得有点顺序,先无序,后有序 |
没有明显的前期训练过程,属于memory-based learning |
有明显的前期训练过程 |
K的含义:来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为c |
K的含义:K是人工固定好的数字,假设数据集合可以分为K个簇,由于是依靠人工定好,需要一点先验知识 |
相似点:都包含这样的过程,给定一个点,在数据集中找离它最近的点。即二者都用到了NN(Nears Neighbor)算法,一般用KD树来实现NN。 |