稀疏部分稳健m回归,包括图函数
sprm的Python项目详细描述
稀疏部分稳健m回归
scikit learn compatible python 3 package for sparse partial robust m regeresion(sprm)[1],一个稀疏且健壮的单变量偏最小二乘(pls1)版本。
说明
该方法在一个一致的估计值中同时执行四个任务:
- 回归:产生回归系数并预测响应
- 降维:以稳健的方式计算可解释的类pls分量,最大化预测的协方差
- 变量选择:根据参数设置,可以生成包含精确零元素的高度稀疏回归系数
- 异常值检测和补偿:在[0,1]中生成一组事例权重。重量越轻,箱子越远。估计本身是异常稳健的。
注:此包中包含的所有方法都是为连续数据设计的。它们不能正确处理语法或文本数据。
代码与scikitlearn对齐,这样gridsearchcv等模块就可以完美地应用于它。
存储库包含
- 估计器(
sprm.py
) - 基于matplotlib的绘图功能(
sprm_plot.py
) - 强大的数据预处理(
robcent.py
) - 稀疏nipals(snipls)估计量(
snipls.py
) - 稳健m回归估计器(
rm.py
) - 绘图的辅助功能(
_plot_internals.py
) - m估计的辅助函数(
\u m_support\u functions.py
)
如何安装
软件包是通过pypi分发的,因此请通过:
pip install sprm
sprm估计量
主要的sprm实现产生一个具有以下结构的类:
依赖关系
- 从
<;sklearn.base>;
:baseEstimator、transformerMixin、regressorMixin
- 从
<;sklearn.utils>;
:\u basecomposition
复制
- 从
<;scipy.stats>;
:norm,chi2
numpy
- 从
<;matplotlib>;
:pyplot
- 从
<;statsmodels>;
:健壮
参数
eta
:浮点。[0,1]中的稀疏性参数。请注意,eta=0
返回非稀疏但稳健的部分稳健m-回归(prm)[2]。n_组件
:int>;1.注意,如果应用于数据,n_组件
应取一个值<;=min(x_data.shape)fun
:str,降权函数。'hampel'
(推荐)、'fair'
或'huber'
probb1
:浮点,开始向下加权的概率截止(例如0.95)probp2
:浮动,开始陡降权重的概率截止值(例如0.975,仅在fun='hampel'
时相关)probb3
:float,异常值遗漏开始的概率截止值(例如0.999,仅在fun='hampel'
时相关)居中
:str,居中类型('mean'
或'median'
,建议后者)缩放
:str,缩放类型('std'
,'mad'
,后者推荐,或'none'
)详细
:布尔值,指定详细模式maxit
:int,m算法的最大迭代次数tol
:浮点,m算法的收敛公差开始切断模式
:str,value"specific"
将设置特定于x和y的起始值切断(首选);任何其他值将设置相同的x和y表示切断。非特定设置产生与sprm相同的结果r实现可从cran获得start_x_init
:str,values'pcapp'
将包括pca/断棍投影以计算初始预测块大小写权重;任何其他值将仅基于该块内的欧几里得距离计算初始预测块大小写权重。对于非常平坦的数据(p>;gt;n),不太稳定。列
(deffalse
):布尔索引或熊猫索引。如果false
,则不提供列名。如果索引(仅采用长度x_data.shape[1]
),则此列表中提供的x_数据的列名将以详细模式打印出来复制
(deftrue
):布尔值,是否在计算过程中创建数据的深度复制
属性
x_weights:x块pls加权向量(通常表示为w)
x加载
:x块pls加载向量(通常表示为p)c
:响应与潜在变量之间内在关系的向量block rex_分数
:x块pls分数向量(通常表示为t)系数:回归系数向量
截距
:截距系数缩放:缩放回归系数的向量(使用缩放选项时)
按比例截距
:按比例截距残差
:回归残差向量x ev
:x块解释了每个组件的方差y ev
:y块解释方差已安装
:已安装响应x rweights:x block simples样式的加权向量(通常表示为r)
x机箱重量
:x块机箱重量y\u大小写权重
:y块大小写权重案例权重:组合案例权重
colret
:稀疏模型中保留的变量名
x锁定
:x块位置估计y本地
:y位置估计x_scau
:x块比例估计值y_scau
:y比例估计值非零标度变量:非零标度x中变量的指示向量
方法
适合(x,y)
:适合型号预测(x)
:根据拟合进行预测转换(x)
:将x投影到潜在空间上权重newx(x)
:计算x大小写权重getattr()
:获取属性列表setattr(**kwargs)
:设置SPRM对象的个别属性valscore(x,y,scoring)
:如果scoring=weighted,则在交叉验证中使用加权评分功能的选项
辅助功能
snipls
(类):稀疏nipals回归(在[3]中首次描述)hampel
:hampel weight函数huber
:huber权重函数公平
:公平权重函数broken stick
:估计相关主成分数量的断棒规则robcent
(类):强大的居中和缩放功能
示例
运行玩具示例:
源包和数据:
import pandas as ps data = ps.read_csv("./Returns_shares.csv") columns = data.columns[2:8] data = data.values[:,2:8] X = data[:,0:5] y = data[:,5] X0 = X.astype('float') y0 = y.astype('float')
用sprm进行估计和预测
from sprm import sprm res_sprm = sprm(2,.8,'Hampel',.95,.975,.999,'median','mad',True,100,.01,'ally','xonly',columns,True) res_sprm.fit(X0[:2666],y0[:2666]) res_sprm.predict(X0[2666:]) res_sprm.transform(X0[2666:]) res_sprm.weightnewx(X0[2666:]) res_sprm.get_params() res_sprm.set_params(fun="Huber")
使用gridsearchcv进行交叉验证:
import numpy as np from sklearn.model_selection import GridSearchCV res_sprm_cv = GridSearchCV(sprm(), cv=10, param_grid={"n_components": [1, 2, 3], "eta": np.arange(.1,.9,.05).tolist()}) res_sprm_cv.fit(X0[:2666],y0[:2666]) res_sprm_cv.best_params_
稳健m(rm)估计
rm的实现与sprm一致。它接受相同的参数,除了eta
和n_组件之外,
因为它不执行降维或变量选择。出于同样的原因,输出仅限于回归
输出。因此,降维输出如下<不提供"代码>x_分数"
,"代码>x_加载"等。
按rm估算和预测:
from sprm import rm
res_rm = rm('Hampel',.95,.975,.999,'median','mad','specific',True,100,.01,columns,True)
res_rm.fit(X0[:2666],y0[:2666])
res_rm.predict(X0[2666:])
稀疏nipals(snipls)估计量
snipls是非稳健稀疏单变量pls算法[3]。SNIPLS的实施与SPRM一致。它采用相同的参数,除了"fun"和"probb1"到"probb3",因为这些是健壮性参数。出于同样的原因,输出仅限于稀疏降维和回归输出。无法提供与稳健性相关的输出,如x_caseweights。
通过snipls进行估计和预测:
from sprm import snipls
res_snipls = snipls(n_components=4, eta=.5)
res_snipls.fit(X0[:2666],y0[:2666])
res_snipls.predict(X0[2666:])
绘图功能
文件sprm_plot.py
包含一组基于matplotlib的绘图函数。类sprm_绘图包含sprm对象的绘图,而类sprm_绘图包含交叉验证的绘图。
依赖关系
- 熊猫
- 努比
- matplotlib.pyplot
- 用于绘制交叉验证结果:sklearn.model_selection.gridSearchCv
参数
res_sprm
,存储过程。已安装的SPRM类对象。颜色
,str条目列表。仅强制输入。元素确定颜色为:- [0]:窗格的边框
- [1]:绘图背景
- [2]:标记填充
- [3]:对角线
- [4]:标记轮廓,如果不同于填充
- [5]:适用于新病例的标记颜色
- [6]:粗糙校准异常值的标记颜色
- [7]:粗糙预测异常值的标记颜色
标记
,str条目的列表。元素确定标记:- [0]:普通病例
- [1]:中等异常值
- [2]:粗糙异常值
方法
- plot_coefs(entity="coef_u",truncation=0,columns=[],title=[]):绘制回归系数、荷载等,仅用于绘制x%最小系数和largets系数(truncation)
- plot_yyp(ytruev=[],xn=[],label=[],names=[],namesv=[],title=[],legend_pos='右下角',onlyval=false):plot y vs y predicted。
- plot_projections(xn=[]、label=[]、components=[0,1]、names=[]、namesv=[]、title=[]、legend_pos='lower right',onlyval=false):plot score space。
- plot_caseWeights(xn=[]、label=[]、names=[]、namev=[]、title=[]、legend_pos='右下角',onlyval=false,mode='整体'):plot caseWeights,可选择为用于训练模型的案例绘制"x"、"y"或"整体"案例权重。对于新情况,只能绘制"x"权重。
备注
后3种方法既适用于模型已经过训练(没有额外输入)的情况,也适用于新的情况(需要xn,如果是plot-ypp,则为ytruev),并且只打印后者(选项onlyval=true)。如果作为列表提供,所有三个函数都可以选择打印案例名称。
辅助类
sprm_plot_cv
有方法eta_ncomp_contour(title)来绘制sklearn gridsearchcv结果- abline2d绘制y与y预测图中的第一个对角线。
示例(续)
初始化一些值:
colors = ["white","#BBBBDD","#0000DD",'#1B75BC','#4D4D4F','orange','red','black'] markers = ['o','d','v'] label = ["AIG"] names = [str(i) for i in range(1,len(res_sprm.y)+1)] namesv = [str(i) for i in range(1,len(y0[2667:])+1)]
运行sprm.plot:
from sprm import sprm_plot res_sprm_plot = sprm_plot(res_sprm,colors)
绘图系数:
res_sprm_plot.plot_coeffs(title="All AIG SPRM scaled b") res_sprm_plot.plot_coeffs(truncation=.05,columns=columns,title="5% smallest and largest AIG sprm b")
曲线图Y与Y预测,仅训练案例:
0pip install sprm
预测的y与y曲线图,包括测试用例
1pip install sprm
曲线y与y预测,仅测试集情况:
2pip install sprm
绘图分数空间,选项如上,第二个选项显示在此处:
3pip install sprm
绘制大小写,选项如上,第二个选项显示在此处:
4pip install sprm
绘制交叉验证结果:
5pip install sprm
参考文献
- 稀疏部分稳健m回归,艾琳·霍夫曼,斯文·塞内尔斯,彼得·菲尔茨莫尔,克里斯托夫·克劳克斯,《化学计量学与智能实验室系统》,149(2015),50-59。
- 部分稳健M回归,斯文·塞内尔斯,克里斯托夫·克劳克斯,彼得·菲茨莫瑟,皮埃尔·范·埃斯彭,化学计量学与智能实验室系统,79(2005),55-64。
- 二元分类的稀疏稳健pls,i.hoffmann,p.filzmoser,s.serneels,k.varmuza,《化学计量学杂志》,30(2016),153-162。 < > >
- sprm现在同时接受数值(n,1)np矩阵和(n,)np数组作为输入
所有功能现在都可以以模块化的方式加载,例如,要使用绘图功能,现在可以单独获取绘图功能:
6pip install sprm
该软件包现在包括一个稳健的m回归估计器(rm.py),它是sprm的一个纯多元回归变量。 它基于相同的迭代重加权方案,既不进行降维,也不进行变量选择。
重新编写了健壮的预处理例程(robcent.py),以便与sklearn更加一致。
- 优化与sklearn的对齐
- 优化速度
- 扩展到多变量响应(开放研究主题!)
- 欢迎提出建议
发行说明
0.2.1版
0.2.0版
与版本0.1相比的更改:
版本0.3
这三个估计器在模块中作为单独的类提供:
pip install sprm
7
此外,sprm现在还包括对零刻度的检查。它将从输入数据中删除零标度变量,并且只使用 与新数据中的非零预测器刻度相对应的列。此支票尚未为SNIPLS或RM内置 分开。
再加上一些小改动,使其与最新的numpy和matplotlib版本保持一致。