降维算法高级(二)21
1 相关性
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(0,150,size = (50,3)),columns=['python','En','Chinese'])
#相关性系数
#相关系数范围(-1,1)
#-1表示负相关
#1表示正相关
df.corr()
df['Physic']=np.random.randint(-150,0,size=50)
df.corr()
df['Math']=df['python'].map(lambda x:x+np.random.randint(-10,10,size=1)[0])
df.corr()
#python与数学关联性非常大
2 PCA降维
from sklearn.decomposition import PCA
from sklearn import datasets
#物理意义特征
X,y=datasets.load_iris(return_X_y=True)
X[:5]
输出:
array([[5.1, 3.5, 1.4, 0.2],[4.9, 3. , 1.4, 0.2],[4.7, 3.2, 1.3, 0.2],[4.6, 3.1, 1.5, 0.2],[5. , 3.6, 1.4, 0.2]])
pca=PCA(n_components=2,whiten=True)
X_pca=pca.fit_transform(X)
X_pca[:5]
#n_components=2(int类型),表示降维保留2个特征
#n_components=0.95(#n_components=2(浮点类型),表示降维保留95%重要性的特征
#whiten=True,进行归一化
array([[-1.30533786, 0.64836932],[-1.31993521, -0.35930856],[-1.40496732, -0.29424412],[-1.33510889, -0.64613986],[-1.32702321, 0.6633044 ]])
3 PCA原理(特征值和特征向量)
pca.explained_variance_#pca方法直接计算特征值和特征向量
输出:
array([4.22824171, 0.24267075])
#1.去中心化(每一列都减去平均值)
B=X-X.mean(axis=0)#2.协方差
V=np.cov(B,rowvar=False,bias=False)
#rowvar=False表示计算列的协方差,默认计算行
#bias=True,默认截距维1 #3.计算特征值和特征向量eigen,ev(线性代数)
eigen,ev=np.linalg.eig(V)
display(eigen,ev)#特征值和特征向量计算
cond=(eigen/eigen.sum()).cumsum()>=0.95
print((eigen/eigen.sum()).cumsum())
print(cond)
#计算不同数据合起来对总数据的占比,显示重要性
index=cond.argmax()#chi
index
ev=ev[:,:index+1]#保留特征值对应的特征向量#5.进行矩阵乘法
pca_result=B.dot(ev)
pca_result[:5]#进行标准化(归一化)
pca_result=(pca_result-pca_result.mean(axis=0))/pca_result.std(axis=0,ddof=1)
#ddof=1表示的是样本方差,分母为(n-1),而不是原来的n
pca_result[:5]输出:
array([4.22824171, 0.24267075, 0.0782095 , 0.02383509])
array([[ 0.36138659, -0.65658877, -0.58202985, 0.31548719],[-0.08452251, -0.73016143, 0.59791083, -0.3197231 ],[ 0.85667061, 0.17337266, 0.07623608, -0.47983899],[ 0.3582892 , 0.07548102, 0.54583143, 0.75365743]])
[0.92461872 0.97768521 0.99478782 1. ]
[False True True True]
array([[-1.30533786, -0.64836932],[-1.31993521, 0.35930856],[-1.40496732, 0.29424412],[-1.33510889, 0.64613986],[-1.32702321, -0.6633044 ]])
4 PCA代码实现(奇异值分解)
#pip install scipy
#scipy 高级数据计算库
#Numpy基本数据计算库
from scipy import linalg
n_components_ = 3
X,y = datasets.load_iris(return_X_y = True)# 1、去中心化
mean_ = np.mean(X, axis=0)
X -= mean_# 2、奇异值分解
U, S, Vt = linalg.svd(X, full_matrices=False)# 3、符号翻转(如果为负数,那么变成正直)
# max_abs_cols = np.argmax(np.abs(U), axis=0)
# signs = np.sign(U[max_abs_cols, range(U.shape[1])])
# U *= signs# 4、降维特征筛选
U = U[:, :n_components_]# 5、归一化
U = (U - U.mean(axis = 0))/U.std(axis = 0,ddof = 1)
# U *= np.sqrt(X.shape[0] - 1)
U[:5]输出:
array([[-1.30533786, -0.64836932, 0.09981716],[-1.31993521, 0.35930856, 0.75257299],[-1.40496732, 0.29424412, -0.0640073 ],[-1.33510889, 0.64613986, -0.11284924],[-1.32702321, -0.6633044 , -0.32210314]])
np.sign([1,2,-2,-0.5])
输出:
array([ 1., 1., -1., -1.])
X_pca[:5]
输出
array([[-1.30533786, 0.64836932],[-1.31993521, -0.35930856],[-1.40496732, -0.29424412],[-1.33510889, -0.64613986],[-1.32702321, 0.6633044 ]])
X[:5]
输出:
array([[-0.74333333, 0.44266667, -2.358 , -0.99933333],[-0.94333333, -0.05733333, -2.358 , -0.99933333],[-1.14333333, 0.14266667, -2.458 , -0.99933333],[-1.24333333, 0.04266667, -2.258 , -0.99933333],[-0.84333333, 0.54266667, -2.358 , -0.99933333]])
sigma = np.zeros(shape = (4,4))
for i in range(4):for j in range(4):if i == j:sigma[i,i] = S[i]
sigma
输出:
sigma = np.zeros(shape = (4,4))
for i in range(4):for j in range(4):if i == j:sigma[i,i] = S[i]
sigma
sigma = np.zeros(shape = (4,4))
for i in range(4):for j in range(4):if i == j:sigma[i,i] = S[i]
sigma
array([[25.09996044, 0. , 0. , 0. ],[ 0. , 6.01314738, 0. , 0. ],[ 0. , 0. , 3.41368064, 0. ],[ 0. , 0. , 0. , 1.88452351]])
U, S, Vt = linalg.svd(X, full_matrices=False)
display(U.shape,S.shape,Vt.shape)
print(S)
# 反向矩阵乘法 ---> X
U.dot(sigma).dot(Vt)[:5]输出:
(150, 4)
(4,)
(4, 4)
[25.09996044 6.01314738 3.41368064 1.88452351]
array([[-0.74333333, 0.44266667, -2.358 , -0.99933333],[-0.94333333, -0.05733333, -2.358 , -0.99933333],[-1.14333333, 0.14266667, -2.458 , -0.99933333],[-1.24333333, 0.04266667, -2.258 , -0.99933333],[-0.84333333, 0.54266667, -2.358 , -0.99933333]])
降维算法高级(二)21相关推荐
- python 降维 聚类_比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南
作者介绍:Saurabh.jaju2 Saurabh是一名数据科学家和软件工程师,熟练分析各种数据集和开发智能应用程序.他目前正在加州大学伯克利分校攻读信息和数据科学硕士学位,热衷于开发基于数据科学的 ...
- 【Python机器学习】PCA降维算法讲解及二维、高维数据可视化降维实战(附源码 超详细)
需要全部代码请点赞关注收藏后评论区留言私信~~~ 维数灾难 维数灾难是指在涉及到向量计算的问题中,当维数增加时,空间的体积增长得很快,使得可用的数据在空间中的分布变得稀疏,向量的计算量呈指数倍增长的一 ...
- ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例
ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例 目录 基于鸢尾花(Iris)数据集利用多种降维算法(PCA ...
- 机器学习降维算法二:LDA(Linear Discriminant Analysis)
Linear Discriminant Analysis (也有叫做Fisher Linear Discriminant)是一种有监督的(supervised)线性降维算法.与PCA保持数据信息不同, ...
- 机器学习: t-Stochastic Neighbor Embedding 降维算法 (二)
上一篇文章,我们介绍了SNE降维算法,SNE算法可以很好地保持数据的局部结构,该算法利用条件概率来衡量数据点之间的相似性,通过最小化条件概率 pj|ip_{j|i} 与 pi|jp_{i|j} 之间的 ...
- 四大降维算法的比较和一些理解(PCA、LDA、LLE、LEP)
PCA Principle components analysis 主成分分析法:https://blog.csdn.net/weixin_43909872/article/details/85321 ...
- 机器学习——经典降维算法与框架综述
目录 综述 一.介绍 二. 降维算法回顾 1.KNN 1.1 KNN核心思想 1.2 KNN算法流程 1.3 KNN算法优缺点 2.线性降维 (1)PCA 2.1.1 PCA简介 2.1 ...
- 10-1-2 数据结构与算法高级(下)
目录 三.数据结构与算法高级 3.1 树 3.1.1 树的概念 3.1.2 二叉树 3.1.3 二叉查找树 3.1.4 二叉树的遍历 3.1.5 红黑树 3.1.5.1 左旋(RotateLeft) ...
- 机器学习-Sklearn-04(降维算法PCA和SVD)
机器学习-Sklearn-04(降维算法PCA和SVD) 学习04 1 概述 1.1 从什么叫"维度"说开来 对于数组和Series来说,维度就是功能shape返回的结果,shap ...
最新文章
- python爬取boss直聘招聘信息_Python笔记-爬取Boss直聘的招聘信息
- cordova在IOS初次运行,loading加载很久的解决办法
- OLTP系统的Oracle RAC性能调优,索引分区极大提升提交性能
- stm32跑马灯实验
- 关于移动端meta设置(未完待续)
- 【洛谷 T47488】 D:希望 (点分治)
- 导入要素集到SDE数据库的方法以及使用GP工具的许可问题(转载)
- php工程导致系统蓝屏,经常蓝屏是什么原因
- 单位几个小伙子,又因为微服务的事吵的不可开交
- 通过Cloudera Manager部署CDH5.15.1的webUI界面详解
- XDOC云服务API(二)
- C++动态连接库动态加载
- 【蓝桥杯历年题】2020蓝桥杯A组省赛第二场(10.17)【含蓝桥杯官网提交地址】
- 权重的计算(熵权法)
- php跨域有那些方法,PHP跨域访问的3种方法
- 如何使用swfobject(中文版)
- 哪个软件测试交易系统好用,交易系统测试结果的可信度检验
- vue图片压缩不失真_压缩图片大小(像素)
- E: Sub-process /usr/sbin/dpkg-preconfigure --apt || true received a segmentation fault.
- Cell:基于33个遗传多样性水稻种质泛基因组分析揭示“隐藏”的基因组变异