自用库接口说明
regression
| 1 | from ulab import regression | 
这个库增添了Ridge以及相关的实用函数。
1 Ridge
| 1 | class Ridge(alpha=1.0,fit_interception=True) | 
Ridge 回归通过对系数大小施加惩罚来解决普通最小二乘法的一些问题。alpha值越大,收缩量越大,因此系数对共线性变得更加鲁棒。alpha 必须是非负浮点数,取值范围 [0, inf) 。当 alpha = 0 时,目标相当于普通最小二乘法,当特征矩阵
fit_interception参数决定了是否添加截距项。如果设置为False,则在计算中不会使用截距(即True。
methods
fit
| 1 | def fit(self, X: ndarray, y: ndarray) -> None | 
拟合岭回归模型。
predict
| 1 | def predict(self, X: ndarray) -> ndarray | 
使用线性模型进行预测。返回预测结果。
get_sse
| 1 | def get_sse(self, X: ndarray,y: ndarray) -> float | 
计算残差平方和SSE。公式:
get_sst
| 1 | def get_sst(self, y: ndarray) -> float | 
计算总离差平方和SST。公式:
get_r2score
| 1 | def get_r2score(self, X: ndarray,y: ndarray) -> float | 
计算决定系数
get_t_val
| 1 | def get_t_val(self, X: ndarray,y: ndarray) -> (list, ndarray) | 
根据X,y和拟合参数self.coef_计算t检验值。它表示拟合参数的显著性水平。
在OLS模型下,我们假设拟合参数服从
代码实现中,原假设
函数返回对应参数的t统计量值列表和SE。
函数一定要在fit后使用,否则self.coef_为None,则会报错。
| 1 | ridge = regression.Ridge(alpha=1, fit_intercept=False) | 
Attributes
coef_
| 1 | Ridge.coef_ | 
权重向量。
intercept_
| 1 | Ridge.intercept_ | 
截距项,如果设置fit_interception=False,则永远为0。
tools
| 1 | from ulab import tools | 
这个模块增加了ulab下numpy缺少的实用函数。
1 fillnan
| 1 | def fillnan(arr: ndarray, num: Union[int, float]) -> None | 
将数组arr中的nan替换为num,原地修改。
2 isnan
| 1 | def isnan(arr: ndarray, axis: int=0, method: str=None) -> ndarray | 
检查输入数组arr元素是否为nan。返回一个bool类型的数组,其中True代表对应元素为nan,False代表对应元素不为nan。
其中,axis可选,若不填则默认为0,与method配合使用。method可选,只能为any或者all。
当同时传入axis和method时,会按照对应的axis以method指定的方法进行聚合,见下面的示例2。
示例1:
| 1 | arr | 
示例2:
| 1 | arr | 
3 sum_ignore_nan
| 1 | def sum_ignore_nan(arr: ndarray, axis: int=0) -> ndarray | 
忽略arr中的nan值进行求和。axis默认为0,表示按列方向求和,axis=1表示按行方向求和
示例1:
| 1 | arr | 
4 t_pdf
| 1 | def t_pdf(x: float, df: float) -> float | 
计算t分布的概率密度,给定x,范围为(-inf,x)。df为自由度。
| 1 | ulab.tools.t_pdf(-4,2) | 
5 t_cdf
| 1 | def t_cdf(x: float, df: float) -> float | 
计算t分布的累积分布函数,给定x,范围为(-inf,x)。df为自由度。
6 t_sf
| 1 | def t_sf(x: float, df: float) -> float | 
计算t分布的生存函数(定义为 1 - cdf ),给定x,范围为(-inf,x)。df为自由度。
7 corr
| 1 | def corr(arr: ndarray) -> ndarray | 
皮尔逊相关性系数(Pearson correlation coefficient,PCC)是衡量两组数据之间线性相关性的相关系数。它是两个变量的协方差与其标准差的乘积之间的比率。因此,它本质上是协方差的归一化测量,使得结果始终介于 -1 和 1 之间。与协方差本身一样,该测量只能反映变量的线性相关性,而无法体现许多其他类型的关系或相关性。
对于总体,皮尔逊相关系数通常由希腊字母 ρ (rho) 表示,并称为总体相关系数或总体皮尔逊相关系数。给定一对随机变量
对于样本,皮尔逊相关系数通常用
其中:
在具体代码计算的实现上与上述公式略有不同。本实现参考了pandas中的corr函数实现,参考其内部源码,
| 1 | correl = libalgos.nancorr(mat, minp=min_periods) | 
其使用的libalgos.nancorr方法支持样本中存在nan值的计算。
8 nan_missrate
| 1 | def nan_missrate(arr: ndarray, axis=0) -> ndarray | 
根据axis计算arr的缺失率,缺失率定义为:当前行or列中nan的数量/总数据量。
| 1 | arr | 
cluster
| 1 | from ulab import cluster | 
添加了聚类相关功能。
1 AgglomerativeClustering
| 1 | mdl = cluster.AgglomerativeClustering() | 
该类实现了scikit-learn中对应类的子集。
methods
fit
| 1 | def fit(self, corr: ndarray) -> None | 
拟合模型,目前仅支持precomputed,即传入计算好的距离矩阵进行聚类。
Attributes
labels_
| 1 | mdl.labels_ | 
每个点的聚类标签。
children_
| 1 | mdl.children_ | 
每个非叶节点的子节点矩阵,shape:(n_samples -1 ,2)。小于 n_samples 的值对应于作为原始样本的树的叶子。大于或等于 n_samples 的节点 i 是非叶节点,并且具有子节点 children_[i - n_samples] 。
其中:
- children_[:, 0]:左子树标签
- children_[:, 1]:右子树标签
distances_
| 1 | mdl.distances_ | 
对应节点间距离。
Z_
| 1 | mdl.Z_ | 
聚类结果矩阵,shape:(n_samples - 1,4)。
其中:
- Z_[:, 0]:左子树标签
- Z_[:, 1]:右子树标签
- Z_[:, 2]:distance
- Z_[:, 3]:子树节点数量
n_features_in_
| 1 | mdl.n_features_in_ | 
拟合过程中看到的特征数量。
n_leaves_
| 1 | mdl.n_leaves_ | 
树中的叶子节点数量。
2 fcluster
| 1 | def fcluster(Z: ndarray, threshold: float, criterion: str = "distance") -> ndarray | 
根据阈值threshold切分Z,具体参考:scipy.cluster.hierarchy.fcluster
| 1 | Z = np.array([[0., 1., 1., 2.], | 
3 leaders
| 1 | def leaders(Z: ndarray, T: ndarray, n: int) -> (ndarray, ndarray) | 
返回层次聚类中的非叶节点。参考:scipy.cluster.hierarchy.leaders,与其不同的是,需要额外传入n,为T中子簇的数量。
| 1 | Z = np.array([[0., 1., 1., 2.], | 
4 maxdists
| 1 | def maxdists(Z: ndarray) -> ndarray | 
返回任何非单簇之间的最大距离。参考:scipy.cluster.hierarchy.maxdists。
| 1 | Z = np.array([[0., 1., 1., 2.], | 
