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相关推荐

  1. python 降维 聚类_比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南

    作者介绍:Saurabh.jaju2 Saurabh是一名数据科学家和软件工程师,熟练分析各种数据集和开发智能应用程序.他目前正在加州大学伯克利分校攻读信息和数据科学硕士学位,热衷于开发基于数据科学的 ...

  2. 【Python机器学习】PCA降维算法讲解及二维、高维数据可视化降维实战(附源码 超详细)

    需要全部代码请点赞关注收藏后评论区留言私信~~~ 维数灾难 维数灾难是指在涉及到向量计算的问题中,当维数增加时,空间的体积增长得很快,使得可用的数据在空间中的分布变得稀疏,向量的计算量呈指数倍增长的一 ...

  3. ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例

    ML之DR:基于鸢尾花(Iris)数据集利用多种降维算法(PCA/TSVD/LDA/TSNE)实现数据降维并进行二维和三维动态可视化应用案例 目录 基于鸢尾花(Iris)数据集利用多种降维算法(PCA ...

  4. 机器学习降维算法二:LDA(Linear Discriminant Analysis)

    Linear Discriminant Analysis (也有叫做Fisher Linear Discriminant)是一种有监督的(supervised)线性降维算法.与PCA保持数据信息不同, ...

  5. 机器学习: t-Stochastic Neighbor Embedding 降维算法 (二)

    上一篇文章,我们介绍了SNE降维算法,SNE算法可以很好地保持数据的局部结构,该算法利用条件概率来衡量数据点之间的相似性,通过最小化条件概率 pj|ip_{j|i} 与 pi|jp_{i|j} 之间的 ...

  6. 四大降维算法的比较和一些理解(PCA、LDA、LLE、LEP)

    PCA Principle components analysis 主成分分析法:https://blog.csdn.net/weixin_43909872/article/details/85321 ...

  7. 机器学习——经典降维算法与框架综述

    目录​​​​​​​ 综述 一.介绍 二. 降维算法回顾 1.KNN 1.1 KNN核心思想 1.2 KNN算法流程 1.3 KNN算法优缺点 2.线性降维 (1)PCA 2.1.1 PCA简介 2.1 ...

  8. 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) ...

  9. 机器学习-Sklearn-04(降维算法PCA和SVD)

    机器学习-Sklearn-04(降维算法PCA和SVD) 学习04 1 概述 1.1 从什么叫"维度"说开来 对于数组和Series来说,维度就是功能shape返回的结果,shap ...

最新文章

  1. python爬取boss直聘招聘信息_Python笔记-爬取Boss直聘的招聘信息
  2. cordova在IOS初次运行,loading加载很久的解决办法
  3. OLTP系统的Oracle RAC性能调优,索引分区极大提升提交性能
  4. stm32跑马灯实验
  5. 关于移动端meta设置(未完待续)
  6. 【洛谷 T47488】 D:希望 (点分治)
  7. 导入要素集到SDE数据库的方法以及使用GP工具的许可问题(转载)
  8. php工程导致系统蓝屏,经常蓝屏是什么原因
  9. 单位几个小伙子,又因为微服务的事吵的不可开交
  10. 通过Cloudera Manager部署CDH5.15.1的webUI界面详解
  11. XDOC云服务API(二)
  12. C++动态连接库动态加载
  13. 【蓝桥杯历年题】2020蓝桥杯A组省赛第二场(10.17)【含蓝桥杯官网提交地址】
  14. 权重的计算(熵权法)
  15. php跨域有那些方法,PHP跨域访问的3种方法
  16. 如何使用swfobject(中文版)
  17. 哪个软件测试交易系统好用,交易系统测试结果的可信度检验
  18. vue图片压缩不失真_压缩图片大小(像素)
  19. E: Sub-process /usr/sbin/dpkg-preconfigure --apt || true received a segmentation fault.
  20. Cell:基于33个遗传多样性水稻种质泛基因组分析揭示“隐藏”的基因组变异

热门文章

  1. 为什么LR模型损失函数使用交叉熵不用均方差?
  2. 3D设计软件中怎么创建重合参考平面?
  3. 我不怕千万人阻挡,只怕自己投降是谁说的
  4. result结果返回
  5. 测试优先级 与 重点测试的讨论
  6. Adplus抓包配置文件
  7. MODBUS协议最简单又是最直白的解释
  8. 自己搭建一套聊天系统Rocket.chat(可在Internet使用)
  9. 数说CS|北航人工智能是怎样的存在?
  10. python企业发放的奖金根据利润提成_100 道 Python 经典练习题002