快速入门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


目录
相关文章
|
5天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
16 3
|
10天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
20 1
|
16天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
21天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
16 1
|
22天前
|
机器学习/深度学习 API 计算机视觉
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
18 2
|
23天前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
195 3
|
22天前
|
机器学习/深度学习 存储 算法
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
24 1
|
23天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
45 2
|
23天前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
44 1
|
24天前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
49 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练