主成分分析:
PCA 即 Principal Components Analy:主成分分析
来自自然界的所有特性信息占,要对所有特性进行同时分析,由于信息量过大 模型无法实现。
使用主成分分析 将最主要的特性信息 分离出来,将分离出来的数据 在做后续的 工作。
PCA 作用:
PCA 用于识别数据中的 重要部分,并将其按照重要程度排序。
当需要处理很大维度的特征值时,利用 PCA 降维 (将主要的 信息分离出来),可以再不损失数据 重要特征的同时 **降低其处理复杂度。**
PCA 实现:
import cv2 as cv
import numpy as np
import sklearn.decomposition as dc # 包含主成分分析 PCA 的包
def make_data():
"""
手动创建数据,其中 a b 为 最重要部分,由于 之后的数据都可以 使用 a b 计算出来
"""
a = np.random.normal(size=250)
b = np.random.normal(size=250) # 产生250 个符合正态分布的 随机数
c = 2 * a + 3 * b
d = 3 * a - 2 * b
e = 4 * a + 2 * c
f = 2 * d - 3 * b
x = np.c_[a,b,c,d,e,f] # 将每个数组 竖起来 再 拼接起来
print(x)
return x
def train_model(x):
"""
得到主成分分析模型
"""
model = dc.PCA() # 构建一个主成分分析对象
model.fit(x)
return model
def reduce_model(model, n_components, x):
"""
降维
"""
model.n_components = n_components # 重新 对model 成分进行重新 设置
x = model.fit_transform(x) # 重新对 model 进行训练,返回值为 主成分
return x
def main():
x = make_data()
# print(x)
model = train_model(x)
variances = model.explained_variance_ # 得到 特性 重要性数组 并且数组 以排好序
print(variances)
threshold = 0.8 # 重要性 阈值
useful_indices = np.where(variances > threshold)[0] # 挑选数组中 比 阈值大的部分的 索引
print(useful_indices)
n_useful = len(useful_indices) # 所有成分中 主成分 有多少个, 之后用于确定要 降维到多少维度
print(n_useful)
x = reduce_model(model, n_useful, x)
print(x)
return
if __name__ == '__main__':
main()