稀疏部分稳健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 re
  • x_分数: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一致。它接受相同的参数,除了etan_组件之外, 因为它不执行降维或变量选择。出于同样的原因,输出仅限于回归 输出。因此,降维输出如下<不提供"代码>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")
    

    aig sprm回归系数

  • 曲线图Y与Y预测,仅训练案例:

        pip install sprm 
    
    0

    aig sprm y vs y predicted,taining set

  • 预测的y与y曲线图,包括测试用例

        pip install sprm 
    
    1

    aig sprm y vs y predicted,taining set

  • 曲线y与y预测,仅测试集情况:

        pip install sprm 
    
    2
  • 绘图分数空间,选项如上,第二个选项显示在此处:

        pip install sprm 
    
    3

    aig sprm score space

  • 绘制大小写,选项如上,第二个选项显示在此处:

        pip install sprm 
    
    4

    aig sprm casewweights

  • 绘制交叉验证结果:

        pip install sprm 
    
    5

    aig sprm cv results

参考文献

  1. 稀疏部分稳健m回归,艾琳·霍夫曼,斯文·塞内尔斯,彼得·菲尔茨莫尔,克里斯托夫·克劳克斯,《化学计量学与智能实验室系统》,149(2015),50-59。
  2. 部分稳健M回归,斯文·塞内尔斯,克里斯托夫·克劳克斯,彼得·菲茨莫瑟,皮埃尔·范·埃斯彭,化学计量学与智能实验室系统,79(2005),55-64。
  3. 二元分类的稀疏稳健pls,i.hoffmann,p.filzmoser,s.serneels,k.varmuza,《化学计量学杂志》,30(2016),153-162。
  4. < > >

    发行说明

    0.2.1版

    • sprm现在同时接受数值(n,1)np矩阵和(n,)np数组作为输入

    0.2.0版

    与版本0.1相比的更改:

    • 所有功能现在都可以以模块化的方式加载,例如,要使用绘图功能,现在可以单独获取绘图功能:

          pip install sprm 
      
      6
    • 该软件包现在包括一个稳健的m回归估计器(rm.py),它是sprm的一个纯多元回归变量。 它基于相同的迭代重加权方案,既不进行降维,也不进行变量选择。

    • 重新编写了健壮的预处理例程(robcent.py),以便与sklearn更加一致。

    版本0.3

    这三个估计器在模块中作为单独的类提供:

        pip install sprm 
    
    7

    此外,sprm现在还包括对零刻度的检查。它将从输入数据中删除零标度变量,并且只使用 与新数据中的非零预测器刻度相对应的列。此支票尚未为SNIPLS或RM内置 分开。

    再加上一些小改动,使其与最新的numpy和matplotlib版本保持一致。

    要做的工作

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

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

    推荐PyPI第三方库


热门话题
java如何在windows上向doclet添加多个sourcepath?   java谷歌地图应用程序   java为以下场景创建正则表达式   Java文件通道异常   Java集合如何将文件对象列表转换为路径对象列表?   多线程生产者/消费者模型使用Java(同步),但始终运行同一线程   java如何为存储在ArrayList中的特定属性设置值?   java一次不能加载多个osm文件   使用java 8将map<String,map<Long,customeObject>>转换为list<customeObject>   java JDK包含哪些脚本语言解释器?   java为什么eclipse在这里生成语法错误?   多线程Javasocket异常:socket已关闭且值为空   java我想在Android活动中创建一个带有图像的可滚动文本列表。我应该用什么?   java实现编译时警告   java根据安卓 SQLite数据库中前一行的相同值递增特定值   java移动迭代器语句使代码可编译   java JVM终身/旧代已达到限制&服务器挂起   为什么我们不能在映射上使用迭代器(Java)?   xml如何映射JAXB中已有的JavaBean