投影寻踪降维

ppdire的Python项目详细描述


投影寻踪降维

一个scikit学习兼容的python 3包,用于减少投影追踪维度。 这个类实现了一个非常通用的投影追踪框架,允许访问 方法从pp-pca到capi广义betas。
该软件包使用了网格算法[1],这是数值上最稳定和精确的p p算法。

说明

投影寻踪(pp)为降维和回归提供了一个非常通用的框架。这个 ppdre包提供了一个基于多种投影计算pp估计值的框架 指数

虽然该软件包也可以使用用户定义的投影索引,但是一组投影索引是 作为两个辅助类包含在包中:

  • dicomo用于(共)矩统计
  • capi专门用于基于协矩的线性组合分析金融市场回报[2]

当使用dicomo类作为插件时,有几种著名的多维降维技术 是可获得的,以及其可靠的替代品。有关详细信息,请参见下面的示例。

备注:

  • 这个包中包含的所有方法都是为连续数据设计的。它们不能正确处理分类或文本数据。
  • 该软件包专注于投影追踪维度的缩减。涉及降维步骤的回归方法可以通过它访问 (例如PCR,PLS,RCR,…),但是该软件包没有提供投影寻踪回归(PPR)的实现。要访问PPR,请参阅 投影追踪包,也通过PIP分发。

代码与scikitlearn对齐,这样gridsearchcv等模块就可以完美地应用于它。

