一.KMeans算法
1.KMeans算法原理
-->无监督学习.输入的只有特征值,目标值prediction是 模型训练得出来的
k-means其实包含两层内容:K表示初始中心点个数(计划聚类数),
means求中心点到其他数据点距离的平均值,
K自己设置(2,3,4,5,6,7,8),K必须大于数据本身的分散度
具体步骤如下:
1. 随机设置K个特征空间内的点作为初始的聚类中心
2. 对于其他每个点计算到K个中心的距离,
未知的点 选择最近的一个聚类中心点作为标记类别
3. 接着对着标记的聚类中心之后,
重新计算出每个聚类的新中心点(平均值)
4. 如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程
伪代码:
输入:k, data[n];
1.选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];
初始点的选择,利用的是Kmeans++的算法(在Kmeas算法的基础上).在让这两个点尽可能远,这样影响会降低.
2.对于data[0]….data[n], 分别与c[0]…c[k-1]比较,假定与c[i]差值最少,就标记为i;
怎么标记i,比如用字典保存,key为i,value为类别.
3.对于所有标记为i点,重新计算c[i]={ 所有标记为i的data[j]之和}/标记为i的个数;
4.重复(2)(3),直到所有c[i]值的变化小于给定阈值。
2.Kmeans算法特点
优点:速度快,简单
- 对处理大数据集,该算法保持可伸缩性和高效率。
- 当簇近似为高斯分布时,它的效果较好。
缺点:最终结果跟初始点选择相关,容易陷入局部最优
- k均值算法中k是实现者给定的,这个k值的选定是非常难估计的。
- k均值的聚类算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,当数据量大的时候,算法开销很大。
- k均值是求得局部最优解的算法,所以对于初始化时选取的k个聚类的中心比较敏感,不同点的中心选取策略可能带来不同的聚类结果。
- 对噪声点和孤立点数据敏感。 (噪声点,离其他的数据点特别远, 对数据影响比较大)
>>KMeans一般是其他聚类方法的基础算法,如谱聚类。`
3.KMeans算法步骤
1.随机选择k个点作为初始聚类中心
2.计算所有点到k个聚类中心的距离(欧式距离)
3.每个点选择距离最近的(最小的)聚类中心作为自己的簇clustering
4.重新计算每个簇内所有点平均值作为新的聚类中心
5.然后根据新的k个聚类中心迭代重复上面的步骤(2-4)
6.直到新的聚类中心与上次中心重合度小于阈值,
或者达到最大的迭代次数(默认20),停止计算.
model = KMeans(featuresCol='features', predictionCol='prediction', k=5, seed=100,initMode:str='k-means||',maxIter:int=20,initSteps:int=2)
##然后模型评估
SSE=计算数据样本到聚类中心的举例(差异度)平方之和
=(3.5²+1.5²+1.5²+3.5²)/4 现在不用了,用SC
SC(轮廓系数)=(b-a)/max(a,b)
a.样本数据到自己cluster中其他点的平均距离
b.样本数据到其它cluster中所有点的平均距离的最小值(一个cluster计算一个平均值)
evaluator=ClusterEvaluator(predictionCol='prediction',feturesCol='features')
二.决策树算法
1.构建决策树的步骤
特征选择:选择有较强分类能力的特征
决策树生成:典型的算法有ID3和C4.5,它们生成决策树过程相似,
ID3是采用信息增益作为特征选择度量,而C4.5采用信息增益比率
决策树剪枝:剪枝原因是决策树生成算法生成的树对训练数据的
预测很准确,但是对于未知数据分类很差,这就产生了过拟合的现象
过拟合:训练集表现较好,但是测试集表现不好.
可以通过剪枝(减小特征列,通过减小树的最大深度)来解决
欠拟合:训练集表现不好,而且测试集表现也不好.
可以通过增加特征列来解决
决策树剪枝的过程就是从已生成的决策树上裁剪掉一些子树或者叶节点.
剪枝的目标是通过极小化决策树的整体损失函数来实现的
>>信息熵:数据的不确定性的度量
>>信息增益:经验熵-条件熵=整个数据集的信息熵-当前节点的信息熵
>>信息增益率: 信息增益/当前特征取值的信息熵
2.ID3算法介绍
1.--ID3算法步骤
-计算每个特征的信息增益
-使用信息增益最大的特征将数据集 S 拆分为子集
-使用该特征(信息增益最大的特征)作为决策树的一个节点
-使用剩余特征对子集重复上述(1,2,3)过程
>>通过计算每个节点的信息增益(整个数据集的信息熵-当前节点的信息熵),信息增益越大说明不确定性月小,
所以我们选择信息增益大的节点作为根节点
3.C4.5算法介绍
-C4.5 是计算信息增益率 :信息增益/当前特征取值的信息熵
-解决ID3决策树缺点:
缺点1:当前特征列的取值越多时,信息增益越大
ID3会偏向于选择特征取值比较多的特征列
整体信息熵: I(S1,S2)=I(640,384)=-(p1log(p1)+p2log(p2))=0.9544
>>通过计算每个节点的信息增益率(信息增益/当前特征取值的信息熵),为了解决ID3的算法缺陷(偏向于选择特征值
比较多的特征列),信息增益率越大 不确定性越小
4.Cart算法
Cart算法通过计算基尼指数(GINT)来选择特征:
基尼指数=1-∑Pi²
信息增益(ID3)、信息增益率(C4.5)值越大,则说明优先选择该特征。
基尼指数值越小(cart),则说明优先选择该特征。
>>通过计算每个节点的基尼指数(1-∑Pi²),基尼指数越大不确定性越大,
选择基尼指数小的作为当前节点
#创建决策树对象
from pyspark.ml.calssification import DecisionTreeClassifier
#模型评估:
用户预测值正确的数量/已知的标签值的数量=准确率
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
5.决策树算法的特点
1.决策树的优点:
直观,便于理解,小规模数据集有效
执行效率高,执行只需要一次构建,可反复使用
2.决策树的缺点
处理连续变量不好,较难预测连续字段
类别较多时,错误增加的比较快
对于时间序列数据需要做很多的预处理
可规模性一般
实际分类的时候只能根据一个字段进行