类 GWRMultiscale

继承关系

基类

类文档

class GWRMultiscale : public gwm::SpatialMultiscaleAlgorithm, public gwm::IBandwidthSelectable, public gwm::IRegressionAnalysis, public gwm::IParallelizable, public gwm::IParallelOpenmpEnabled, public gwm::IParallelCudaEnabled, public gwm::IParallelMpiEnabled

多尺度GWR算法

公有类型

enum BandwidthInitilizeType

带宽初始值类型。

Values:

enumerator Null
enumerator Initial
enumerator Specified
enum BandwidthSelectionCriterionType

带宽选择指标类型。

Values:

enumerator CV
enumerator AIC
enum BackFittingCriterionType

后向迭代算法收敛指标值类型。

Values:

enumerator CVR
enumerator dCVR
typedef double (GWRMultiscale::* BandwidthSizeCriterionFunction)(const std::unique_ptr<BandwidthWeight>&)

根据指定带宽大小计算对应指标值的函数。

typedef arma::vec (GWRMultiscale::* FitVarFunction)(const size_t)

根据给定变量拟合模型的函数。

typedef arma::vec (GWRMultiscale::* FitVarCoreFunction)(const arma::vec&, const arma::vec&, const SpatialWeight&, arma::mat&)

根据给定变量拟合模型的函数。

typedef arma::vec (GWRMultiscale::* FitVarCoreCVFunction)(const arma::vec&, const arma::vec&, const SpatialWeight&)

根据给定变量拟合模型的函数。

typedef arma::vec (GWRMultiscale::* FitVarCoreSHatFunction)(const arma::vec&, const arma::vec&, const SpatialWeight&, arma::vec&)

根据给定变量拟合模型的函数。

公有成员函数

inline GWRMultiscale()

构造一个新的 GWRMultiscale 对象。

inline GWRMultiscale(const arma::mat &x, const arma::vec &y, const arma::mat &coords, const std::vector<SpatialWeight> &spatialWeights)

构造一个新的 GWRMultiscale 对象。

参数:
  • x -- 自变量矩阵。

  • y -- 因变量。

  • coords -- 坐标矩阵。

  • spatialWeights -- 空间权重配置。

inline virtual ~GWRMultiscale()

销毁 GWRMultiscale 对象。

inline void setGoldenUpperBounds(double value)

设置 Golden selection 算法的上界。

参数:

value --

inline void setGoldenLowerBounds(double value)

设置 Golden selection 算法的下界。

参数:

value --

inline const std::vector<BandwidthInitilizeType> &bandwidthInitilize() const

获取带宽初始化值类型。

返回:

std::vector<BandwidthInitilizeType> 带宽初始化值类型。

void setBandwidthInitilize(const std::vector<BandwidthInitilizeType> &bandwidthInitilize)

设置带宽初始化值类型。

参数:

bandwidthInitilize -- 带宽初始化值类型。

inline const std::vector<BandwidthSelectionCriterionType> &bandwidthSelectionApproach() const

获取带宽选择方法。

返回:

std::vector<BandwidthSelectionCriterionType> 带宽选择方法。

void setBandwidthSelectionApproach(const std::vector<BandwidthSelectionCriterionType> &bandwidthSelectionApproach)

设置带宽选择方法。

参数:

bandwidthSelectionApproach -- 带宽选择方法。

inline const std::vector<bool> &preditorCentered() const

获取是否中心化变量。

返回:

std::vector<bool> 是否中心化变量。

inline void setPreditorCentered(const std::vector<bool> &preditorCentered)

设置是否中心化自变量。

参数:

preditorCentered -- 是否中心化自变量。

inline const std::vector<double> &bandwidthSelectThreshold() const

获取带宽选择阈值。

返回:

std::vector<double> 带宽选择阈值。

inline void setBandwidthSelectThreshold(const std::vector<double> &bandwidthSelectThreshold)

设置带宽选择阈值。

参数:

bandwidthSelectThreshold -- 带宽选择阈值。

