更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html

scikit-learn库之主成分分析

PCA在scikit-leran库中的sklearn.decomposition包下,PCA即最普通的PCA,PCA也有很多变种,我们主要会讲解PCA,然后聊一聊KernelPCAIncremetalPCASparsePCAMiniBatchSparsePCA

接下来将会讨论上述五者的区别,由于是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也可以去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.decomposition

一、PCA

1.1 使用场景

PCA是PCA系列降维算法中最原始的降维方法,因为原始,所以它一般是我们首选的,如果感觉原始的PCA可能无法解决我们的问题,我们可以尝试使用其他的PCA系列的降维算法。

1.2 代码

import numpy as np
from sklearn.decomposition import PCA X = np.array([[-1, -1, 2], [-2, -1, 1], [-3, -2, 3],
[1, 1, 2], [2, 1, 2], [3, 2, 3]])
pca = PCA(n_components=2)
pca.fit(X)
PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,
svd_solver='auto', tol=0.0, whiten=False)
print(pca.explained_variance_ratio_)
[0.92991028 0.06363895]
print(pca.singular_values_)
[6.311193   1.65102037]
pca = PCA(n_components=2, svd_solver='full')
pca.fit(X)
PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,
svd_solver='full', tol=0.0, whiten=False)
print(pca.explained_variance_ratio_)
[0.92991028 0.06363895]
print(pca.singular_values_)
[6.311193   1.65102037]
pca = PCA(n_components=1, svd_solver='arpack')
pca.fit(X)
PCA(copy=True, iterated_power='auto', n_components=1, random_state=None,
svd_solver='arpack', tol=0.0, whiten=False)
print(pca.explained_variance_ratio_)
[0.92991028]
print(pca.singular_values_)
[6.311193]

1.3 参数

  • n_components:特征维度数目,float类型或str类型。该参数可以用来控制降维到的维度数。

    • 设置一个大于等于1且小于样本特征的整数。
    • 设置\((0,1]\)内的数,指定主成分方差和所占的最小比例阈值。
    • 设置为'mle',即由模型通过MLE算法根据特征的方差分布情况自己选择。
  • copy:bool类型。如果为True,在传递给fit()方法的数据上降维,如果为False,传递给fit()方法的数据将会被覆盖,即在原来的数据上进行降维计算。默认为True。
  • whiten:白化,bool类型。判断是否白化,白化就是对降维后的数据归一化,让方差都为1。一般不推荐白化,如果PCA降维后需要进行数据处理,可以考虑白化。默认为False。
  • svd_solver:奇异值分解方法,str类型。指定奇异值分解SVD的方法,一般PCA库都是基于SVD实现的。
    • 'auto':PCA自动权衡下面三种实现方式。
    • 'full':传统的SVD,使用scipy库实现。
    • 'arpack':适用于数据量大,数据维度多,同时主成分数目比例较低的PCA降维,使用scipy库实现。
    • 'randomized':适用于数据量大,数据维度多,同时主成分数目比例较低的PCA降维,使用scikit-learn实现。
  • tol:停止求解的标准,float类型。当svd_solver='arpack'停止算法的奇异值阈值。默认为0。
  • iterated_power:int类型或'auto'。当svd_solver='randomized'时计算幂方法的迭代次数。默认为'auto'。
  • random_state:随机数种子,int类型。使用后可以保证随机数不会随着时间的变化而变化。默认为None。

1.4 属性

  • components_:array类型。返回具有最大方差的成分。
  • explained_variance_:array类型。降维后的各主成分的方差值,主成分方差值越大,则说明这个主成分越重要
  • explained_variance_ratio_:array类型。降维后的各主成分的方差值占总方差值的比例,主成分所占比例越大,则说明这个主成分越重要。
  • singular_values_:array类型。返回每个成分对应的奇异值。
  • mean_:array类型。每个值的经验均值。
  • n_components_:int类型。返回保留的成分个数。
  • noise_variance_:float类型。返回噪声的协方差。

1.5 方法

  • fit(X,y):把数据放入模型中训练模型。
  • fit_transform(X,[,y])all:训练模型同时返回降维后的数据。
  • get_covariance():计算数据的协方差。
  • get_params([deep]):返回模型的参数,可以用于Pipeline中。
  • get_precision():计算数据的精确度矩阵。
  • inverse_transform:将降维后的数据转换成原始数据,但可能不会完全一样,会有些许差别。
  • score(X,y):基于报告决定系数\(R^2\)评估模型。
  • score_samples:返回每个样本的对数似然。
  • set_prams(**params):创建模型参数。
  • transform(X):对于训练好的数据降维。

二、KernelPCA

