python降维之时间类型数据的处理_使用Python进行数据降维|线性降维

前言

为什么要进行数据降维?直观地好处是维度降低了,便于计算和可视化,其深层次的意义在于有效信息的提取综合及无用信息的摈弃,并且数据降维保留了原始数据的信息,我们就可以用降维的数据进行机器学习模型的训练和预测,但将有效提高训练和预测的时间与效率。

降维方法分为线性和非线性降维,非线性降维又分为基于核函数和基于特征值的方法(流形学习),代表算法有

线性降维方法:PCA ICA LDA LFA

基于核的非线性降维方法KPCA KFDA

流形学习:ISOMAP LLE LE LPP

本文主要对线性降维方法中的PCA、ICA、LDA的Python实现进行讲解。

请注意本文将不对各种数据降维方法的原理与理论推导过程做过多的讲解,旨在用尽可能少的语言说清楚以及如何用Python实现,先实现再理解,并在读完代码之后自行查阅相关文献理解其不同的思想。但读者应具有一定的统计学、代数学、机器学习的基础。

主成分分析PCA

主成分分析(Principal Component Analysis),是一种常用的数据降维方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量就叫主成分。关于主成分分析的思想与理论推导过程在互联网上很容易找到完美的证明,用人话说来就是找到一个轴,将你的数据映射到这个轴上之后所计算的方差最大,再换句人话说就是从原始数据的一堆变量中提取出一部分变量,而这部分变量能完美解释原始数据中包含的信息(或保留原始的数据特性)

注意:

进行主成分分析前需对数据进行归一化处理

PCA流程:

对数据行归一化处理

计算归一化后的数据集的协方差矩阵与其特征值、特征向量

对特征值从大到小排序并保留最大的个特征向量

将数据转换到个特征向量构建的新空间中

优点:

无参数限制

提取了主要信息并且结果容易理解

缺点:

方差小的主成分可能含有对样本差异的重要信息

在某些情况下,PCA方法得出的主元可能并不是最优的

相关Python代码

sklearn.decomposition.PCA

Python实现示例(已注释)

#来看个官网最简单的例子

>>> import numpy as np

>>> from sklearn.decomposition import PCA

#创建数据 矩阵形式

>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])

#设定两个主成分

>>> pca = PCA(n_components=2)

#用X训练

>>> pca.fit(X)

PCA(n_components=2)

#查看每个主成分解释程度

>>> print(pca.explained_variance_ratio_)

[0.9924... 0.0075...]

>>> print(pca.singular_values_)

[6.30061... 0.54980...]

#降维

>>> pca = PCA(n_components=1, svd_solver='arpack')

>>> pca.fit(X)

PCA(n_components=1, svd_solver='arpack')

>>> print(pca.explained_variance_ratio_)

[0.99244...]

>>> print(pca.singular_values_)

[6.30061...]

线性判别分析LDA

线性判别分析(Linear Discriminant Analysis)是一种有监督的(supervised)线性降维算法。与PCA保持数据信息不同,LDA的核心思想:往线性判别超平面的法向量上投影,使得区分度最大(高内聚,低耦合)。LDA是为了使得降维后的数据点尽可能地容易被区分!

与PCA比较

PCA为无监督降维,LDA为有监督降维

LDA降维最多降到类别数K-1的维数,PCA没有这个限制。

PCA希望投影后的数据方差尽可能的大(最大可分性),而LDA则希望投影后相同类别的组内方差小,而组间方差大。

相关Python代码

sklearn.discriminant_analysis.LinearDiscriminantAnalysis

Python实现示例(已注释)

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

%matplotlib inline

from sklearn.datasets.samples_generator import make_classification

#生成数据

X, y = make_classification(n_samples=1000, n_features=3, n_redundant=0, n_classes=3, n_informative=2,

n_clusters_per_class=1,class_sep =0.5, random_state =10)

#LDA降维

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

lda = LinearDiscriminantAnalysis(n_components=2)

lda.fit(X,y)

X_new = lda.transform(X)

plt.scatter(X_new[:, 0], X_new[:, 1],marker='o',c=y)

plt.show()

独立成分分析ICA

独立成分分析(Independent component analysis)是一种利用统计原理进行计算的方法,它是一个线性变换,这个变换把数据或信号分离成统计独立的非高斯的信号源的线性组合。之前介绍的PCA、LDA都是以观测数据点呈高斯分布模型为基本假设前提的,而ICA将适用于非高斯分析数据集,是PCA的一种有效扩展。

与PCA比较

ICA寻找的是最能使数据的相互独立的方向,而PCA仅要求方向是不相关的

