0. 方差分析 ANOVA, Analaysis of Variation

0.1 单因素方差分析

<aside> 📖 定义

设问题中涉及一个因素A,有 k 个水平,以 $Y_{ij}$记第 i 个水平的第 j 个观察值,

模型为 $Y_{ij}=a_i+e_{ij},~j = 1,…,n_i,~i=1,…,k$

$a_i$ 表示水平$i$ 的理论平均值,称为水平$i$ 的效应

$E(e_{ij})=0$

</aside>

<aside> 📖 速算

计算前先做线性变化

<aside> 📖 检验

$H_0:a_1=a_2=…=a_k$

假定随机误差 $e_{ij}$ 满足正态分布 $N(0,\sigma^2)$

记 $MS_A=\frac{SS_A}{(k-1)},~MS_e=\frac{SS_e}{(n-k)}$,则当 $H_0$ 成立时,

$$ \frac{MS_A}{MS_e}\sim F(k-1,n-k) $$

</aside>

$SS$ 自由度 偏差平方和/$MS$ F值
A $SS_A$ $k-1$ $MS_A$ $MS_A/MS_e$
误差 $SS_e$ $n-k$ $MS_e$ $-$
总和 $SS$ $n-1$ $-$ $-$

0.2 双因素方差分析

<aside> 📖 定义

设问题中涉及两个因素A、B,分别有 k, l 个水平,以 $Y_{ij}$记组合 $(i,j)$ 的试验结果,

模型为 $Y_{ij}=\mu+a_i+b_j+e_{ij},~i=1,…,k, ~j = 1,…,l$

</aside>

$SS$ 自由度 偏差平方和/$MS$ F值
A $SS_A$ $k-1$ $MS_A$ $MS_A/MS_e$
B $SS_B$ $l-1$ $MS_B$ $MS_B/MS_e$
误差 $SS_e$ $(k-1)(l-1)$ $MS_e$ $-$
总和 $SS$ $kl-1$ $-$ $-$

1. 主成分分析 PCA, Principal Components Analysis

<aside> 📖 主成分分析 (Principal components analysis,PCA)

现代数据分析中的标准工具,是一种简单的非参数方法,用于从混乱的数据集中提取相关信息。

无监督

</aside>

<aside> 💡 Prerequisites

<aside> 📖 奇异值分解 SVD, Singular Value Decomposition

任意 $m\times n$ 阶实矩阵 $A$ 均可被分解成 $U\Sigma V^T$ 的形式

其中:

<aside> 📖 散度矩阵 Scatter Matrix

对 $m\times n$ 矩阵 $X=[x_1,x_2,…,x_n]$

$$ S=\sum_{j}^n (x_j-\overline x)(x_j-\overline x)^T,\overline x=\frac1n\sum^n_{j=1}x_j $$

而协方差矩阵即为 $\frac 1{n-1}S$ (除n也可以)

特别地,当各 $\overline x=0$ 时,$S=XX^T$

$R = \frac{1}{m}XX^\mathsf{T}=\begin{pmatrix} \frac{1}{m}\sum_{i=1}^m{a_i^2} & \frac{1}{m}\sum_{i=1}^m{a_ib_i} \\ \frac{1}{m}\sum_{i=1}^m{a_ib_i} & \frac{1}{m}\sum_{i=1}^m{b_i^2} \end{pmatrix}$

</aside>

</aside>

<aside> 📖 基本原理

CodingLabs - PCA的数学原理

<aside> 📖 基于特征值分解协方差矩阵实现PCA算法

输入:数据集 $p\times n$ 矩阵 $X=[x_1,x_2,…,x_n]$,

$x_i=(x_{i1},…,x_{ip})^T,~i=1,2,…n,~n>p$,$n$ 个样本 $p$ 个特征

  1. 对样本阵做标准化变换:$z_{ij}=\frac {x_{ij}-\overline x_j}{s_j},~i=1,2,…,n;j=1,2,…,p$

    得到标准化矩阵 $Z$ (只减去均值也可以)

  2. 计算得其相关系数矩阵 $R=\frac{ZZ^T}{n-1}$ ,因方差为1,此时等同协方差矩阵

  3. 计算出 $R$ 的特征向量与特征值,按 $\frac{\sum^{m}{j=1}}{\sum^{p}{j=1}}\geq 85\%$ 取前 $m$ 大的特征根,使信息利用率高于 $85\%$

  4. 将数据转换到由 $m$ 个特征向量作为基构建的新空间中

  5. 特征值的第 $i$ 大的基即为 第 $i$ 主成分 (PC$i$) </aside>

<aside> 📖 基于SVD协方差矩阵实现PCA算法

用SVD分解协方差矩阵实现PCA可以得到两个方向的PCA降维(可以分解非方阵)

</aside>

# Python实现PCA
import numpy as np

def pca(X, k):  # k is the components you want
    # mean of each feature
    n_samples, n_features = X.shape
    print(X.shape)
    mean = np.array([np.mean(X[:, i]) for i in range(n_features)])
    # normalization
    norm_X = X - mean
    # scatter matrix
    scatter_matrix = np.dot(np.transpose(norm_X), norm_X)
    # Calculate the eigenvectors and eigenvalues
    eig_val, eig_vec = np.linalg.eig(scatter_matrix)
    eig_pairs = [(np.abs(eig_val[i]), eig_vec[:, i]) for i in range(n_features)]
    # sort eig_vec based on eig_val from highest to lowest
    eig_pairs.sort(reverse=True)
    # select the top k eig_vec
    feature = np.array([ele[1] for ele in eig_pairs[:k]])
    # get new data
    data = np.dot(norm_X, np.transpose(feature))
    return data

X = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])

if __name__ == '__main__':
    print(pca(X, 1))

2. 线性判别分析 LDA, Linear Discriminant Analysis

<aside> 📖 线性判别分析, LDA

是一种找到最佳分离两个或多个类的变量的线性组合的方法

主要思想:最大化类间均值,最小化类内方差

有监督

</aside>

<aside> 💡 Prerequisites

<aside> 📖 类内散度矩阵 Within-class Scatter Matrix

$x_{ij} (𝑖=1,...,𝑘; j=1,...,𝑁_𝑖)$: $N_i (𝑖=1,...,𝑘)$ vectors from 𝑘 classes.

The class sample means are $\bar{x}{i}=\frac{1}{N{i}}\sum_{j=1}^{N_{i}}{x}_{ij}$.

$$ S_w = \sum_{i=1}^{k}\sum_{j=1}^{N_{i}}(\mathbf{x}{ij}-\mathbf{\bar{x}}{i})(\mathbf{x}{ij}-\mathbf{\bar{x}}{i})^{T} $$

</aside>

<aside> 📖 类间散度矩阵 Between-class Scatter Matrix

$x_{ij} (𝑖=1,...,𝑘; j=1,...,𝑁_𝑖)$: $N_i (𝑖=1,...,𝑘)$ vectors from 𝑘 classes.

$$ S_b = \sum_{i=1}^{k}N_{i}(\mathbf{\bar{x}}{i}-\mathbf{\bar{x}})(\mathbf{\bar{x}}{i}-\mathbf{\bar{x}})^{T} $$

</aside>

<aside> 📖 瑞利商 Rayleigh Quotient

$R(A,x)=\frac{x^HAx}{x^Hx}$,其中$A$ 为 $n\times n$ 的 Hermitan矩阵(共轭转置与原矩阵相等)

$$ \lambda_{min}\leq R(A,x) \leq \lambda_{max} $$

</aside>

</aside>