常用算法备忘

来源:互联网 发布:工程预算清单软件 编辑:程序博客网 时间:2024/04/29 15:38

from http://blog.csdn.net/a936676463/article/details/8573622


k-最近邻法(KNN与KMeans)


好资源 http://coolshell.cn/articles/7779.html


最近邻法基于类比学习,它既可以用于聚类,也可以用于分类
K-means是基于最近邻法的聚类方法。算法描述如下:
输入:k, data[n]; 
(1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1]; 
(2) 对于data[0]….data[n], 分别与c[0]…c[k-1]比较,假定与c[i]差值最少,就标记为i; 
(3) 对于所有标记为i点,重新计算c[i]={ 所有标记为i的data[j]之和}/标记为i的个数; 
(4) 重复(2)(3),直到所有c[i]值的变化小于给定阈值。

该算法的最大优势在于简洁和快速。算法的关键在于初始中心的选择和距离公式。


KNN算法是基于最近邻法的分类方法。算法描述如下
输入:待分类未知类别案例项目。已知类别案例集合D,其中包含j个已知类别的案例
输出:项目可能的类别
依公式计算Item与D1、D2......Dj之相似度。得到sim(Item,D1)、Sim(Item,D2).....、Sim(Item,Dj).
将Sim(Item,D1)、Sim(Item,D2).......Sim(Item,Dj)排序,若是超过相似度门槛t则放入邻居案例集合NN。
自邻居案例集合NN中取出前k名,依多数决,得到Item可能类别。



贝叶斯分类

贝叶斯分类是一种统计学分类方法,它利用已知样本的分类统计情况预测未知样本的分类。
p(H|X)=p(X|H)p(H)/p(X)

朴素贝叶斯分类工作过程:
1)每个数据样本用一个n维特征向量X={x1,x2,......xn}表示,分别描述对n个属性A1,A2.....An样本的n个度量。
2)假定有m个类C1,C2....Cm。给定一个未知的数据样本X,分类法将预测X属于具有最高后验概率的类。即,朴素贝叶斯分类将未知的样本分配给类ci,当且仅当
p(Ci|X)>p(Cj|X)

p(ci|x)=p(x|ci)p(ci)/p(x)

3)由于P(X)对于所有类为常数,只需要p(X|Ci)最大即可。如果类的先验概率未知,则通常假定这些类是等概率的,即p(c1)=p(c2)=...=p(cm)。并据此只对p(ci|x)最大化。否则,最大化p(x|ci)p(ci).
p(ci)可以用p(ci)=si/s来计算。

4)给定具有许多属性的数据集,计算p(x|ci)的开销可能非常大。为降低计算p(x|ci)的开销,可以做类条件独立的朴素假定。假定属性值相互条件独立,即在属性间,不存在依赖关系,这样,
p(x|ci)=p(x1|ci)*p(x2|ci)....*p(xn|ci)
概率p(x|ci),p(x2|ci)....p(xn|ci)可以由训练样本估值

5)为对未知样本X分类,对每个类Ci,计算P(X|Ci)p(Ci).样本X被指派到该值最大的类。