PCA认为主元之间彼此正交,样本呈高斯分布;ICA则不要求样本呈高斯分布

相关Python代码

sklearn.decomposition.FastICA

Python实现示例(已注释)

import numpy as np

import matplotlib.pyplot as plt

from scipy import signal

from sklearn.decomposition import FastICA, PCA

# 生成观测模拟数据

np.random.seed(0)

n_samples = 2000

time = np.linspace(0, 8, n_samples)

s1 = np.sin(2 * time) # 信号源 1 : 正弦信号

s2 = np.sign(np.sin(3 * time)) # 信号源 2 : 方形信号

s3 = signal.sawtooth(2 * np.pi * time) # 信号源 3: 锯齿波信号

S = np.c_[s1, s2, s3]

S += 0.2 * np.random.normal(size=S.shape) # 增加噪音数据

S /= S.std(axis=0) # 标准化

# 混合数据

A = np.array([[1, 1, 1], [0.5, 2, 1.0], [1.5, 1.0, 2.0]]) # 混合矩阵

X = np.dot(S, A.T) # 生成观测信号源

# ICA模型

ica = FastICA(n_components=3)

S_ = ica.fit_transform(X) # 重构信号

A_ = ica.mixing_ # 获得估计混合后的矩阵

# PCA模型

pca = PCA(n_components=3)

H = pca.fit_transform(X) # 基于PCA的成分正交重构信号源

# 图形展示

plt.figure()

models = [X, S, S_, H]

names = ['Observations (mixed signal)',

'True Sources',

'ICA recovered signals',

'PCA recovered signals']

colors = ['red', 'steelblue', 'orange']

for ii, (model, name) in enumerate(zip(models, names), 1):

plt.subplot(4, 1, ii)

plt.title(name)

for sig, color in zip(model.T, colors):

plt.plot(sig, color=color)

plt.subplots_adjust(0.09, 0.04, 0.94, 0.94, 0.26, 0.46)

plt.show()

以上就是早起的统计工具箱第二期的内容,当然想要完全学会还需要自行查阅更多文献,而更多的数据降维方法、还有上一期未介绍完的python统计检验我们之后再聊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cookie、Session、Token、sessionStorage、localStorage简介__Token放在 cookie, sessionStorage 和 localStorage中区别

cookie、Session、Token、sessionStorage、localStorage简介 cookie 是一个非常具体的东西,只得是浏览器里永久存储的一种数据,是浏览器实现的一种数据存储功能。Cookie在计算机中是个存储在浏览器目录中的文本文件,当浏览器运行时&#xf…

歌星大奖赛C语言程序,C_歌星大奖赛

在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。*问题分析与算法设计这个问题的算法十分简单,但是要注意在程序中判断最大、最…

c语言树莓派音乐播放器,使用web端来控制我的树莓派播放音乐

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?web端控制树莓派播放音乐,PHPNodeJSmpg123,粗糙版。实现后还可以做个app什么的。代码git用到的代码内容可以在这里看~nodempg.js启动一个se…

Nginx学习_狂神

Nginx 公司产品出现瓶颈? 我们公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。 但是慢慢的,使用我们平台的用户…

c语言中运算符的读音是什么,操作符、运算符,operator,音标,读音,翻译,英文例句,英语词典...

补充资料:二进制算术运算二进制算术运算binary arithmetic operation二.165. 原码两位索法为了提高运算速度,在1次操作中可同时考虑两位乘数,求得与两位乘数相对应的部分积,其速度比一位乘法提商1倍,规则如下: 又丫1二…

python怎么重复输出_如何根据输出在Python中重复函数?

