投影寻踪降维
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
- 警告
参数
投影索引、函数或类。
dicomo
和capi 包可以同时使用,但用户定义的投影索引可以 被处理
pi_arguments
,要传递给投影索引的参数的dict.dict
n_个组件
,要估计的组件的内部数量修剪
,浮动。投影索引的修剪百分比,输入为PCT/100alpha
,浮点。连续体系数。仅当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比例估计值
仅当相应的输入标志为 函数接受几个可选的输入参数。这些是旗帜
通常不需要交叉验证。它们是: 运行玩具示例: 源包和数据: 让我们首先运行 投影寻踪作为一种计算主成分分析的缓慢、近似的方法。比较: 同样,投影追踪作为计算pls的一种缓慢、近似的方法。比较: 注:基于潜在变量投影的降维技术,
如pca、pls和ica等,都是与分量相关的不确定符号。
因此,不同算法的估计符号可能是相反的,但是
绝对值应与算法精度相同。这里,这意味着
基于中值绝对偏差(mad)的稳健主成分分析[3]。 基于修剪(co)方差的稳健连续回归[4] 备注:对于rcr,continuum参数 使用
共矩分析投影指数(capi)[2]。 而 但是,如果数据包含几个低比例,压缩将无法正常工作
可变值。在本例中,它不适用于 dicomo和capi都可以作为调用矩的一致框架
它们本身,或它们的线性组合。让我们从
数据: 现在计算一些力矩,并将它们与 同样:共矩 这些只是集合中的一些选项,可以在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 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_
sklearn
和ppdre
'sx嫒scores嫒u和
x嫒loadings
可能有相反的迹象,
然而,系数和拟合响应应该是相同的。稳健投影寻踪估计
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')
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)
alpha
调整多个
通过PLS(alpha
->;0)回归到PCR(alpha
=1)。当然,
robust pls选项也可以通过pi_arguments={'mode':'cov'},trimming=.1
投影寻踪广义betas
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
将在不压缩的情况下继续。独立调用投影索引
0
pip install ppdire
numpy进行比较
1
pip install ppdire
2
pip install ppdire
dicomo
参考文献
要做的工作
sklearn
推荐PyPI第三方库