快速入门Python机器学习(31)

简介: 快速入门Python机器学习(31)

12.3非负矩阵分解(NMF)


12.3.1 原理

非负矩阵分解(Non-Negative Matrix Factorization:NMF)

矩阵分解:一个矩阵A分解为A=B1×B2×…×Bn

非负矩阵分解:矩阵分解,矩阵A、 B1… Bn中元素均为非负

image.png


12.3.2类、参数、属性和方法


class sklearn.decomposition.NMF(n_components=None, *, init='warn', solver='cd', beta_loss='frobenius', tol=0.0001, max_iter=200, random_state=None, alpha=0.0, l1_ratio=0.0, verbose=0, shuffle=False, regularization='both')


属性

属性

类别

介绍

components_

ndarray of shape (n_components, n_features)

因式分解矩阵,有时称为“字典”。

n_components_

int

组件的数量。如果给定,则与nèu components参数相同。否则,它将与功能的数量相同。

reconstruction_err_

float

拟合模型中训练数据X和重构数据WH之间的矩阵差的Frobenius范数,或beta散度。

n_iter_

int

实际迭代次数。


方法

fit(X[, y])

学习数据XNMF模型。

fit_transform(X[, y, W, H])

学习数据XNMF模型并返回转换后的数据。

get_params([deep])

获取此估计器的参数。

inverse_transform(W)

将数据转换回其原始空间。

set_params(**params)

设置此估计器的参数。

transform(X)

根据拟合的NMF模型变换数据X


12.3.3散点图与热力分析

#降维NMF可视化
def dimension_reduction_for_nmf(mydata,title):
  myutil = util()
  X,y = mydata.data,mydata.target
  #由于是无监督学习,所以尽对X进行拟合
  # 打印处理后的数据形态
  print("处理后的数据形态:",X.shape)
  # 进行PCA处理
  nmf = NMF(n_components=2,random_state=62,init='nndsvdar',max_iter=10000) #降到2类
  nmf.fit(X)
  X_nmf = nmf.transform(X)
  # 打印主成分提取后的数据形态
  print("非负矩阵分解后的数据形态:",X_nmf.shape)
  myutil.draw_scatter_for_Dimension_Reduction(X_nmf,mydata,title,'非负矩阵分解(NMF)')
  #使用主成分绘制热度图
  myutil.draw_Heat_chart(nmf,mydata,title ,'非负矩阵分解(NMF)')
def call_dimension_reduction_for_nmf():
  mydatas = [datasets.load_iris(),datasets.load_wine(),datasets.load_breast_cancer()]
  titles = ["鸢尾花","红酒","乳腺癌"]
  for (mydata,title) in zip(mydatas,titles):
    dimension_reduction_for_nmf(mydata,title)


输出

处理后的数据形态: (150, 4)
非负矩阵分解后的数据形态: (150, 2)
处理后的数据形态: (178, 13)
非负矩阵分解后的数据形态: (178, 2)
处理后的数据形态: (569, 30)
非负矩阵分解后的数据形态: (569, 2)

image.png

image.png

image.png


12.3.4 案例——特征提取

from sklearn.decomposition import NMF
def nmf_for_face():
        faces = datasets.fetch_lfw_people(min_faces_per_person=20,resize=0.8)
        #用NMF模型进行模拟
        X_train,X_test,y_train,y_test = train_test_split(faces.data/255,faces.target,random_state=62)
        mlp = MLPClassifier(hidden_layer_sizes=[100,100],random_state=62,max_iter=400)
        nmf = NMF(n_components=105,random_state=62).fit(X_train)#NMF中n_components不支持浮点数
        X_train_nmf = nmf.transform(X_train)
        X_test_nmf = nmf.transform(X_test)
        print("NMF处理后数据形态:{}".format(X_train_nmf.shape))
        #用神经网络模型进行训练
        mlp.fit(X_train_nmf,y_train)
        print("NMF训练后模型识别准确率:{:.2%}".format(mlp.score(X_test_nmf,y_test)))


输出

NMF处理后数据形态:(2267, 105)
NMF训练后模型识别准确率:56.22%


12.4线性判别分析(LDA)


12.4.1 原理