你可以用while循环来实现这一点。只要没有break或sys.exit,它就返回到start,这意味着这里的每一个错误输入。希望这有帮助def read_the_file(output):while True:print """Do you want me to read your newly created file?Type [Y]es o…

C语言读取load格式文件,求指导,如何用c语言实现读取*.raw格式图像

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼/*** 这个程序是读取jpg图像的** 后续加上jpg图像打开和存放*/ #include #include #include #include #include #define SOI 0xD8 //文件头#define EOI 0xD9 //文件尾#define APP0 0xE0 //定义交换格式和图像识别信息#define SOF0 …

js当前时间格式化_JS时间格式化

因为new Date().toLocaleString() 在安卓和ios上的格式不一致,所以尽量自己写format生成一个时间数组作为一个简单的举例,我序列化一周的时间对象声明参数let lastMonth []let daylong 86400000判断时间值是否小于9const formatNumber num > { num…

android json传输数据到服务器,Android中post请求传递json数据给服务端的实例

在最近的项目中有个需求是这样的:入参封装成JSON,EXAMPLE:{ "uuid": "iamauuid","clientType": "AND","content": "{\"gender\":\"F\",\"name\":\&qu…

springboot项目中使用shiro 自定义过滤器和token的方式___shiro使用token登录流程

springboot项目中使用shiro 自定义过滤器和token的方式 实现步骤主要是以下几步&#xff1a; 1. 在项目中导入maven依赖 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.4.0</versi…

window.print 点击取消后再次打印无效_教程 | 图书馆自助复印打印机使用方法

图书馆自助复印打印机教程当当当&#xff01;教程君又来辽~今天为大家介绍的是咱们图书馆霸气十足的自助复印打印机实行全程无人化管理为读者提供自助打印、复印、扫描服务是你学习的小帮手&#xff01;实行全程无人化管理为读者提供自助打印、复印、扫描服务读者可在校园内任意…

android 支付模块封装,Android集成支付----支付宝支付总结与封装

前言类似于Android集成支付----微信支付总结与封装(可以查看本人另外一篇文章)&#xff0c;本文对支付宝支付进行一个总结与封装。相比于微信支付&#xff0c;支付宝支付没有那么多坑。集成支付宝支付SDK这里只是简要介绍&#xff0c;重点解说有坑的地方&#xff0c;具体参考官…

Springboot系列之Shiro、JWT、Redis 进行认证鉴权

Springboot系列之Shiro、JWT、Redis 进行认证鉴权 Shiro架构 Apache Shiro是一个轻量级的安全框架 Shiro可以非常容易的开发出足够好的应用&#xff0c;其不仅可以用在JavaSE环境&#xff0c;也可以用在JavaEE环境。 Shiro可以帮助我们完成&#xff1a;认证、授权、加密、会…

kettle 先删除后插入_Kettle:使用触发器和快照表进行增量数据同步

主库为Oracle 11g数据库&#xff0c;针对需要同步的表建立增量数据临时表以及反向并通过水壶定时同步到PostgreSQL数据库。1&#xff0c;主库创建快照表和快照注意&#xff1a;快照表结构和源表结构必须一致&#xff01;--创建插入快照表 CREATE TABLE SPWUSER.WEB_CUSTOMER_IN…

c 语言中fgetc函数,C 库函数 - fgetc()

描述C 库函数 int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一个无符号字符)&#xff0c;并把位置标识符往前移动。声明下面是 fgetc() 函数的声明。int fgetc(FILE *stream)参数stream -- 这是指向 FILE 对象的指针&#xff0c;该 FILE 对象标识了要在上面执行操…

SpringBoot中使用Shiro和JWT做认证和鉴权

最近新做的项目中使用了shiro和jwt来做简单的权限验证&#xff0c;在和springboot集成的过程中碰到了不少坑。做完之后对shiro的体系架构了解的也差不多了&#xff0c;现在把中间需要注意的点放出来&#xff0c;给大家做个参考。 相对于spring security来说&#xff0c;shiro出…

python 数字大小排序_python list字符按数字大小排序

python list字符按数字大小排序在把list写到csv过程中&#xff0c;遇到一个list的排序问题&#xff0c;list中存放的是数字字符&#xff0c;需要按数字大小来排序测试源码testList [1, 5, 2, 10, 50, 21, 31, 3, 7]print(testList{}.format(testList))normalSortList testLis…

android 手机wifi重启,路由器要不要每天重启?多亏宽带师傅透露,难怪网速一天比一天慢!...

没WiFi&#xff0c;不成活&#xff01;手机和WiFi之间&#xff0c;就像空调加棉被&#xff0c;谁也离不开谁。图片来源于网络如今WiFi已经填满了我们生活的每个角落&#xff0c;很难想象&#xff0c;如果哪天没了网&#xff0c;世界会变成什么样&#xff01;可是家里的WiFi是越…

windows和linux系统下测试端口连通性的命令

文章目录1. ping2. telnet3. ssh4. curl5. wget6. tcping总结1. ping ping命令只能测试某个IP通不通&#xff0c;不能测试某端口的连通性。因为ping命令是基于ICMP协议&#xff0c;是计算机网络中的网络层的协议&#xff0c;但是想要测试某个的连通性&#xff0c;需要用传输层…

python写windows程序_【Python学习】Python 写Windows Service服务程序

如下遇到自己编写的服务无法启动需要添加环境变量(标红的)C:\Python27\Scripts;C:\Python27\;C:\Python27\chromedriver.exe;C:\Python27\Lib\site-packages\win32;C:\Python27\Lib\site-packages\pywin32_system32;1.需求为什么要开发一个windows服务呢&#xff1f;之前做一个…