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$
  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算法

</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>