inline bool hasHatMatrix() const

获取是否有帽子矩阵 \(S\)

返回:

true 有帽子矩阵。

返回:

false 没有帽子矩阵。

inline void setHasHatMatrix(bool hasHatMatrix)

设置是否有帽子矩阵 \(S\)

参数:

hasHatMatrix -- 是否有帽子矩阵 \(S\)

inline size_t bandwidthSelectRetryTimes() const

获取优选带宽时的最大重试次数。

返回:

size_t 优选带宽时的最大重试次数。

inline void setBandwidthSelectRetryTimes(size_t bandwidthSelectRetryTimes)

设置优选带宽时的最大重试次数。

参数:

bandwidthSelectRetryTimes -- 优选带宽时的最大重试次数。

inline size_t maxIteration() const

获取最大迭代次数。

返回:

size_t 最大迭代次数。

inline void setMaxIteration(size_t maxIteration)

设置最大迭代次数。

参数:

maxIteration -- 最大迭代次数。

inline BackFittingCriterionType criterionType() const

获取后向迭代算法收敛指标值类型。

返回:

BackFittingCriterionType 后向迭代算法收敛指标值类型。

inline void setCriterionType(const BackFittingCriterionType &criterionType)

设置后向迭代算法收敛指标值类型。

参数:

criterionType -- 后向迭代算法收敛指标值类型。

inline double criterionThreshold() const

获取指标收敛阈值。

返回:

double 指标收敛阈值。

inline void setCriterionThreshold(double criterionThreshold)

设置指标收敛阈值。

参数:

criterionThreshold -- 指标收敛阈值。

inline int adaptiveLower() const

获取优选可变带宽优选下限值。

返回:

int 优选可变带宽优选下限值。

inline void setAdaptiveLower(int adaptiveLower)

设置优选可变带宽优选下限值。

参数:

adaptiveLower -- 优选可变带宽优选下限值。

inline const arma::mat &betas() const

获取回归系数估计值 \(\beta\)

返回:

arma::mat 回归系数估计值 \(\beta\)

BandwidthSizeCriterionFunction bandwidthSizeCriterionVar(BandwidthSelectionCriterionType type)

获取单个变量带宽优选的指标值计算函数。

参数:

type -- 单个变量带宽优选的指标值类型。

返回:

BandwidthSizeCriterionFunction 单个变量带宽优选的指标值计算函数。

virtual bool isValid() override

检查算法配置是否合法。

返回:

true 如果算法配置是合法的。

返回:

false 如果算法配置不合法。

virtual void setSpatialWeights(const std::vector<SpatialWeight> &spatialWeights) override

Set the spatial weight configuration.

Use gwmodel_set_gwr_spatial_weight() to set this property to GWRBasic in shared build.

Use gwmodel_set_gwss_spatial_weight() to set this property to GWSS in shared build.

参数:

spatialWeights -- Reference of spatial weight configuration object.

inline virtual Status getCriterion(const std::unique_ptr<BandwidthWeight> &weight, double &criterion) override

根据指定的带宽计算带宽优选的指标值。

参数:
  • weight -- 指定的带宽。

  • criterion -- [出参] 带宽优选的指标值。

  • Status -- 算法运行状态。

inline virtual const arma::vec &dependentVariable() const override

获取因变量。

返回:

arma::vec 因变量。

inline virtual void setDependentVariable(const arma::vec &y) override

设置因变量。

参数:

y -- 因变量。

inline virtual const arma::mat &independentVariables() const override

获取自变量。

返回:

arma::mat 自变量。

inline virtual void setIndependentVariables(const arma::mat &x) override

设置自变量。

参数:

x -- 自变量。

inline virtual bool hasIntercept() const override

获取是否具有截距。

返回:

true 如果有截距。

返回:

false 如果没有截距。

inline virtual void setHasIntercept(const bool has) override

Set the Has Intercept object.

参数:

has -- 如果有截距则传入 true ,否则传入 false 。