存储库包含

  • 估计器(ppdre.py
  • 估计共矩的类(dicomo.py
  • 共矩分析投影指数类(capi.py
  • 共矩估计的辅助函数(\u dicomo utils.py
注:

如何安装

软件包是通过pypi分发的,因此请通过:

    pip install ppdire

ppdre类

依赖关系

  • 来自<;sklearn.base>;:baseEstimator、transformerMixin、regressorMixin
  • 来自<;sklearn.utils>;:"基本组成"
  • 复制
  • <;scipy.stats>;:
  • 来自<;scipy.linalg>;:pinv2
  • 努比
  • from<;statsmodels.regression.quantile_regression>;:数量
  • 来自<;sklearn.utils.extmath>;:svd_flip
  • 来自<;sprm>;:rm,robcent
  • 来自<;sprm.\u m_support_functions>;:myexception
  • 警告

参数

  • 投影索引、函数或类。dicomocapi 包可以同时使用,但用户定义的投影索引可以 被处理
  • pi_arguments,要传递给投影索引的参数的dict.dict
  • n_个组件,要估计的组件的内部数量
  • 修剪,浮动。投影索引的修剪百分比,输入为PCT/100
  • alpha,浮点。连续体系数。仅当ppdre用于 估计(经典或稳健)连续回归。
  • ndir,每次迭代要计算的方向数。
  • maxiter,int.最大迭代次数。
  • regopt,可以设置回归步骤y~t.的str.回归选项 要'ols'(默认),'robust'(将运行sprm.rm)或'quantile'statsmodels.regression.quantreg)。
  • 居中,str.如何居中数据。接受的选项是来自 sprm.robcent
  • 中心数据,布尔。
  • 缩放数据,布尔值。注意:如果设置为false,则收敛到最佳 不是给定的。会发出警告。
  • 白色数据,布尔。通常用于ica(峰度为pi)
  • 平方π,布尔。评估时是否将投影指数平方。
  • 压缩,bool。如果true,则使用内部svd压缩步骤 平面数据表(P>;N)。加快计算速度。
  • 复制,布尔。是否对输入数据进行深度复制。
  • 详细,布尔。设置为true打印迭代号。
  • 返回缩放对象,bool。 注意:几个有趣的参数也可以传递给fit方法。

属性

始终提供属性

  • x_weights:x block ppd加权向量(通常表示为w)
  • x加载:x块ppdre加载向量(通常表示为p)
  • x_分数:x块ppdre分数向量(通常表示为t)
  • x ev:x块解释了每个组件的方差
  • x rweights:x block simples样式的加权向量(通常表示为r)
  • x锁定:x块位置估计
  • x_scau:x块比例估计值
  • 临界值:优化目标的评估值向量。
  • maxobjf:包含每个组件的优化目标的向量。

提供多个数据块时创建的属性:

  • c:响应和潜在变量块之间的内部关系向量
  • coef:回归系数的向量,如果提供第二个数据块
  • 截距:截距
  • 系数缩放:缩放回归系数的向量(使用缩放选项时)
  • 按比例截距:按比例截距
  • 残差:回归残差向量
  • y ev:y块解释方差
  • 已安装:已安装响应
  • y本地:y位置估计
  • y_scau:y比例估计值

仅当相应的输入标志为true时才创建属性

  • 白化:白化数据矩阵(通常表示为k)
  • 混合:混合矩阵估计
  • 缩放对象:从sprm.robcent缩放对象

方法

  • 适合(x,*args,**kwargs):适合型号
  • 预测(x):根据拟合进行预测
  • 转换(x):将x投影到潜在空间上
  • getattr():获取属性列表
  • setattr(*kwargs):设置SPRM对象的单个属性

函数接受几个可选的输入参数。这些是旗帜 通常不需要交叉验证。它们是:

  • y,numpy向量或1d矩阵,直接作为arg或作为kwarg
  • h,int.覆盖n_components的单个调用fit。小心使用。
  • dmetric,内部使用str.距离度量。默认为'euclidean'
  • 混合,布尔。返回混合矩阵?
  • 回归方法的进一步参数可以在这里传递 作为附加kwargs

辅助功能

  • dicomo(类):(共-)矩
  • capi(类):共矩分析投影索引

示例

加载和准备数据

运行玩具示例:

  • 源包和数据:

      # Load data
      import pandas as ps
      import numpy as np
      data = ps.read_csv("./data/Returns_shares.csv")
      columns = data.columns[2:8]
      (n,p) = data.shape
      datav = np.matrix(data.values[:,2:8].astype('float64'))
      y = datav[:,0]
      X = datav[:,1:5]
    
      # Scale data
      from sprm import robcent
      centring = robcent()
      Xs = centring.fit(X)
    

pp估计值与scikit learn的比较

让我们首先运行ppdre来生成 PCA和PLS。这样可以很容易地验证算法是否正确。

  • 投影寻踪作为一种计算主成分分析的缓慢、近似的方法。比较:

      # PCA ex Scikit-Learn 
      import sklearn.decomposition as skd
      skpca = skd.PCA(n_components=4)
      skpca.fit(Xs)
      skpca.components_.T # sklearn outputs loadings as rows ! 
    
      # PP-PCA  
      from ppdire import dicomo, ppdire
      pppca = ppdire(projection_index = dicomo, pi_arguments = {'mode' : 'var'}, n_components=4)
      pppca.fit(X)
      pppca.x_loadings_
    
  • 同样,投影追踪作为计算pls的一种缓慢、近似的方法。比较:

      # PLS ex Scikit-Learn 
      skpls = skc.PLSRegression(n_components=4)
      skpls.fit(Xs,(y-np.mean(y))/np.std(y))
      skpls.x_scores_
      skpls.coef_ 
      Xs*skpls.coef_*np.std(y) + np.mean(y) 
    
      # PP-PLS 
      pppls = ppdire(projection_index = dicomo, pi_arguments = {'mode' : 'cov'}, n_components=4, square_pi=True)
      pppls.fit(X,y)
      pppls.x_scores_
      pppls.coef_scaled_ # Column 4 should agree with skpls.coef_
      pppls.fitted_  
    

注:基于潜在变量投影的降维技术, 如pca、pls和ica等,都是与分量相关的不确定符号。 因此,不同算法的估计符号可能是相反的,但是 绝对值应与算法精度相同。这里,这意味着 sklearnppdre'sx嫒scores嫒u和x嫒loadings可能有相反的迹象, 然而,系数和拟合响应应该是相同的。

稳健投影寻踪估计

  • 基于中值绝对偏差(mad)的稳健主成分分析[3]。

      lcpca = ppdire(projection_index = dicomo, pi_arguments = {'mode' : 'var', 'center': 'median'}, n_components=4)
      lcpca.fit(X)
      lcpca.x_loadings_
      # To extend to Robust PCR, just add y 
      lcpca.fit(X,y,ndir=1000,regopt='robust')
    
  • 基于修剪(co)方差的稳健连续回归[4]

      rcr = ppdire(projection_index = dicomo, pi_arguments = {'mode' : 'continuum'}, n_components=4, trimming=.1, alpha=.5)
      rcr.fit(X,y=y,ndir=1000,regopt='robust')
      rcr.x_loadings_
      rcr.x_scores_
      rcr.coef_scaled_
      rcr.predict(X)
    

备注:对于rcr,continuum参数alpha调整多个 通过PLS(alpha->;0)回归到PCR(alpha=1)。当然, robust pls选项也可以通过pi_arguments={'mode':'cov'},trimming=.1

投影寻踪广义betas

使用 共矩分析投影指数(capi)[2]。

    from ppdire import capi 
    est = ppdire(projection_index = capi, pi_arguments = {'max_degree' : 3,'projection_index': dicomo, 'scaling': False}, n_components=1, trimming=0,center_data=True,scale_data=True)
    est.fit(X,y=y,ndir=200)
    est.x_weights_
    # These data aren't the greatest illustration. Evaluating CAPI 
    # projections, makes more sense if y is a market index, e.g. SPX 

通过scikit learn进行交叉验证
    from sklearn.model_selection import GridSearchCV
    rcr_cv = GridSearchCV(ppdire(projection_index=dicomo, 
                                pi_arguments = {'mode' : 'continuum'}), 
                          cv=10, 
                          param_grid={"n_components": [1, 2, 3], 
                                      "alpha": np.arange(.1,3,.3).tolist(),
                                      "trimming": [0, .15]
                                     }
                         )
    rcr_cv.fit(X[:2666],y[:2666]) 
    rcr_cv.best_params_
    rcr_cv.predict(X[2666:])

数据压缩

ppdre非常灵活,可以根据非常广泛的种类进行投影 对于投影索引,它可能需要计算。对于平面数据表, 已内置解决方案。

    # Load flat data 
    datan = ps.read_csv("./ppdire/data/Glass_df.csv")
    X = datan.values[:,100:300]
    y = datan.values[:,2]

    # Now compare
    rcr = ppdire(projection_index = dicomo, 
                pi_arguments = {'mode' : 'continuum'}, 
                n_components=4, 
                trimming=.1, 
                alpha=.5, 
                compression = False)
    rcr.coef_

    rcr = ppdire(projection_index = dicomo, 
                pi_arguments = {'mode' : 'continuum'}, 
                n_components=4, 
                trimming=.1, 
                alpha=.5, 
                compression = True)
    rcr.coef_

但是,如果数据包含几个低比例,压缩将无法正常工作 可变值。在本例中,它不适用于x=datan.values[:,8:751]。这个 将发出警告,并且ppdre将在不压缩的情况下继续。

独立调用投影索引

dicomo和capi都可以作为调用矩的一致框架 它们本身,或它们的线性组合。让我们从 数据:

    pip install ppdire
0

现在计算一些力矩,并将它们与numpy进行比较

    pip install ppdire
1

同样:共矩

    pip install ppdire
2

这些只是集合中的一些选项,可以在dicomo

参考文献

  1. 稳健的多元方法:投影寻踪方法,Peter Filzmoser,Sven Serneels,Christophe Croux和Pierre J.van Espen,in:从数据和信息分析到知识工程, Spiliopoulou,M.,Kruse,R.,Borgett,C.,Nuernberger,A.和Gaul,W.,编辑, 斯普林格·维拉格,柏林,德国, 2006年,第270-277页。
  2. 基于投影寻踪的广义beta在金融市场分析中考虑高阶共矩效应,sven serneels,arxiv preprint 1908.001412019。
  3. 通过投影寻踪的稳健主成分和离散矩阵,Chen,Z.和Li,G.,《研究报告》,哈佛大学统计系,1981年。
  4. 稳健连续回归,斯文·塞内尔斯,彼得·菲兹莫瑟,克里斯托夫·克劳克斯,皮埃尔·范·埃斯彭,化学计量学与智能实验室系统,76(2005),197-204.。

要做的工作

  • 优化对齐以sklearn
  • 与某些打印功能对齐
  • 优化速度
  • 扩展到多变量响应(开放研究主题!)
  • 欢迎提出建议

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java关闭应用程序按钮Listener   Java中的多线程同步在Java示例中的思考   java如何查看Tomcat正在使用/访问的JAR?   java My代码在调用垃圾收集器后不会终止   多线程Java连接线程池和connectionfactory?   java在运行时修改JAR文件   java Android:使用光标时引发IllegaleException   在Netbeans中测试不可执行库的java?   泛型在参数上强制子类Java类型   spring Java:继承与依赖注入“自动连线”   javascript如何解析这个xml元素   java打印特定序列中的数组   带有ProcessingTimeSessionWindow的java Apache Flink自定义触发器   java如何配置消息驱动的Bean应用程序和Glassfish来使用来自远程MessageBroker的消息?