本文共 2687 字,大约阅读时间需要 8 分钟。
TICC-master文件夹下面有这几个部分:output_folder、paper code、src、UnitTest_Data、example.py、example_data.txt、README.md、TICC_solver.py、UnitTest.py
一、所需环境
64位python2.7+cvxpy+snap
问题一,64位python且2.7
之前一直在使用python3.6,代码中说明要使用2.7版本,主要是snap目前还没有与3.6的接口,且作者中语法风格使用的是2.7。因此从新安装一个Python2.7。要注意必须是64位的,否则会与cvxpy中很多库不兼容。第一是官网下载包时候需要注意,第二是安装后需要注意检查
问题二,cvxpy的安装
参考下面链接的安装方法:
1、要主要安装0.4.0版本的cvxpy,否则运行代码会出现报错:NameError: name 'semidefinite' is not defined
原因在于0.4.0版本的才有semidefinite属性,后面版本没有这个属性,这是多次反复安装后的经验,默认的版本是1.0.25,不断安装卸载,太坑了。这个属性在后来的版本中都被摒弃,也没有找到新的替代方法。
2、安装完成后,简单导入cvxpy会出现一个报错:
from cvxpy import *
File "C:\Python27\lib\site-packages\cvxpy\__init__.py", line 21, in
from cvxpy.atoms import *
File "C:\Python27\lib\site-packages\cvxpy\atoms\__init__.py", line 20, in
from cvxpy.atoms.geo_mean import geo_mean
File "C:\Python27\lib\site-packages\cvxpy\atoms\geo_mean.py", line 20, in
from cvxpy.atoms.atom import Atom
File "C:\Python27\lib\site-packages\cvxpy\atoms\atom.py", line 23, in
from .. import interface as intf
File "C:\Python27\lib\site-packages\cvxpy\interface\__init__.py", line 20, in
from cvxpy.interface.matrix_utilities import *
File "C:\Python27\lib\site-packages\cvxpy\interface\matrix_utilities.py", line 20, in
from cvxpy.interface import cvxopt_interface as co_intf
File "C:\Python27\lib\site-packages\cvxpy\interface\cvxopt_interface\__init__.py", line 20, in
from cvxpy.interface.cvxopt_interface.dense_matrix_interface import DenseMatrixInterface
File "C:\Python27\lib\site-packages\cvxpy\interface\cvxopt_interface\dense_matrix_interface.py", line 26, in
import cvxopt
File "C:\Python27\lib\site-packages\cvxopt\__init__.py", line 50, in
import cvxopt.base
ImportError: DLL load failed: 找不到指定的模块。
这个错误主要原因在于numpy-mkl的问题,这是一个库,不能独立用pip来安装,下载whl的地址为:
3、在TICC类方法定义中,TICC.fit(),使用了Pool 进程,但进程却不在if __name__ == ‘__main__’中,不符合Windows使用进程的语句要求,很有可能是在Unix/Linux下完成的(也有可能是目前对代码还未完全掌握)。目前手上只有Windows,先看能不能修改吧
4、需要进一步掌握python中进程的使用,尤其是在类中
二、代码理解
TICC-master文件夹下面有这几个部分:output_folder、paper code、src、UnitTest_Data、example.py、example_data.txt、README.md、TICC_solver.py、UnitTest.py
(paper code中的代码还未梳理),TICC-master中的代码主体框架如下:
README有算法的部分解释
TICC算法的输入是T-by-n的矩阵,正则化参数lambda(MRF的稀疏性)、平滑参数beta、窗口大小w、聚类数量k。maxIters:TICC算法的最大迭代次数,threshold:收敛阈值,prefix_string:保存文件的位置,TICC.fit:算法函数,用于学习模型的参数。
主要的任务就是把T个样本的时序数据划分为片段,并判断其所属类别。片段的总数量受beta的影响。
1、代码中的初始化提供了两种方法,GMM和k-means,代码中最后使用了gmm方法进行了初始化,得到初始的分类。
2、train_clusters函数中解决的是论文公式(5)的优化问题,使用ADMM算法,返回逆协方差。ADMM类中的ADMM_x、ADMM_DMM_z、ADMM_u分别为三个参数的更新方式
3、根据协方差矩阵进行样本点的重新聚类,计算lle_all_points_clusters,即动态规划中的距离矩阵。
4、算法的数据可使用paper code中的generate_synthetic_data.py生成,论文中提到的car数据作者不公开,代码结果保存在一个文件夹中,
5、算法结果的评判以及如何根据BIC和silhouette score来判断类的数量暂未深究
6、paper code中代码整理待续
转载地址:http://hqudv.baihongyu.com/