inline virtual RegressionDiagnostic diagnostic() const override

获取诊断信息。

返回:

RegressionDiagnostic 诊断信息。

inline virtual arma::mat predict(const arma::mat &locations) override

在指定位置处进行回归系数预测。

参数:

locations -- 指定位置。

返回:

mat 回归系数预测值。

virtual arma::mat fit() override

拟合回归系数估计值。

返回:

mat 回归系数估计值。

inline virtual int parallelAbility() const override

返回该算法的并行能力。

返回:

当前算法并行能力的按位或运算结果。

inline virtual ParallelType parallelType() const override

返回当前算法的并行类型。

返回:

当前算法的并行类型。

virtual void setParallelType(const ParallelType &type) override

设置当前算法的并行类型。

参数:

type -- 当前算法的并行类型。

inline virtual void setOmpThreadNum(const int threadNum) override

设置并行线程数。

参数:

threadNum -- 并行线程数。

inline virtual void setGPUId(const int gpuId) override

设置并行化使用的 GPU 的 ID。

参数:

gpuId -- 并行化使用的 GPU 的 ID。 从 0 开始。

inline virtual void setGroupSize(const std::size_t size) override

Set the group size while paralleling.

参数:

size -- 并行化时的组长度 \(g\)。 通常取决于 gpuID 对应显卡的显存 \(m\) (B)。 如果有 \(n\) 样本和 \(k\) 变量, 要求

\[ k * n * g * 8 < m \]
。 对于大多数 GPU 可选择值 64。

inline virtual int workerId() override
inline virtual void setWorkerId(int id) override
inline virtual void setWorkerNum(int size) override

公有静态属性

static std::unordered_map<BandwidthInitilizeType, std::string> BandwidthInitilizeTypeNameMapper

带宽初始值类型到其名称的映射表。

static std::unordered_map<BandwidthSelectionCriterionType, std::string> BandwidthSelectionCriterionTypeNameMapper

带宽选择指标类型到其名称的映射表。

static std::unordered_map<BackFittingCriterionType, std::string> BackFittingCriterionTypeNameMapper

后向迭代算法收敛指标类型到其名称的映射表。

static int treeChildCount

保护成员函数

inline BandwidthWeight &bandwidth(size_t i)

获取第 \(i\) 个带宽。

参数:

i -- 带宽索引值。

返回:

BandwidthWeight* 第 \(i\) 个带宽。

arma::mat fitInitial()
arma::mat backfitting(const arma::mat &betas0)

后向迭代算法。

参数:
  • x -- 自变量矩阵 \(X\)

  • y -- 因变量 \(y\)

返回:

arma::mat 回归系数估计值 \(\beta\)

arma::vec fitVarBase(const size_t var)
double bandwidthSizeCriterionVarCVBase(const std::unique_ptr<BandwidthWeight> &bandwidthWeight)

为指定带宽值和某个变量计算CV指标值函数的非并行实现。

参数:

bandwidthWeight -- 带宽值。

返回:

double CV指标值。

double bandwidthSizeCriterionVarAICBase(const std::unique_ptr<BandwidthWeight> &bandwidthWeight)

为指定带宽值和某个变量计算AIC指标值函数的非并行实现。

参数:

bandwidthWeight -- 带宽值。

返回:

double AIC指标值。

arma::vec fitVarCoreSerial(const arma::vec &x, const arma::vec &y, const SpatialWeight &sw, arma::mat &S)

拟合单个变量的非并行实现。

参数:
  • x -- 自变量矩阵 \(X\)

  • y -- 因变量 \(y\)

  • var -- 当前变量的索引值。

  • S -- 帽子矩阵 \(S\)

返回:

arma::vec 该变量对应的回归系数估计值。

arma::vec fitVarCoreCVSerial(const arma::vec &x, const arma::vec &y, const SpatialWeight &sw)
arma::vec fitVarCoreSHatSerial(const arma::vec &x, const arma::vec &y, const SpatialWeight &sw, arma::vec &shat)