On this page

    scipy语法

    import scipy.stats as st

    st.norm.rvs(loc = 0,scale = 0.1,size =10)

    norm.rvs通过loc和scale参数可以指定随机变量的偏移和缩放参数,这里对应的是正态分布的期望和标准差。size得到随机数数组的形状参数。

    st.norm.pdf(x,loc = 0,scale = 1)

    正态分布概率密度函数。

    横轴为x, 纵轴为标准正态分布, 返回的值是纵轴坐标。

    rvs

    norm.rvs(loc=0, scale=1, size=1, random_state=None)

    返回的是一个列表

    不要认为norm.rvs(5)产生了五个变量, 它是产生了一个期望为5的随机变量。

    sklearn语法

    model_selection

    train_test_split()

    X_train, X_test, y_train, y_test = train_test_split(train_data, train_target, test_size, random_state,shuffle)

    train_test_split()是sklearn.model_selection中的分离器函数,用于将数组或矩阵划分为训练集和测试集。

    linear_model

    LogisticRegression

    LogisticRegression.coef_

    我们来回顾一下 Logistic 回归的模型:

    \[h_{\theta}(x) = \frac{1}{1 + e^{(-\theta^T x)}}\]

    $\theta^T x$可以写成$w^T x + b$, 令$b = w_0, x_0 = 1$, 就可以写成$\theta^T x$的形式。

    所以clf.coef_和clf.intercept_就是$\theta$。

    所以clf.coef_ 就是 $w$, clf.intercept_就是$b$?

    model_selection

    train_test_split

    sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)
    

    将数组或矩阵拆分为随机训练和测试子集。

    参数:

    返回:

    RandomizedSearchCV

    class sklearn.model_selection.RandomizedSearchCV(estimator, param_distributions, *, n_iter=10, scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', random_state=None, error_score=nan, return_train_score=False)[source]
    

    随机搜索超参数。

    RandomizedSearchCV实现“fit”和“score”方法。 它也实现 “score_samples”, “predict”, “predict_proba”, “decision_function”, “transform” 和 “inverse_transform” 方法, 如果在使用的estimator实现了它们。

    应用这些方法的estimator的参数通过 参数设置上 的 交叉验证搜索 来优化。

    KFold

    class sklearn.model_selection.KFold(n_splits=5, *, shuffle=False, random_state=None)
    

    K-Folds cross-validator。

    提供 train/test 索引以拆分 train/test 集中的数据。将数据集拆分为k个连续的folds(默认不打乱数据集)。

    每个fold被用作validation一次, 其它 k-1 个 folds 用作训练集。

    参数:

    Notes:

    第一个 n_samples % n_splits folds 大小为 n_samples // n_splits + 1, 其他的folds的大小为 n_samples // n_splits, 其中 n_samples 是样本的数量。

    Randomized CV splitters 可能会返回 split 每个调用的 不同结果。 你可以通过设置 random_state 为一个整数使得结果保持不变。

    例子:

    >>> import numpy as np
    >>> from sklearn.model_selection import KFold
    >>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
    >>> y = np.array([1, 2, 3, 4])
    >>> kf = KFold(n_splits=2)
    >>> kf.get_n_splits(X)
    2
    >>> print(kf)
    KFold(n_splits=2, random_state=None, shuffle=False)
    >>> for train_index, test_index in kf.split(X):
    ...     print("TRAIN:", train_index, "TEST:", test_index)
    ...     X_train, X_test = X[train_index], X[test_index]
    ...     y_train, y_test = y[train_index], y[test_index]
    TRAIN: [2 3] TEST: [0 1]
    TRAIN: [0 1] TEST: [2 3]
    

    metrics

    math

    math.atan2

    math.atan2(y, x)
    

    atan2() 返回给定的 X 及 Y 坐标值的反正切值。

    math.degrees

    math.degrees(x)
    

    degrees() 将弧度转换为角度。

    d2l

    d2l.stack

    np.stack

    numpy.stack(arrays, axis=0)
    

    沿着axis轴连接数组的序列。

    np.vstack

    vstack 表示将数组在第一维进行堆叠(即最外层的方括号),可将 arr1 和 arr2 第一维内的部分视为一个整体

    np.hstack

    hstack 表示将数组在第二维进行堆叠(即第二层方括号),可将 arr 第二层括号里面的东西视为一个整体

    np.dstack

    dstack 表示将数组在第三维进行堆叠(即第三层方括号),可将 arr 第三层括号里面的东西视为一个整体

    机器学习相关概念

    K-fold 交叉验证

    在机器学习建模过程中,通行的做法通常是将数据分为训练集和测试集。测试集是与训练独立的数据,完全不参与训练,用于最终模型的评估。在训练过程中,经常会出现过拟合的问题,就是模型可以很好的匹配训练数据,却不能很好在预测训练集外的数据。如果此时就使用测试数据来调整模型参数,就相当于在训练时已知部分测试数据的信息,会影响最终评估结果的准确性。通常的做法是在训练数据再中分出一部分做为验证(Validation)数据,用来评估模型的训练效果。

    验证数据取自训练数据,但不参与训练,这样可以相对客观的评估模型对于训练集之外数据的匹配程度。模型在验证数据中的评估常用的是交叉验证,又称循环验证。它将原始数据分成K组(K-Fold),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型。这K个模型分别在验证集中评估结果,最后的误差MSE(Mean Squared Error)加和平均就得到交叉验证误差。交叉验证有效利用了有限的数据,并且评估结果能够尽可能接近模型在测试集上的表现,可以做为模型优化的指标使用。

    References

    1. sklearn.model_selection中train_test_split()函数
    2. sklearn 中 Logistics Regression 的 coef_ 和 intercept_ 的具体意义
    3. [深度概念]·K-Fold 交叉验证 (Cross-Validation)的理解与应用
    4. sklearn函数:train_test_split(分割训练集和测试集)