<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$
总平方和
$SS=\sum_{i=1}^k\sum_{j=1}^{n_i}(Y_{ij}-\bar Y)^2$
因素$A$ 的平方和
$SS_A=SS-SS_e=\sum_{i=1}^{k}n_i(\bar Y_i - \bar Y)^2$
误差平方和
$SS_e=\sum_{i=1}^{k}\sum_{j=1}^{n_i}(Y_{ij}-\bar Y_i)^2$
方差分析
$SS = SS_A + SS_e$
</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$ | $-$ | $-$ |
<aside> 📖 定义
设问题中涉及两个因素A、B,分别有 k, l 个水平,以 $Y_{ij}$记组合 $(i,j)$ 的试验结果,
模型为 $Y_{ij}=\mu+a_i+b_j+e_{ij},~i=1,…,k, ~j = 1,…,l$
$E(e_{ij})=0$
$Y_{\cdot\cdot}=\sum_{i=1}^k\sum_{j=1}^l Y_{ij}/kl$
总平方和
$SS=\sum_{i=1}^k\sum_{j=1}^l(Y_{ij}-Y_{\cdot \cdot})^2$
因素$A$ 的平方和
$SS_A=l\sum_{i=1}^k(Y_{i\cdot}-Y_{\cdot\cdot})^2$
因素$B$ 的平方和
$SS_B=k\sum_{j=1}^l(Y_{\cdot j}-Y_{\cdot\cdot})^2$
误差平方和
$SS_e=\sum_{i=1}^k\sum_{j=1}^l(Y_{ij}-Y_{i \cdot}-Y_{\cdot j}+Y_{\cdot \cdot})^2$
方差分析
$SS = SS_A + SS_b + SS_e$
并非在任何模型中总平方和SS都有适当的分解,这要看没计如何
比方说,如在全部W个组合中少做了 1个(即有一个未观察),则分解式作不出来.
</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$ | $-$ | $-$ |
<aside> 📖 主成分分析 (Principal components analysis,PCA)
现代数据分析中的标准工具,是一种简单的非参数方法,用于从混乱的数据集中提取相关信息。
无监督
</aside>
<aside> 💡 Prerequisites
<aside> 📖 奇异值分解 SVD, Singular Value Decomposition
任意 $m\times n$ 阶实矩阵 $A$ 均可被分解成 $U\Sigma V^T$ 的形式
其中:
$\Sigma$ 为对角矩阵扩展成的 $m\times n$ 矩阵,对角元素为降序排列的 $A$ 的特征值
$U$ 为 $m$ 阶正交矩阵,列向量分别为对应特征值所属的特征向量
$V^T$ 为 $n$ 阶正交矩阵,各列向量代表相应特征向量在 $A$ 的行方向上的分布情况
e.g. 水流中:不同时间点上不同流向的分布情况;
人脸识别中:一种面部特征在不同人脸上的表现情况
左奇异矩阵可以用于对行数的压缩
右奇异矩阵可以用于对列(即特征维度)的压缩 </aside>
<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> 📖 基本原理
<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$ 个特征
<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))
<aside> 📖 线性判别分析, LDA
</aside>
<aside> 💡 Prerequisites
</aside>