线性判别分析(Linear Discriminant Analysis: LDA)

有监督降维,寻找降维矩阵,投影后同类数据尽可能聚集在一起,不同类分开明显。

这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是"投影后类内方差最小,类间方差最大"

image.png


12.4.2类、参数、属性和方法


class sklearn.discriminant_analysis.LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001, covariance_estimator=None)


属性

属性

类别

介绍

solver

{'svd', 'lsqr’, 'eigen'}, default='svd'

'svd':奇异值分解(默认)。不计算协方差矩阵,因此对于具有大量要素的数据,建议使用此解算器。

'lsqr':最小二乘解。  可以结合收缩或自定义协方差估计。

'eigen':特征值分解。可以结合收缩或自定义协方差估计。

shrinkage

'auto' or float, default=None

收缩参数,可能值:

None:无收缩(默认)

'auto':使用莱德沃夫引理自动收缩。

浮动在01之间:固定收缩参数。

 如果使用协方差估计器,这应该保留为无。请注意,收缩仅适用于'lsqr''eigen'解算器。


参数

参数

类型

coef_

ndarray of shape (n_features,) or (n_classes, n_features)

intercept_

ndarray of shape (n_classes,)

covariance_

array-like of shape (n_features, n_features)

explained_variance_ratio_

ndarray of shape (n_components,)

means_

array-like of shape (n_classes, n_features)

priors_

array-like of shape (n_classes,)

scalings_

array-like of shape (rank, n_classes - 1)

xbar_

array-like of shape (n_features,)

classes_

array-like of shape (n_classes,)


参见 https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html


方法

decision_function(X)

将决策函数应用于一组样本。

fit(X, y)

根据给定的拟合线性判别分析模型

fit_transform(X[, y])

适合数据,然后转换它。

get_params([deep])

获取此估计器的参数。

predict(X)

预测X中样本的类标签。

predict_log_proba(X)

估计对数概率。

predict_proba(X)

估计概率。

score(X, y[, sample_weight])

返回给定测试数据和标签的平均准确度。

set_params(**params)

设置此估计器的参数。

transform(X)

项目数据最大化类分离。


12.4.3散点图与热力分析

#线性判别分析
def dimension_reduction_for_lda(mydata,title):
        myutil = util()
        X,y = mydata.data,mydata.target
        print("处理后的数据形态:",X.shape)
        # 进行PCA处理
        lda = LinearDiscriminantAnalysis(n_components=2)
        lda.fit(X,y)
        X_lda = lda.transform(X)
        # 打印主成分提取后的数据形态
        print("非负矩阵分解后的数据形态:",X_lda.shape)
        myutil.draw_scatter_for_Dimension_Reduction(X_lda,mydata,title,'线性判别分析(LDA)')
def call_dimension_reduction_for_lda():
        mydatas = [datasets.load_iris(),datasets.load_wine(),datasets.load_breast_cancer()]
        titles = ["鸢尾花","红酒"]
        for (mydata,title) in zip(mydatas,titles):
                dimension_reduction_for_lda(mydata,title)


输出

处理后的数据形态: (150, 4)
非负矩阵分解后的数据形态: (150, 2)
处理后的数据形态: (178, 13)
非负矩阵分解后的数据形态: (178, 2)
处理后的数据形态: (569, 30)
非负矩阵分解后的数据形态: (569, 2)

image.png


12.5降维总结


12.5.1鸢尾花

image.png

image.png


12.5.2红酒

image.png

image.png


12.5.3乳腺癌

image.png

image.png


12.5.4 PCA VS LDA

思考方向

PCA

LDA

思想

从协方差角度出发

从分类标签角度出发

学习模型

无监督

有监督

降维后可用维度

最大可选择全部维度

C-1维,C表示标签数。与原始维度无关

image.pngimage.png


目录
相关文章
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
3月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
179 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
3月前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
87 2
|
3月前
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
69 0
|
3月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
102 0
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
Python在数据科学中的应用:从数据处理到模型训练
Python在数据科学中的应用:从数据处理到模型训练
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
192 6
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
260 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
1月前
|
机器学习/深度学习 算法 网络安全
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
52 14
|
2月前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
90 2

热门文章

最新文章