python实现PCA散点图与模型极限组合成为参考模型,模型极限由置信区间确定,置信区间由霍特林统计量而来,将一个光谱数据投影到建立好的PCA模型上,查看其是否符合模型极限,模型极限由置信区间确定,计算结果记作p值,当p值小于α=0.5(显著性水平)时,输出“测得的光谱不属于所用构建模型”的代码
时间: 2024-03-27 21:39:06 浏览: 128
基于Python 进行PCA 模型实验【100011736】
下面是Python代码实现PCA散点图和模型极限的参考模型,并对光谱数据进行投影和检验:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
# 读入光谱数据
df = pd.read_csv('spectral_data.csv')
# 进行PCA降维
pca = PCA(n_components=2)
X = pca.fit_transform(df.iloc[:, 1:])
# 绘制PCA散点图
fig, ax = plt.subplots()
ax.scatter(X[:, 0], X[:, 1])
# 计算模型极限
n_samples, n_features = X.shape
dof = n_samples - 1
alpha = 0.05
t_val = stats.t.ppf(1 - alpha / 2, dof)
model_limit = t_val * np.sqrt((n_features * (n_samples - 1)) / (n_samples - n_features))
# 投影新的光谱数据
new_data = np.array([0.2, 0.3, 0.4, 0.5, 0.6, 0.7]).reshape(1, -1)
new_X = pca.transform(new_data)
# 检验新的光谱数据是否符合模型极限
mahalanobis_dist = np.sum(((X - np.mean(X, axis=0)) / model_limit) ** 2, axis=1)
p_value = 1 - stats.chi2.cdf(mahalanobis_dist, n_features)
if p_value < alpha:
print("测得的光谱不属于所用构建模型")
else:
print("测得的光谱符合所用构建模型")
```
其中,`spectral_data.csv` 是包含光谱数据的 CSV 文件,第一列为样本编号,后面的列为各个波长下的光谱强度值。这里我们只取后面的列作为输入数据。`PCA` 类可以对数据进行降维,将高维数据投影到低维空间中。我们选择将数据降维到 2 维,以便绘制散点图。
计算模型极限时,我们使用了霍特林统计量,即 $t$ 分布,同时考虑了显著性水平 $\alpha$ 和样本自由度。然后,我们对新的光谱数据进行投影,计算其马氏距离,并将其转换为 $p$ 值。如果 $p$ 值小于显著性水平 $\alpha$,则输出“测得的光谱不属于所用构建模型”。
阅读全文