对K-means运用到deep learning的一点理解

来源:互联网 发布:办公室躺椅知乎 编辑:程序博客网 时间:2024/05/22 10:53

          最近,在学习与深度学习相关的论文,看了一位大牛的论文学习笔记后,决定也把自己学习和看到的整理下来,不知道个人的理解对不对,希望发现问题的亲们能踊跃进行批评指正。微笑

         非监督学习的流程:

            1.从一组无标签数据中学习特征;

            2.用学习到的特征提取函数提取有标签数据特征,进行分类器的训练和学习;

            3.对无标签数据进行预测;

        

       将k-means聚类算法用来进行特征学习,也可以达到非常好的效果。

        k-means构建一个字典D,通过最小化重构误差,一个样本只能属于一个类中心,每一个n维的样本通过字典D映射为k维的码矢量,这个码矢量就是样本的特征。那么k-means的目标就是寻找满足条件的字典D,这个字典的每列都是单位长度,而且对应的码矢量还要能更好的保留样本的信息。感觉k-means特征学习和sparse coding很相似,只是sparse coding允许码矢量有多个非零值,而且对样本描述更准确。那么k-means的优势在哪里哩:1、首先根据字典D优化求解码矢量很简单;2、给定码矢量优化字典D也很容易;3、只有一个参数聚类中心个数k需要调整;

       

         在学习数据的特征时,一定要对数据进行预处理和初始化:

         a、对所有的样本减去灰度的均值和除以标准差(避免分母为0和压制噪声,一般给标准差增加一个小的常数。);

         b、用白化去除数据的相关性;

         

         对数据处理完后就可以进行k-means特征学习了,在此我们又遇到了一个问题,就是初始化聚类中心,一般的是随机挑选k个样本作为聚类中心,这样会导致在数据分布密集的地方挑选了几个类中心,一个中心可能就好了的,多选了几个中心,是不好的,会导致许多空类出现,那个大牛说可以从一个正态分布中随机初始化聚类中心,这个我不知道是怎么实现的额尴尬,希望知道的亲,能给我指点一下。另外,还可以启发式的解决这个问题,当空类出现时,再随机挑选样本来替代这个空类中心。

       

    k-means训练算法的大概过程:

      1.对数据进行归一化;

      2、对数据进行白化处理;

      3.迭代a-b直到满足条件:

             a、初始化聚类中心,即字典D,根据D得到码矢量s;

             b、根据码矢量s更新字典D,并进行归一化,得到新的字典D;

分析:

k-means的优点:学习简单,速度快,参数少,也能学习到方向性的边缘特征;

                    缺点:当数据的维数很高时,需要增加大量的样本,才能得到好的结果;

0 0