这里涉及到贝叶斯学派与频率学派理论
θ ∼ U ( 0 , 1 ) p ( θ ) = 1 \begin{aligned} \theta \thicksim U(0, 1)\\ p(\theta)=1 \end{aligned} θ∼U(0,1)p(θ)=1
设正面概率为o
p(2正2反|o)=o^2 (1-o)^2,可以使得p最大
为方便求导,对上式取log将累乘转换成累加: log [ o 2 ( 1 − o ) 2 ] = log ( o 2 ) + log [ ( 1 − o ) 2 ] \log [o^2(1-o)^2]=\log(o^2)+\log[(1-o)^2] log[o2(1−o)2]=log(o2)+log[(1−o)2]
可以解出o=0.5
将这个计算过程称为:极大似然估计
以极大似然估计的角度来看是0.25。
与我们预估有差距,预估就是先验概率。做试验之前已经可以估计结果。
如何使用经验纠正误差?
贝叶斯理论:先验概率如何给出。p(p(正))=p(o=0.5)
p ( o ∣ 1 正 3 反 ) = p ( o ) p ( 1 正 3 反 ∣ o ) p ( 1 正 3 反 ) p(o|1正3反)=\frac{p(o)p(1正3反|o)}{p(1正3反)} p(o∣1正3反)=p(1正3反)p(o)p(1正3反∣o)
此为最大后验概率(相当于在极大似然估计的基础上添加的正则化项)
经过先验概率修正后结果为3/8。
线性模型
将空间中的点划分为n簇。
首先随机选择簇的中心
以EM思想来看
适用范围:各个属性无关,方差相等的。在二维空间类似球状分布
优点:
缺点:
改进:
from sklearn.datasets import make_moons, make_circles, make_blobs
from sklearn.cluster import DBSCAN
import numpy as np
import matplotlib.pyplot as plt
centers = [[0, 1], [-1, -1], [1, -1]]
X, y = make_blobs(n_samples=1500, random_state=170)
trs = [[0.60834549, -0.63667341], [-0.40887718, 0.85253229]]
X = np.dot(X, trs)
clt = DBSCAN(eps=0.3, min_samples=5)
yp = clt.fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=yp, edgecolors='k')
plt.title('类别数量:'+str(len(set(yp))))
plt.axis("equal")
plt.show()
算法
跟其他聚类算法的不同之处是,AP在开始时,将所有节点都看成潜在的聚类中心,然后通过节点之间的通信,去找出最合适的聚类中心,并将其他节点划分到这些中心下去,所以我们可以认为,AP算法所要做的事情就是去发现这些聚类中心。AP的输入是一个节点间的相似度矩阵,S,其中S(i,j)表示节点i和节点j之间的相似度,也表明了,j作为i的聚类中心的合适程度,这个相似度的计算可以根据具体应用场景,这里未免误导不作相似度的假设。其中S(k,k)表示节点k作为k的聚类中心的合适程度,可以理解为,节点k成为聚类中心合适度,在最开始时,这个值是初始化的时候使用者给定的值,会影响到最后聚类的数量。
算法流程
假设 { x 1 , x 2 , ⋯ , x n } \{ {x_1},{x_2}, \cdots ,{x_n}\} { x1,x2,⋯,xn}数据样本集,数据间没有内在结构的假设。令是一个刻画点之间相似度的矩阵,使得 s ( i , j ) > s ( i , k ) s(i,j) > s(i,k) s(i,j)>s(i,k)当且仅当 x i x_i xi与 x j x_j xj的相似性程度要大于其与 x k x_k xk的相似性。
AP算法进行交替两个消息传递的步骤,以更新两个矩阵:
两个矩阵R ,A中的全部初始化为0。这个算法通过以下步骤迭代进行:
首先,吸引信息(responsibility) r t + 1 ( i , k ) {r_{t + 1}}(i,k) rt+1(i,k)按照
r t + 1 ( i , k ) = s ( i , k ) − max k ′ ≠ k { a t ( i , k ′ ) + s ( i , k ′ ) } {r_{t + 1}}(i,k) = s(i,k) - \mathop {\max }\limits_{k' \ne k} \{ {a_t}(i,k') + s(i,k')\} rt+1(i,k)=s(i,k)−k′=kmax{ at(i,k′)+s(i,k′)}
迭代。
然后,归属信息(availability) a t + 1 ( i , k ) {a_{t + 1}}(i,k) at+1(i,k)按照
a t + 1 ( i , k ) = min ( 0 , r t ( k , k ) + ∑ i ′ ∉ { i , k } max { 0 , r t ( i ′ , k ) } ) , i ≠ k {a_{t + 1}}(i,k) = \mathop {\min }\limits_{} \left( {0,{r_t}(k,k) + \sum\limits_{i' \notin \{ i,k\} } {\max \{ 0,{r_t}(i',k)\} } } \right),i \ne k at+1(i,k)=min⎝⎛0,rt(k,k)+i′∈/{ i,k}∑max{ 0,rt(i′,k)}⎠⎞,i=k
和
a t + 1 ( k , k ) = ∑ i ′ ≠ k max { 0 , r t ( i ′ , k ) } {a_{t+1}}(k,k) = \sum\limits_{i' \ne k} {\max \{ 0,{r_t}(i',k)\} } at+1(k,k)=i′=k∑max{ 0,rt(i′,k)}
迭代。
对以上步骤进行迭代,如果这些决策经过若干次迭代之后保持不变或者算法执行超过设定的迭代次数,又或者一个小区域内的关于样本点的决策经过数次迭代后保持不变,则算法结束。
为了避免振荡,AP算法更新信息时引入了衰减系数 λ \lambda λ。每条信息被设置为它前次迭代更新值的 λ \lambda λ倍加上本次信息更新值的 1 − λ 1-\lambda 1−λ倍。其中,衰减系数 λ \lambda λ是介于0到1之间的实数。即第t+1次 r ( i , k ) r(i,k) r(i,k), a ( i , k ) a(i,k) a(i,k)的迭代值:
r t + 1 ( i , k ) ← ( 1 − λ ) r t + 1 ( i , k ) + λ r t ( i , k ) {r_{t + 1}}(i,k) \leftarrow (1 - \lambda ){r_{t + 1}}(i,k) + \lambda {r_t}(i,k) rt+1(i,k)←(1−λ)rt+1(i,k)+λrt(i,k)
a t + 1 ( i , k ) ← ( 1 − λ ) a t + 1 ( i , k ) + λ a t ( i , k ) {a_{t + 1}}(i,k) \leftarrow (1 - \lambda ){a_{t + 1}}(i,k) + \lambda {a_t}(i,k) at+1(i,k)←(1−λ)at+1(i,k)+λat(i,k)
参考资料:https://en.wikipedia.org/wiki/Affinity_propagation
聚类算法具有多解性,效果评估需要结合真实情况,进行测试。
总结:在上图多种算法,可以很明显的看出DSCAN算法准确率和时间代价的效果都非常的好,而其他算法都在一些特殊的情况表现的比较好,对于真实情况时,应过做一些测试对比效果。