类 GWRBasic

继承关系

基类

派生类

类文档

class GWRBasic : public gwm::GWRBase, public gwm::IBandwidthSelectable, public gwm::IVarialbeSelectable, public gwm::IParallelizable, public gwm::IParallelOpenmpEnabled, public gwm::IParallelCudaEnabled, public gwm::IParallelMpiEnabled

基础地理加权回归算法的实现。 该算法可以自动选带宽和变量。 该算法可以通过 OpenMP 加速。

Subclassed by gwm::GWRRobust

公有类型

enum BandwidthSelectionCriterionType

用于带宽优选的指标类型。

Values:

enumerator AIC

AIC

enumerator CV

CV

typedef arma::mat (GWRBasic::* PredictCalculator)(const arma::mat&, const arma::mat&, const arma::vec&)

预测函数声明。

typedef arma::mat (GWRBasic::* FitCalculator)()

拟合函数声明。

typedef arma::mat (GWRBasic::* FitCoreCalculator)(const arma::mat&, const arma::vec&, const SpatialWeight&)

拟合函数声明。

typedef arma::mat (GWRBasic::* FitCoreSHatCalculator)(const arma::mat&, const arma::vec&, const SpatialWeight&, arma::vec&)

拟合函数声明。

typedef arma::mat (GWRBasic::* FitCoreCVCalculator)(const arma::mat&, const arma::vec&, const SpatialWeight&)

拟合函数声明。

typedef double (GWRBasic::* BandwidthSelectionCriterionCalculator)(const std::unique_ptr<BandwidthWeight>&)

带宽优选指标计算函数声明。

typedef double (GWRBasic::* IndepVarsSelectCriterionCalculator)(const std::vector<std::size_t>&)

变量优选指标计算函数声明。

公有方法

inline GWRBasic()

构造 CGwmGWRBasic 对象。

inline GWRBasic(const arma::mat &x, const arma::vec &y, const arma::mat &coords, const SpatialWeight &spatialWeight, bool hasHatMatrix = true, bool hasIntercept = true)

构造 CGwmGWRBasic 对象。

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

  • y -- 因变量。

  • coords -- 坐标矩阵。

  • spatialWeight -- 空间权重配置。

  • hasHatMatrix -- 是否计算帽子矩阵。

  • hasIntercept -- 是否有截距。

inline ~GWRBasic()

析构 CGwmGWRBasic 对象。

inline bool isAutoselectBandwidth() const

获取是否自动优选带宽。

返回:

true 如果自动优选带宽。

返回:

false 如果不自动优选带宽。

inline void setIsAutoselectBandwidth(bool isAutoSelect)

设置是否自动优选带宽。

参数:

isAutoSelect -- true 如果要自动优选带宽,否则 false。

inline BandwidthSelectionCriterionType bandwidthSelectionCriterion() const

获取带宽自动优选指标值类型。

返回:

BandwidthSelectionCriterionType 带宽自动优选指标值类型。

void setBandwidthSelectionCriterion(const BandwidthSelectionCriterionType &criterion)

设置带宽自动优选指标值类型。

参数:

criterion -- 带宽自动优选指标值类型。

inline void setGoldenUpperBounds(double value)

设置 Golden selection 算法的上界。

参数:

value --

inline void setGoldenLowerBounds(double value)

设置 Golden selection 算法的下界。

参数:

value --

inline bool isAutoselectIndepVars() const

获取是否自动优选变量。

返回:

true 如果自动优选变量。

返回:

false 如果不自动优选变量。

inline void setIsAutoselectIndepVars(bool isAutoSelect)

设置是否自动优选变量。

参数:

isAutoSelect -- true 如果要自动优选变量,否则 false。

inline double indepVarSelectionThreshold() const

获取变量优选指标类型。

返回:

double 变量优选指标类型。

inline void setIndepVarSelectionThreshold(double threshold)

设置变量优选指标类型。

参数:

threshold -- 变量优选指标类型。 该值的大小取决于样本的数量。 样本数量越多,值越大。

inline const VariablesCriterionList &indepVarsSelectionCriterionList() const

获取变量优选过程的指标值列表。

返回:

VariablesCriterionList 变量优选过程的指标值列表。

inline const BandwidthCriterionList &bandwidthSelectionCriterionList() const

获取带宽优选过程的指标值列表。

返回:

BandwidthCriterionList 带宽优选过程的指标值列表。

inline bool hasHatMatrix() const

获取是否计算帽子矩阵。

返回:

true 如果计算帽子矩阵。

返回:

false 如果不计算帽子矩阵。

inline void setHasHatMatrix(const bool has)

设置是否计算帽子矩阵。

参数:

has -- true 如果计算帽子矩阵,否则 false。

inline const arma::mat &betasSE()

获取回归系数估计值的标准差。

返回:

arma::mat 回归系数估计值的标准差。

inline const arma::vec &sHat()

获取一个由 \(tr(S)\)\(tr(SS^T)\) 组成的向量。

返回:

arma::vec 由 \(tr(S)\)\(tr(SS^T)\) 组成的向量。

inline const arma::vec &qDiag()

获取矩阵 \(Q\) 的对角线元素。

