R实现Kmeans方法的细节

首先,Kmeans是一个很简单的算法。但是其中的一些细节是很需要注意的。自己撰写的Kmeans往往在循环迭代当中显得效率速度地下,因而更多地选择R包里面写好的Kmeans函数。细节思考如下,

距离函数

欧氏距离自不必说,就是两个数组间的绝对距离。但是在生物表达模式上时常会有共表达的模式,或者说是相似的测序峰,此时哪怕计算出来的绝对距离也就是欧式距离很大,但是实际上可能是一样的。这种情况下使用余弦函数来代替实际上是比较好的做法。
其次, 欧氏距离的计算太慢了。如果不追求向量间相似性计算的,可以选择曼哈顿距离。

Kmeans函数为什么只用了欧几里得距离

在R包当中的kmeans()函数中,实际上只有欧几里得距离,没有其他的可备选项目。为什么?
两个点之间的距离计算,用其他的方法来替代其实是合情合理的。但是在计算类心的时候,如果使用别的距离将很难保证能够迭代收敛(因为难以保证均值能够最小化你的距离)。

那么怎么解决生物上的问题呢

1, 对Kmeans方法进行改良
2, 处理数据,把向量标准化到1。这样子比较的就只有峰的形状,而不是峰值的高度。
针对要研究的对象,核小体,它在生物体当中存在三种变化。第一就是值的变化(Occupancy Value Changes),第二种就是位置开放的差异,第三种是模糊偏移(Fuzziness)。这里面第一种如果使用余弦处理、或者向量标准化,那么就无法获取信息了。

你可能感兴趣的:(R实现Kmeans方法的细节)