KernelPCA模型类似于非线性支持向量机,使用核技巧处理非线性数据的降维,主要是选择合适的核函数。

三、IncrementalPCA

IncrementalPCA模型主要是为了解决计算机内存限制问题。工业上样本量和维度都是非常大的,如果直接拟合数据,机器性能一般都无法支撑。IncrementalPCA则会将数据分成多个batch,然后对每个batch依次递增调用partial_fit函数对样本降维。

四、SparsePCA

SparsePCA模型相较于普通的PCA区别在于使用了L1正则化,即对非主成分的影响降为0,避免了噪声对降维的影响。

五、MiniBatchSparsePCA

MiniBatchSparsePCA模型类似于SparsePCA,不同之处在于MiniBatchSparsePCA模型通过使用一部分样本特征和给定的迭代次数进行降维,以此来解决特征分解过慢的问题。

05-04 scikit-learn库之主成分分析的更多相关文章

  1. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  2. kFreeBSD 7.0于2013/05/04发布 桌面环境 GNOME 3....

    kFreeBSD 7.0于2013/05/04发布 桌面环境 GNOME 3.4, KDE 4.8.4, Xfce 4.8, and LXDE

  3. scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)

    scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...

  4. (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探

    一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

  5. (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探

    目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

  6. Scikit Learn

    Scikit Learn Scikit-Learn简称sklearn,基于 Python 语言的,简单高效的数据挖掘和数据分析工具,建立在 NumPy,SciPy 和 matplotlib 上.

  7. Python第三方库(模块)"scikit learn"以及其他库的安装

    scikit-learn是一个用于机器学习的 Python 模块. 其主页:http://scikit-learn.org/stable/. GitHub地址: https://github.com/ ...

  8. ubuontu16.04安装Opencv库引发的find_package()错误信息处理及其简单使用

    在安装完Opencv库之后,打算测试一下Opencv库是否成功安装.下面是用的例子对应的.cpp代码以及对应的CMakeLists.txt代码: .cpp文件: #include <stdio. ...

  9. Ubuntu 16.04 安装PCL库以及测试

    参考链接:https://blog.csdn.net/dantengc/article/details/78446600 参考博客,官网一直安装不成功,后来参照一篇博客终于安装成功了,记录如下. 1. ...

随机推荐

  1. vue-property-decorator vue typescript写法

    什么是Typescript TypeScript 是一种由微软开发的自由和开源的编程语言,它是 JavaScript 的一个超集,扩展了 JavaScript 的语法.作者是安德斯大爷, Delphi ...

  2. window 定时关机小程序bat

    复制以下文本,新建txt文件并修改为bat后缀 如图: @echo off title 定时关机 echo 定时关机程序 echo ---------------------------------- ...

  3. java生成二维码/java解析二维码

    二维码的优缺点 优点:1. 高密度编码,信息容量大:2.编码范围广:3.容错能力强:4.译码可靠性高:5.可引入加密措施:6.成本低,易制作,持久耐用. 缺点:1.二维码技术成为手机病毒.钓鱼网站传播 ...

  4. 基于python的selenium两种文件上传操作

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径,这里不做过多赘述,前文有相关操作方法. 方法二.非input标签上传 这种上传方 ...

  5. java树形结构工具类

    一.树形结构数据一般都是以子父id的形式存在数据库中,查询的时候只是带有子id和parent_id的List集合 并不是树形结构,所以我们现在要将普通的List集合转换为树结构数据(本工具类扩展操作树 ...

  6. 25 个 Linux 下最炫酷又强大的命令行神器,你用过其中哪几个呢?

    本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...

  7. Java线程池的拒绝策略

    一.简介 jdk1.5 版本新增了JUC并发编程包,极大的简化了传统的多线程开发.前面文章中介绍了线程池的使用,链接地址:https://www.cnblogs.com/eric-fang/p/900 ...

  8. Spring常犯的十大错误,你踩过吗?

    1.错误一:太过关注底层 我们正在解决这个常见错误,是因为 "非我所创" 综合症在软件开发领域很是常见.症状包括经常重写一些常见的代码,很多开发人员都有这种症状. 虽然理解特定库的 ...

  9. Flume和Kafka完成实时数据的采集

    Flume和Kafka完成实时数据的采集 写在前面 Flume和Kafka在生产环境中,一般都是结合起来使用的.可以使用它们两者结合起来收集实时产生日志信息,这一点是很重要的.如果,你不了解flume ...

  10. MySQL数据库忘记密码怎么办?

    忘记MySQL数据库密码就进不去数据库,也就无法修改密码,解决方法如下: 1:打开cmd命令符,先关闭正在运行的数据库,输入如下命令: 2:打开mysql.exe和mysqld.exe所在的文件夹,复 ...