返回:

arma::vec 矩阵 \(Q\) 的对角线元素。

inline const arma::mat &s()

获取帽子矩阵 \(S\)

返回:

arma::mat 帽子矩阵 \(S\)

inline const arma::cube &c()
inline bool isStoreS()

是否保存帽子矩阵 \(S\).

返回:

true 如果保存帽子矩阵。

返回:

false 如果不保存帽子矩阵。

inline bool isStoreC()
inline void setStoreS(bool flag)
inline void setStoreC(bool flag)
virtual bool isValid() override

检查算法配置是否合法。

返回:

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

返回:

false 如果算法配置不合法。

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

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

参数:

locations -- 指定位置。

返回:

mat 回归系数预测值。

virtual arma::mat fit() override

拟合回归系数估计值。

返回:

mat 回归系数估计值。

inline Status getCriterion(const std::vector<size_t> &variables, double &criterion) override
inline virtual std::vector<std::size_t> selectedVariables() override

获取优选的变量。

返回:

std::vector<std::size_t> 优选的变量。

double indepVarsSelectionCriterion(const std::vector<std::size_t> &indepVars)

根据指定的变量计算变量优选的AIC值(串行实现)。

参数:

indepVars -- 指定的变量。

返回:

double 变量优选的指标值。

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

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

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

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

  • Status -- 算法运行状态。

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

根据指定的带宽计算带宽优选的CV值(串行实现)。

参数:

bandwidthWeight -- 指定的带宽。

返回:

double 带宽优选的指标值。

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

根据指定的带宽计算带宽优选的AIC值(串行实现)。

参数:

bandwidthWeight -- 指定的带宽。

返回:

double 带宽优选的指标值。

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<BandwidthSelectionCriterionType, std::string> BandwidthSelectionCriterionTypeNameMapper

保护方法

void createPredictionDistanceParameter(const arma::mat &locations)

生成用于预测的距离参数。

参数:

locations -- 用于预测的距离参数。

保护属性

bool mHasHatMatrix = true

是否具有帽子矩阵。

bool mHasFTest = false

待办事项:

是否具有F检验。

bool mHasPredict = false

弃用:

是否有预测位置处的变量。

bool mIsAutoselectIndepVars = false

是否自动优选变量。

double mIndepVarSelectionThreshold = 3.0

变量优选的阈值。

IndepVarsSelectCriterionCalculator mIndepVarsSelectionCriterionFunction = &GWRBasic::indepVarsSelectionCriterion

变量优选的指标计算函数。

VariablesCriterionList mIndepVarsSelectionCriterionList

每种变量组合对应的指标值。

std::vector<std::size_t> mSelectedIndepVars

优选得到的变量。

std::size_t mIndepVarSelectionProgressTotal = 0

自变量所有组合总数。

std::size_t mIndepVarSelectionProgressCurrent = 0

当前自变量优选的进度。

bool mIsAutoselectBandwidth = false

是否自动优选带宽。

BandwidthSelectionCriterionType mBandwidthSelectionCriterion = BandwidthSelectionCriterionType::AIC

带宽优选的指标值类型。

BandwidthSelectionCriterionCalculator mBandwidthSelectionCriterionFunction = &GWRBasic::bandwidthSizeCriterionCV

带宽优选的指标计算函数。

BandwidthCriterionList mBandwidthSelectionCriterionList

每种带宽组合对应的指标值。

double mBandwidthLastCriterion = DBL_MAX

上一次带宽优选的有效指标值。

std::optional<double> mGoldenUpperBounds
std::optional<double> mGoldenLowerBounds
PredictCalculator mPredictFunction = &GWRBasic::predictSerial

预测的具体实现函数。

FitCalculator mFitFunction = &GWRBasic::fitBase

拟合的具体实现函数。

FitCoreCalculator mFitCoreFunction = &GWRBasic::fitCoreSerial

拟合的具体实现函数。

FitCoreSHatCalculator mFitCoreSHatFunction = &GWRBasic::fitCoreSHatSerial

拟合的具体实现函数。

FitCoreCVCalculator mFitCoreCVFunction = &GWRBasic::fitCoreCVSerial

拟合的具体实现函数。

ParallelType mParallelType = ParallelType::SerialOnly

并行方法类型。

int mOmpThreadNum = 8

并行计算创建的线程数。

size_t mGroupLength = 64

同时计算的一组的大小。

int mGpuId = 0

选择的 GPU 的 ID。

int mWorkerId = 0
int mWorkerNum = 1
arma::uword mWorkRangeSize = 0
std::pair<arma::uword, arma::uword> mWorkRange = std::make_pair(arma::uword(0), arma::uword(0))
arma::mat mBetasSE

回归系数估计值的标准差。

arma::vec mSHat

\(tr(S)\)\(tr(SS^T)\) 组成的向量。

arma::vec mQDiag

矩阵 \(Q\) 的对角线元素。

arma::mat mS

帽子矩阵 \(S\)

arma::cube mC

所有 \(C\) 矩阵。

bool mStoreS = false

是否保存 S 矩阵

bool mStoreC = false

是否保存 C 矩阵