机器学习入门

机器学习

机器学习与人工智能,深度学习

在这里插入图片描述

  • 机器学习和人工智能,深度学习的关系
    • 机器学习是人工智能的一个实现途径
    • 深度学习是机器学习的一个方法发展而来

机器学习中,算法是核心,数据计算是基础
机器学习算法可以被看作是一些统计方法和数学公式的组合

1.机器学习概述

1.1机器学习是什么

机器学习是从数据自动分析获得模型,并利用模型对未知数据进行预测

  • 1.解释:
    :
    我们人从大量的日常经验中归纳规律,当面临新的问题的时候,就可以利用以往总结的规律去分析
    现实状况,采取最佳策略。
    在这里插入图片描述

机器学习:
机器学习是机器从数据自动分析获得模型,并利用模型对未知数据进行预测

在这里插入图片描述

  • 2.例子:

    • 分类问题(目标值是类别,是离散型数据)
      在这里插入图片描述

      从数据(大量的猫和狗的图片)中自动分析获得模型(辨别猫和狗的规律),从而使机器拥有识别猫和狗的能力(类别)。

    • 回归问题(目标值是连续型数据)
      在这里插入图片描述

      从数据(房屋的各种信息)中自动分析获得模型(判断房屋价格的规律),从而使机器拥有预测房
      屋价格的能力(连续型数据)。

1.2 数据集构成

  • 定义:
    在机器学习中,数据集是模型训练和评估的基础。数据集通常由多个示例(也称为样本或数据点)组成,每个示例包含一个或多个特征以及一个目标值(对于监督学习任务)

    1. 示例(Samples/Data Points):示例是数据集中的个体数据点,通常用来表示模型学习的每个独立观测或数据实例。在监督学习中,每个示例通常包括输入特征和对应的目标值。
    2. 特征(Features):特征是描述每个示例的属性或变量。它们是模型用来进行预测或分类的输入变量。特征可以是数字、文本、图像、声音等不同类型的数据。通常,特征被表示为向量,以便机器学习模型能够处理它们。
    3. 目标值(Target/Label):目标值是监督学习任务中的输出变量,它是我们希望模型预测或分类的值。在分类问题中,目标值是离散的类别标签;在回归问题中,目标值是连续数值。
  • 结构:特征值+目标值

  • 例子

    问题: 假设您正在开发一个垃圾邮件过滤器,该过滤器的任务是将电子邮件分为两个类别:“垃圾邮件”和“非垃圾邮件”。您希望构建一个机器学习模型来自动识别电子邮件是否是垃圾邮件。

    数据集的构成:

    1. 示例(Samples/Data Points):您的数据集中的每个示例都代表一封电子邮件。每封电子邮件都是一个数据点,是您模型训练和测试的基本单位。

    2. 特征(Features):电子邮件的特征通常包括以下内容:

      • 文本内容:电子邮件的正文文本,可以被分词为单词或短语,并表示为文本特征。
      • 发件人:电子邮件的发件人地址。
      • 主题:电子邮件的主题行。
      • 附件:电子邮件是否包含附件。
      • 字体、大小等格式信息:电子邮件的格式属性。

      这些特征将用于训练模型来识别垃圾邮件。

    3. 目标值(Target/Label):目标值是您希望模型预测的内容。在这个例子中,目标值是二元分类标签:“垃圾邮件”或“非垃圾邮件”。

1.3 机器学习算法分类

在这里插入图片描述

  • 监督学习(supervised learning)(预测)

    输入数据有特征值和目标值的称为监督学习,分为分类问题(目标值是类别)和回归问题(目标值是连续型数据)

    • 定义:输入数据是由输入特征值和目标值所组成。函数的输出可以是一个连续的值(称为回
      归),或是输出是有限个离散值(称作分类)。

    • **分类 **:

      k-近邻算法、贝叶斯分类、决策树与随机森 林、逻辑回归、神经网络

    • **回归 ** :

      **线性回归、岭回归 **

  • 无监督学习(unsupervised learning)

    输入数据只有特征值,没有目标的称为无监督学习

    • 定义:输入数据是由输入特征值所组成

    • **聚类 **

      k-means

1.4 机器学习的开发流程

在这里插入图片描述

  • 流程图

在这里插入图片描述

2.特征工程

2.1数据集

2.1.1 Scikit-learn工具介绍

Scikit-learn(常缩写为sklearn)是一个流行的开源机器学习库,专为Python语言设计。它提供了丰富的工具和算法,用于各种任务,包括分类、回归、聚类、降维、模型选择等。Scikit-learn构建在NumPy、SciPy和matplotlib等其他库之上,使其成为处理机器学习任务的强大且灵活的选择。

Scikit-learn包含的内容

  • 分类、聚类、回归
  • 特征工程
  • 模型选择、调优

要使用Scikit-learn,通常需要使用pip或conda进行安装,然后导入必要的模块以构建和训练机器学习模型。

sklearn vs pandas

  • pandas:一个数据读取非常方便以及基本的处理格式的工具
  • sklearn:对于特征的处理提供了强大的接口
2.1.2sklearn数据集及可用数据集

可用数据集:

在这里插入图片描述

2.1.2.1sikit-learn数据集API(sklearn.datasets模块)

sklearn.datasets 模块是 Scikit-learn 中的一个重要模块,它包含了一系列函数和类,用于加载、获取和管理数据集。这些数据集可用于机器学习模型的训练、测试和评估,以及算法的演示和实验。

sklearn.datasets常用API介绍

  • datasets.load_*()
    • 获取小规模数据集,数据包含在datasets里
    • datasets.load_iris()datasets.load_digits()datasets.load_wine() 等:这些函数用于加载 Scikit-learn 内置的示例数据集。每个函数返回一个包含数据和标签的字典对象,可以通过 datatarget 键来访问。
  • _datasets.fetch_*(data_home=None)
    获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集
    下载的目录,默认是 ~/scikit_learn_data/

sklearn数据集返回值介绍

load和fetch返回的数据类型datasets.base.Bunch(字典格式)

这个字典对象包含以下键值对

类型描述
data二维数组包含特征数据,行代表不同的样本,列代表不同的特征。
target一维数组包含每个样本的标签或目标值,长度应与样本数相同。
feature_names可选列表包含特征的名称,通常用于描述数据集的特征。
target_names可选列表包含目标值或标签的名称,通常用于分类任务的类别名称。
DESCR可选文本字符串包含数据集的详细描述和相关信息。

data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
feature_names:特征名,新闻数据,手写数字、回归数据集没有
target_names:标签名
DESCR:数据描述

2.1.2.2 sklearn小数据集
  • sklearn.datasets.load_iris() 用于加载鸢尾花(Iris)数据集
from sklearn import datasets

# 加载鸢尾花数据集
iris = datasets.load_iris()




# iris对象包含以下内容
{'data': array([[5.1, 3.5, 1.4, 0.2],
        [4.9, 3. , 1.4, 0.2],
        [4.7, 3.2, 1.3, 0.2],
        ...
        [6.5, 3. , 5.2, 2. ],
        [6.2, 3.4, 5.4, 2.3],
        [5.9, 3. , 5.1, 1.8]]),    # 鸢尾花的特征数据

 'target': array([0, 0, 0, ..., 2, 2, 2]),  # 鸢尾花的类别标签,0、1、2 分别代表不同的鸢尾花种类

 'target_names': array(['setosa', 'versicolor', 'virginica'], dtype='<U10'),  # 鸢尾花种类的名称

 'feature_names': array(['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'],
       dtype='<U17'),  # 特征的名称

 'DESCR': 'Iris dataset description'}  # 数据集的描述信息
  • sklearn.datasets.load_boston() 用于加载波士顿房价(Boston Housing)数据集
from sklearn import datasets

# 加载波士顿房价数据集
boston = datasets.load_boston()



# boston对象包含以下内容
{'data': array([[6.3200e-03, 1.8000e+01, 2.3100e+00, ..., 1.5300e+01, 3.9690e+02,
         4.9800e+00],
        [2.7310e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9690e+02,
         9.1400e+00],
        [2.7290e-02, 0.0000e+00, 7.0700e+00, ..., 1.7800e+01, 3.9283e+02,
         4.0300e+00],
        ...
        [6.0760e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,
         5.6400e+00],
        [1.0959e-01, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9345e+02,
         6.4800e+00],
        [4.7410e-02, 0.0000e+00, 1.1930e+01, ..., 2.1000e+01, 3.9690e+02,
         7.8800e+00]]),      # 波士顿房价的特征数据

 'target': array([24. , 21.6, 34.7, ..., 23.9, 22. , 11.9]),  # 房价的目标值

 'feature_names': array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT'],
       dtype='<U7'),  # 特征的名称

 'DESCR': 'Boston Housing dataset ...'}  # 数据集的描述信息

这两个函数都不需要传递任何参数。加载数据集后,您可以使用返回的对象(irisboston)(返回的数据类型datasets.base.Bunch(字典格式))来访问数据集的特征、标签以及其他相关信息。

2.1.2.3 sklearn大数据集
  • sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
    函数签名

    sklearn.datasets.fetch_20newsgroups(data_home=None, subset='all', categories=None, shuffle=True, random_state=42, remove=(), download_if_missing=True)
    
    参数描述默认值
    data_home数据集的下载位置。如果未提供,则默认为 Scikit-learn 的数据缓存目录。None
    subset要加载的数据子集。可选值包括 'all'(所有数据)、'train'(训练集数据)、'test'(测试集数据)。'all'
    categories要加载的新闻组的类别(主题)。可以传递一个列表来选择特定的类别,或者传递 None 来选择所有类别。None
    shuffle是否在加载数据时随机打乱数据顺序。True
    random_state用于控制数据集的随机性。42
    remove要从文本中移除的内容,作为元组传递。例如,('headers', 'footers') 表示移除邮件头部信息和脚部信息。()
    download_if_missing如果数据集不存在,是否尝试下载数据集。True

示例

from sklearn.datasets import fetch_20newsgroups

# 获取所有数据
newsgroups = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'))

# 获取训练集数据,只包括特定主题的新闻组
categories = ['alt.atheism', 'talk.religion.misc']
newsgroups_train = fetch_20newsgroups(subset='train', categories=categories)

这个示例演示了如何使用 fetch_20newsgroups 函数来获取 20 Newsgroups 数据集的不同子集,以及如何选择特定的主题类别,并控制是否移除文本中的内容。

2.1.2.4sklearn数据集的使用

以鸢尾花数据集为例

在这里插入图片描述

from sklearn.datasets import load_iris
# 获取鸢尾花数据集
iris = load_iris()
print("鸢尾花数据集的返回值:\n", iris)
# 返回值是一个继承自字典的Bench
print("鸢尾花的特征值:\n", iris["data"])
print("鸢尾花的目标值:\n", iris.target)
print("鸢尾花特征的名字:\n", iris.feature_names)
print("鸢尾花目标值的名字:\n", iris.target_names)
print("鸢尾花的描述:\n", iris.DESCR)


# 输出:
鸢尾花数据集的返回值:
 {'data': array([[5.1, 3.5, 1.4, 0.2],
        [4.9, 3. , 1.4, 0.2],
        [4.7, 3.2, 1.3, 0.2],
        ...
        [6.5, 3. , 5.2, 2. ],
        [6.2, 3.4, 5.4, 2.3],
        [5.9, 3. , 5.1, 1.8]]),
 'target': array([0, 0, 0, ..., 2, 2, 2]),
 'frame': None,
 'target_names': array(['setosa', 'versicolor', 'virginica'], dtype='<U10'),
 'DESCR': '.. Iris dataset description ..',
 'feature_names': ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'],
 'filename': '/path/to/your/scikit-learn/datasets/data/iris.csv'}
鸢尾花的特征值:
 [[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
 ...
 [6.5 3.  5.2 2. ]
 [6.2 3.4 5.4 2.3]
 [5.9 3.  5.1 1.8]]
鸢尾花的目标值:
 [0 0 0 ... 2 2 2]
鸢尾花特征的名字:
 ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
鸢尾花目标值的名字:
 ['setosa' 'versicolor' 'virginica']
鸢尾花的描述:
 '.. Iris dataset description ..'

2.1.3数据集的划分

思考:拿到的数据是否全部都用来训练一个模型?

因为在训练一个模型后需要,进行测试,判断模型是否合格.所以要对数据集进行划分

机器学习一般的数据集会划分为两个部分:

  • 训练数据(训练集):用于训练,构建模型

  • 测试数据(测试集):在模型检验时使用,用于评估模型是否有效

    划分比例:

    • 训练集:70% 80% 75%
    • 测试集:30% 20% 30%

数据集划分API

sklearn.model_selection.train_test_split()函数

a.函数签名

sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)

b.参数解析

参数名称描述默认值
*arrays要划分的输入数据。可以是一个或多个数组或矩阵。
test_size测试集的大小。可以是浮点数(表示测试集的比例)或整数(表示测试集的样本数)。None(0.25)
train_size训练集的大小。可以是浮点数(表示训练集的比例)或整数(表示训练集的样本数)。None
random_state用于控制数据集的随机性。如果提供一个整数,它将作为随机数生成器的种子。None
shuffle是否在划分前随机打乱数据集的顺序。True
stratify如果不为 None,则根据标签的分布进行分层抽样,以确保训练集和测试集中的标签分布相似。None

***arrays **

*arrays 在Python中是一个用于传递多个参数的特殊语法。它表示一个可变长度的参数列表,也称为"可变参数"或"不定长参数"。

sklearn.model_selection.train_test_split 函数中,*arrays 是用于传递要划分的输入数据的参数。这些输入数据可以是一个或多个数组或矩阵,这取决于您要分割的数据的结构。通常情况下,您会传递两个主要的参数:

  1. 特征矩阵(Feature Matrix):这是包含特征值的二维数组,通常表示为 X。每行代表一个样本,每列代表一个特征。
  2. 目标数组(Target Array):这是一个一维数组,通常表示为 y。它包含与每个样本相关联的目标值或标签。

如果您只想划分一个数据集,您可以直接传递一个特征矩阵和一个目标数组作为参数:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

如果您有多个特征矩阵或多个目标数组,您可以将它们作为额外的参数传递给 *arrays。例如:

X_train, X_test, y_train, y_test = train_test_split(X1, X2, y1, y2, test_size=0.2, random_state=42)

在这种情况下,X1X2 是两个不同的特征矩阵,y1y2 是两个不同的目标数组。

c.返回值

sklearn.model_selection.train_test_split 函数的返回值是一个包含多个数组的元组,其中包括训练集和测试集的特征和目标值。这些返回值的顺序通常是 (X_train, X_test, y_train, y_test),但可以根据需要自行指定名称。

以下是返回值的详细解释:

  1. X_train训练集的特征矩阵,包含用于训练模型的样本的特征值。这是一个二维数组,行代表不同的训练样本,列代表不同的特征。
  2. X_test测试集的特征矩阵,包含用于评估模型性能的样本的特征值。这也是一个二维数组,行代表不同的测试样本,列代表不同的特征。
  3. y_train训练集的目标数组,包含与训练样本相关联的目标值或标签。这是一个一维数组,长度与训练样本数量相同,每个元素对应一个训练样本的目标值。
  4. y_test测试集的目标数组,包含与测试样本相关联的目标值或标签。这也是一个一维数组,长度与测试样本数量相同,每个元素对应一个测试样本的目标值。

示例

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

# 加载鸢尾花数据集
iris = load_iris()

# 划分数据集,使用不同的随机数种子
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
print("x_train:\n", x_train.shape)

x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6)
x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6)

print("如果随机数种子不一致:\n", (x_train != x_train1).any())
print("如果随机数种子一致:\n", (x_train1 == x_train2).all())



# 输出:
x_train:
 (112, 4)
如果随机数种子不一致:
 [[False False False False]
 [False False False False]
 ...
 [False False False False]
 [False False False False]]
如果随机数种子一致:
 [[ True  True  True  True]
 [ True  True  True  True]
 ...
 [ True  True  True  True]
 [ True  True  True  True]]

2.2特征工程介绍

2.2.1为什么需要特征工程(Feature Engineering)

机器学习领域的大神Andrew Ng(吴恩达)老师说“Coming up with features is difficult, time consuming,requires expert knowledge. “Applied machine learning” is basically feature engineering. ”
注:业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

  • 意义:特征工程会直接影响机器学习的效果
2.2.2特征工程是什么

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

特征工程(Feature Engineering)是指在机器学习和数据分析任务中,通过选择、转换、创建和优化数据特征(或属性),以提高模型性能、减少过拟合风险、提高数据可解释性和适应性的过程

特征工程涵盖了多个任务,包括数据清洗、特征选择、特征变换、特征创建、特征编码、特征组合和降维等,旨在将原始数据转换为适合机器学习算法处理的形式,从而使模型更好地理解和利用数据

特征工程通常需要结合领域知识和实验,是构建高性能、可解释的机器学习模型的关键步骤。

特征工程包含内容

  • 特征提取
  • 特征预处理
  • 特征降维

2.3特征提取

2.3.1特征提取是什么

特征提取是指原始数据中抽取出 最有用、最具代表性的信息(特征),以便用于构建机器学习模型、数据分析或其他任务。特征提取的目标是将原始数据转化为一个更具信息量的表示形式,从而帮助模型更好地理解数据并做出有意义的预测或决策

  • 简单理解:
    将任意数据(如文本或图像)转换为可用于机器学习的数字特征

  • 特征提取API

    sklearn.feature_extraction
    

注:特征值化是为了计算机更好的去理解数据

  • 字典特征提取(特征离散化)

    应用DictVectorizer实现对类别特征进行数值化、离散化

  • 文本特征提取

    • 应用CountVectorizer实现对文本特征进行数值化
    • 应用TfidfVectorizer实现对文本特征进行数值化
  • 图像特征提取(深度学习)

2.3.2字典特征提取

作用:对字典数据进行特征值化

sklearn.feature_extraction.DictVectorizer

sklearn.feature_extraction.DictVectorizer 类是 Scikit-learn 中用于将字典形式的特征表示(特征-值对)转换为特征矩阵的工具。它可以将每个不同的特征表示成独热编码的形式,从而方便地用于机器学习模型的训练和分析。

**独热编码(One-Hot Encoding)**是一种将分类数据转换为计算机可处理的格式的方法。它将每个分类值转换成一个向量(向量长度等于分类值的总数),其中1表示该类表示在样本中存在,0表示该类在样本中不存在。

在这里插入图片描述

例如,如果我们有一个颜色的分类特征,有三种可能的取值:红、绿和蓝。独热编码会将它们转换成这样的形式:

  • 红色:[1, 0, 0]

  • 绿色:[0, 1, 0]

  • 蓝色:[0, 0, 1]

    这种编码方式的好处是它消除了分类值之间的大小或顺序关系,因为每个分类值都以相同的方式表示(都是一个单位向量)

主要作用

DictVectorizer 主要用于以下目的:

  1. 将字典形式的特征数据转换成机器学习模型可以处理的特征矩阵。
  2. 将分类特征(例如文本类别、颜色类别等)转换成数值型的特征,以便模型能够处理。

主要方法和属性

以下是一些常用的 DictVectorizer 类的方法和属性:

函数签名/属性参数解析返回值描述
fit(X, y=None)- X: 特征字典列表(键对应特征名,值对应特征取值))。<br> - y` (可选): 目标变量(标签)。self对数据进行拟合,获取特征名和编码信息。通常用于训练数据集。
transform(X)- X: 特征字典列表。稀疏或密集矩阵,表示特征矩阵。将新的字典数据集转换为特征矩阵,使用之前已经通过 fit 方法获取的特征编码规则。
fit_transform(X, y=None)- X: 特征字典列表。
- y (可选): 目标变量(标签)。
稀疏或密集矩阵,表示特征矩阵。拟合数据并进行转换,将字典表示的特征转化为特征矩阵。通常是 fittransform 的组合操作。
get_feature_names_out(input_features=None)- input_features (可选): 原始特征名。列表,特征名列表。获取特征名,可以用于查看特征编码后的名称。如果提供 input_features,则可以将原始特征名映射到编码后的特征名。
inverse_transform(X)- X: 特征矩阵。列表,每个元素是一个特征字典。将特征矩阵逆转为原始字典表示,可以将特征矩阵还原为原始的字典形式,以便查看或使用原始数据。
vocabulary_包含特征编码信息的字典,通常是从拟合数据中获取的,包括每个特征的名称以及它们的编码(索引)。

示例

以下是使用 DictVectorizer 的简单示例:

from sklearn.feature_extraction import DictVectorizer

# 示例数据
data = [{'color': 'red', 'size': 'small'},
        {'color': 'green', 'size': 'large'},
        {'color': 'blue', 'size': 'medium'}]

# 创建 DictVectorizer 对象
vectorizer = DictVectorizer(sparse=False) 

# 使用 fit_transform() 将字典数据转换为特征矩阵
X = vectorizer.fit_transform(data)

# 获取特征编码后的名称
feature_names = vectorizer.get_feature_names_out()

# 将特征矩阵逆转为原始字典表示
original_data = vectorizer.inverse_transform(X)

# 获取特征编码信息的字典
vocabulary = vectorizer.vocabulary_

# 输出结果
print("特征矩阵 X:\n", X)
print("特征编码后的名称:\n", feature_names)
print("特征矩阵逆转为原始字典表示:\n", original_data)
print("特征编码信息的字典:\n", vocabulary)


# 输出
征矩阵 X:
 [[0. 1. 0. 0. 1.]
 [1. 0. 0. 1. 0.]
 [0. 0. 1. 0. 0.]]
特征编码后的名称:
 ['color=blue' 'color=green' 'color=red' 'size=large' 'size=medium' 'size=small']
特征矩阵逆转为原始字典表示:
 [{'color': 'red', 'size': 'small'}, {'color': 'green', 'size': 'large'}, {'color': 'blue', 'size': 'medium'}]
特征编码信息的字典:
 {'color': 2, 'size': 5}

**构造方法sklearn.feature_extraction.DictVectorizer() **

a.函数描述

DictVectorizer 类的构造方法用于创建 DictVectorizer 对象,并可以通过参数设置对象的属性。构造方法允许您指定是否返回稀疏矩阵、返回矩阵的数据类型、用于分隔特征名和特征值的字符以及是否按字母顺序对特征进行排序。这些参数允许您根据需要自定义特征提取器的行为。

b.函数签名

sklearn.feature_extraction.DictVectorizer(sparse=True, dtype=<class 'numpy.float64'>, separator='=', sort=True, **kwargs)

c.参数解析

参数名称描述默认值
sparse返回的矩阵是否为稀疏矩阵(scipy.sparse)。如果设置为 False,将返回密集矩阵(numpy.array)。True
dtype返回的矩阵的数据类型。<class 'numpy.float64'>
separator用于分隔特征名和特征值的字符。'='
sort是否按字母顺序对特征进行排序。如果设置为 False,特征的顺序将不确定。True
**kwargs允许传递额外的参数,用于初始化 sklearn.feature_extraction.text.CountVectorizer
2.3.3文本特征提取

作用:对文本数据进行特征值化

1.sklearn.feature_extraction.text.CountVectorizer()类

a.介绍

sklearn.feature_extraction.text.CountVectorizer 类是 Scikit-learn 中用于将文本数据转化为词频矩阵的工具。它可以将文本数据集转换成一个矩阵,其中每行代表一个样本,每列代表一个词汇,矩阵元素表示对应词汇在样本中出现的次数。

b.构造方法

class sklearn.feature_extraction.text.CountVectorizer(input='content', encoding='utf-8', decode_error='strict', strip_accents=None, lowercase=True, preprocessor=None, tokenizer=None, stop_words=None, token_pattern=r'(?u)\b\w\w+\b', ngram_range=(1, 1), analyzer='word', max_df=1.0, min_df=1, max_features=None, vocabulary=None, binary=False, dtype=<class 'numpy.int64'>)
参数名称描述默认值
input输入的数据类型,可以是 'filename''file''content'。分别表示输入为文件名、文件、文本内容。'content'
encoding文件的字符编码。'utf-8'
decode_error在解码时遇到错误的处理方式。'strict'
strip_accents移除重音符号的方式。可以为 None'ascii''unicode'None
lowercase是否将文本全部转换为小写。True
preprocessor用于预处理文本的函数。None
tokenizer用于将文本分割成单词的函数。None
stop_words用于移除常用词的列表,可以是 None'english' 或自定义的词列表。停用词"(Stop Words)None
token_pattern用于定义什么构成一个 token(词)的正则表达式模式。r'(?u)\b\w\w+\b'
ngram_range指定要提取的 n-gram 的范围。例如 (1, 2) 表示提取单个词和二元组。(1, 1)
analyzer指定特征提取器如何处理文本数据。可以是 'word' 表示以单词为单位,或 'char' 表示以字符为单位。'word'
max_df词汇的最大文档频率,用于过滤掉过于常见的词汇。1.0
min_df词汇的最小文档频率,用于过滤掉过于稀有的词汇。1
max_features词汇表的最大尺寸。只会考虑按词频排序的前 max_features 个词汇。None
vocabulary用于指定自定义的词汇表。None
binary是否将词频转化为二进制值(0或1)。False
dtype返回的矩阵的数据类型。<class 'numpy.int64'>

c.常用方法

函数签名参数解析返回值描述
fit(raw_documents[, y])- raw_documents: 输入的文本文档列表。self用于拟合(训练)文本数据,构建文本特征的词汇表。
transform(raw_documents)- raw_documents: 输入的文本文档列表。稀疏矩阵将文本数据转换为特征矩阵。
fit_transform(raw_documents[, y])fit() 方法。稀疏矩阵拟合并返回文本数据的特征矩阵。
inverse_transform(X)- X: 特征矩阵,要逆转为原始文本数据。列表将特征矩阵逆转为原始文本数据。
get_feature_names()-列表获取特征名称,即词汇表中的单词列表。

示例代码

from sklearn.feature_extraction.text import CountVectorizer

# 示例文本数据
corpus = [
    "This is a sample sentence.",
    "Another example sentence.",
    "Yet another example, a bit longer."
]

# 创建 CountVectorizer 实例
vectorizer = CountVectorizer()

# 拟合并转换文本数据
X = vectorizer.fit_transform(corpus)

# 获取特征名称
feature_names = vectorizer.get_feature_names_out()

# 输出特征矩阵和特征名称
print("特征矩阵 X:\n", X.toarray()) #注意返回格式,利用toarry()进行矩阵转换array数组
print("特征名称:\n", feature_names)


# 输出:
特征矩阵 X:
 [[0 1 1 0 1 0 1 0 1]
 [0 1 0 1 1 0 1 0 1]
 [1 2 0 1 1 1 1 1 1]]
特征名称:
 ['a' 'another' 'bit' 'example' 'is' 'longer' 'sample' 'sentence' 'this']

在这个示例中,CountVectorizer 被用于将文本数据转换为特征矩阵 X,其中每列代表一个词汇表中的单词,每行代表一个文本样本。特征矩阵 X 表示了文本数据的特征向量化形式。

2.中文文本特征提取(jieba分词)(∵中文文本没有空格)

import jieba
from sklearn.feature_extraction.text import CountVectorizer
# 或者使用以下导入 TfidfVectorizer
# from sklearn.feature_extraction.text import TfidfVectorizer

# 示例中文文本数据
chinese_corpus = [
    "这是一个示例句子。",
    "另一个示例句子。",
    "这个例子稍微长一点。",
    "文本特征提取在机器学习中非常重要。",
    "中文文本处理需要额外的注意。"
]

# 自定义分词函数
def tokenize(text):
    words = jieba.cut(text)
    return " ".join(words)

# 使用自定义分词函数对文本进行分词
chinese_corpus = [tokenize(text) for text in chinese_corpus]

# 创建 CountVectorizer 或 TfidfVectorizer 实例
vectorizer = CountVectorizer()
# 或者使用 TfidfVectorizer,可以设置其他参数如 max_df、min_df 等
# vectorizer = TfidfVectorizer()

# 拟合并转换中文文本数据
X = vectorizer.fit_transform(chinese_corpus)

# 获取特征名称
feature_names = vectorizer.get_feature_names_out()

# 输出特征矩阵和特征名称
print("特征矩阵 X:\n", X.toarray())
print("特征名称:\n", feature_names)







# 输出
特征矩阵 X:
 [[0 0 0 1 0 1 0 0 0 1 1 0 1]
 [0 0 0 0 1 1 0 0 0 1 1 0 1]
 [0 1 0 0 1 0 0 1 1 1 1 1 1]
 [1 0 0 0 0 0 1 0 1 0 1 0 1]
 [0 0 1 0 1 0 0 0 1 0 0 1 1]]
特征名称:
 ['一个' '中文' '示例' '处理' '在' '学习' '文本' '机器' '需要' '注意' '句子' '大家' '特征']

3.TF-IDF(Term Frequency-Inverse Document Frequency)文本特征提取

TF-IDF的主要思想:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出
现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

公式

在这里插入图片描述

**词频(term frequency,tf)**指的是某一个给定的词语在该文件中出现的频率
**逆向文档频率(inverse document frequency,idf)**是一个词语普遍重要性的度量。某一特定词
语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到

eg: 假如一篇文件的总词语数是100个,而词语"非常"出现了5次,那么"非常"一词在该文件中的词频就是
5/100=0.05。而计算文件频率(IDF)的方法是以文件集的文件总数,除以出现"非常"一词的文件数。所
以,如果"非常"一词在1,000份文件出现过,而文件总数是10,000,000份的话,其逆向文件频率就是lg
(10,000,000 / 1,0000)=3。最后"非常"对于这篇文档的tf-idf的分数为0.05 * 3=0.15

示例代码

import jieba
from sklearn.feature_extraction.text import TfidfVectorizer

# 示例中文文本数据
corpus = [
    "这是一个示例句子。",
    "另一个示例句子。",
    "这个例子稍微长一点。",
    "文本特征提取在机器学习中非常重要。",
    "中文文本处理需要额外的注意。"
]

# 自定义分词函数,使用 jieba 分词
def tokenize(text):
    words = jieba.cut(text)
    return " ".join(words)

# 使用自定义分词函数对文本进行分词
chinese_corpus = [tokenize(text) for text in corpus]

# 创建 TfidfVectorizer 实例
vectorizer = TfidfVectorizer()

# 拟合并转换中文文本数据
X = vectorizer.fit_transform(chinese_corpus)

# 获取特征名称
feature_names = vectorizer.get_feature_names_out()

# 输出 TF-IDF 特征矩阵和特征名称
print("TF-IDF 特征矩阵 X:\n", X.toarray())
print("特征名称:\n", feature_names)



# 输出
TF-IDF 特征矩阵 X:
 [[0.         0.4795737  0.4795737  0.         0.4795737  0.  0.37409773 0.         0.         0.4795737  0.37409773 0.  0.37409773]
 [0.         0.4795737  0.         0.4795737  0.4795737  0.  0.37409773 0.         0.         0.4795737  0.37409773 0.  0.37409773]
 [0.55349232 0.29277002 0.         0.29277002 0.29277002 0.55349232  0.22746929 0.         0.55349232 0.29277002 0.22746929 0.55349232  0.22746929]
 [0.47756693 0.         0.         0.         0.         0.47756693  0.36912699 0.61980538 0.47756693 0.         0.36912699 0.47756693  0.36912699]
 [0.         0.         0.61980538 0.         0.         0.  0.48133417 0.61980538 0.         0.         0.48133417 0.  0.48133417]]
特征名称:
 ['一个' '中文' '一个示例' '句子' '处理' '在' '学习' '文本' '文本处理' '示例' '示例句子' '重要' '额外']

2.4特征预处理

2.4.1特征预处理是什么

1.scikit-learn的解释

provides several common utility functions and transformer classes to change raw feature vectors into a representation that is more suitable for the downstream estimators.

翻译:通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

特征预处理API

sklearn.preprocessing

2.内容

  • 数值型数据的无量纲化

    • 归一化

    • 标准化

      为什么我们要进行归一化/标准化?
      特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响
      (支配)目标结果
      ,使得一些算法无法学习到其它的特征

    类别型数据的预处理是指对数据集中的类别或离散型特征进行转换和处理,以便在机器学习模型中使用。这样的处理通常是为了将类别型数据转换为数值型数据,使得模型能够理解和处理这些特征。

    以下是一些常见的类别型数据预处理方法:

    1. 独热编码(One-Hot Encoding)
      • 对每个类别创建一个二进制的特征列,其中包含 0 和 1,表示某个样本是否属于该类别。
      • 这种方法适用于类别之间没有顺序关系的情况,可以将一个类别特征转换为多个二进制特征。
    2. 标签编码(Label Encoding)
      • 对类别型特征的每个类别分配一个唯一的整数标签。
      • 这种方法适用于类别之间有一定顺序关系的情况,但要注意不要误导模型认为这些标签之间存在数值关系。
    3. 二值化(Binarization)
      • 将类别特征转换为二进制值,通常用于二分类问题。
      • 可以将一个类别特征转换为包含两个取值(0 或 1)的新特征。
    4. 有序编码(Ordinal Encoding)
      • 对类别型特征的类别按照一定顺序进行编码,将其转换为有序的数值型特征。
      • 适用于类别之间存在明确顺序关系的情况。
    5. 目标编码(Target Encoding)
      • 使用目标变量的平均值或其他统计信息来编码类别特征。
      • 适用于分类问题,但需要小心防止数据泄露。
    6. Embedding
      • 对类别特征进行嵌入(Embedding),将其映射到低维空间中的连续向量。
      • 主要用于深度学习模型,特别是处理自然语言文本数据。
    7. 特征哈希(Feature Hashing)
      • 使用哈希函数将类别特征映射到固定维度的空间,减少特征的维度。
      • 适用于高基数(高唯一值数量)的类别特征。
2.4.2归一化

1.定义

归一化(Normalization)是一种数据处理技术,用于将数值型数据调整为特定的范围或分布,以消除不同特征之间的量纲差异,使得数据更易于比较和分析。

通过对原始数据进行变换把数据映射到(默认为[0,1])之间

2.公式

在这里插入图片描述

作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终结果,mx,mi分别为指定区间值(默认mx为1,mi为0)

eg:

在这里插入图片描述

3.API

sklearn.preprocessing.MinMaxScaler

a.介绍

MinMaxScaler是Scikit-Learn(sklearn)库中的一个数据预处理工具,用于将特征值缩放到指定的范围内,通常是(0, 1)。这种缩放技术对于许多机器学习算法是重要的,特别是那些对输入特征的数值范围敏感的算法,例如支持向量机(SVM)和k-最近邻(KNN)。MinMaxScaler通过线性变换将特征值缩放到指定的范围内,其中最小值映射到最小值,最大值映射到最大值,中间的值也按比例变换。

b.方法

方法函数签名参数解析返回值描述
构造方法MinMaxScaler(feature_range=(0, 1))feature_range:指定缩放后特征值的范围。默认为(0, 1)。MinMaxScaler对象创建MinMaxScaler对象,用于数据的最小-最大缩放。
训练数据拟合与变换fit(X)X:要拟合和变换的数据。None通过计算最大值和最小值来拟合缩放器,然后将数据缩放到指定范围。
数据变换transform(X)X:要缩放的数据。缩放后的数据数组使用先前拟合的缩放器来对数据进行最小-最大缩放。
一步完成拟合和变换fit_transform(X)X:要拟合和变换的数据。(X:numpy array格式的数[n_samples,n_features])缩放后的数据数组一次性拟合和变换数据,通常用于训练集。
逆变换inverse_transform(X_scaled)X_scaled:要逆变换的已缩放数据。原始数据数组将已缩放的数据逆变换回原始数据。
获取数据的最小和最大值data_min_data_max_ 属性无参数最小和最大值数组返回已拟合数据的特征最小值和最大值。

c.示例代码

from sklearn.preprocessing import MinMaxScaler

# 创建MinMaxScaler对象,默认缩放范围是(0, 1)
scaler = MinMaxScaler()

# 模拟数据
data = [[1.0, 2.0],
        [2.0, 3.0],
        [3.0, 4.0]]

# 拟合和变换数据
scaled_data = scaler.fit_transform(data)

print("Scaled Data:")
print(scaled_data)



# 输出
Scaled Data:
[[0. 0.]
 [0.5 0.5]
 [1. 1.]

4.总结

问题:如果数据中异常点较多,会有什么影响?

在这里插入图片描述

注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较
差,只适合传统精确小数据场景

2.4.3标准化

1.定义

通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内

2.公式

在这里插入图片描述

作用于每一列,mean为平均值,σ(sigma)为标准差(方差的平方根)

特点:处理之后每列来说所有数据都聚集在均值0附近标准差差为1(数学公式可证明)

3.API

a.介绍

MinMaxScaler不同,StandardScaler通过移除均值并缩放为单位方差的方式对数据进行标准化。这有助于将数据调整为均值为0、方差为1的分布,对某些机器学习算法(如支持向量机和线性回归)特别有用。

b.方法

方法函数签名参数解析返回值描述
构造方法StandardScaler(copy=True, with_mean=True, with_std=True)copy:是否在拟合和变换时创建副本。默认为True。 with_mean:是否在拟合时移除均值。默认为True。 with_std:是否在拟合时进行标准差缩放。默认为True。StandardScaler对象创建StandardScaler对象,用于数据的标准化。
训练数据拟合与变换fit(X)X:要拟合和变换的数据。None通过计算均值和标准差来拟合标准化器,然后将数据标准化。
数据变换transform(X)X:要标准化的数据。标准化后的数据数组使用先前拟合的标准化器来对数据进行标准化。
一步完成拟合和变换fit_transform(X)X:要拟合和变换的数据。 X:numpy array格式的数据[n_samples,n_features]标准化后的数据数组一次性拟合和变换数据,通常用于训练集。
逆变换inverse_transform(X_scaled)X_scaled:要逆变换的已标准化数据。原始数据数组将已标准化的数据逆变换回原始数据。
获取均值和标准差mean_scale_ 属性无参数均值和标准差数组返回已拟合数据的特征均值和标准差。

示例代码

from sklearn.preprocessing import StandardScaler

# 创建StandardScaler对象
scaler = StandardScaler()

# 模拟数据
data = [[1.0, 2.0],
        [2.0, 3.0],
        [3.0, 4.0]]

# 拟合和变换数据
scaled_data = scaler.fit_transform(data)

print("Scaled Data:")
print(scaled_data)


# 输出
Scaled Data:
[[-1. -1.]
 [ 0.  0.]
 [ 1.  1.]]

4.总结

所以回到刚才异常点的地方,我们再来看看标准化

在这里插入图片描述

  • 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
  • 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不
    大,从而方差改变较小。

标准化在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景

2.5特征降维

2.5.1降维

降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程

相关会导致特征冗余

正是因为在进行训练的时候,我们都是使用特征进行学习。如果特征本身存在问题或者特征之间相
关性较强,对于算法学习预测会影响较大

  • 降低随机变量的个数
    在这里插入图片描述

  • 相关特征(correlated feature)

    • 相对湿度与降雨量之间的相关
2.5.2降维的两种方式
  • 特征选择
  • 主成分分析(可以理解一种特征提取的方式)
2.5.3特征选择
2.5.3.1特征选择是什么

1.定义

数据中包含冗余或无关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。

在这里插入图片描述

2.方法

  • Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
    • 方差选择法:低方差特征过滤
    • 相关系数
  • Embedded (嵌入式):算法自动选择特征(特征与目标值之间的关联)
    • 决策树:信息熵、信息增益
    • 正则化:L1、L2
    • 深度学习:卷积等

对于Embedded方式,只能在讲解算法的时候在进行介绍,更好的去理解

3.API

sklearn.feature_selection
2.5.3.2低方差特征规律(过滤式)

删除低方差的一些特征

特征方差小:某个特征大多样本的值比较相近,说明相关性高
特征方差大:某个特征很多样本的值都有差别,说明相关性低

API

sklearn.feature_selection.VarianceThreshold

a.介绍

VarianceThreshold是一个特征选择的工具,用于移除方差低于指定阈值的特征。它减少特征的维度,提高模型的运行效率。特别适用于在数据中存在大量方差较小的无信息特征的情况。

方法

方法函数签名参数解析返回值描述
构造方法VarianceThreshold(threshold=0.0)threshold:特征方差的阈值。默认为0。VarianceThreshold对象创建VarianceThreshold对象,用于特征选择。
拟合与变换数据fit(X)X:要拟合和变换的数据。None拟合选择器并计算特征的方差。如果特征的方差低于阈值,则被移除。
数据变换transform(X)X:要变换的数据。变换后的数据数组使用先前拟合的选择器来对数据进行特征选择。
一步完成拟合和变换fit_transform(X)X:要拟合和变换的数据。
X:numpy array格式的数据[n_samples,n_features]
变换后的数据数组一次性拟合和变换数据,通常用于训练集。(训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征)
获取已选择的特征索引get_support(indices=False)indices:如果为True,则返回特征的索引。默认为False。布尔数组或整数数组返回一个布尔数组,指示哪些特征被选择。
获取保留特征的方差variances_无参数特征的方差数组返回已拟合数据的特征方差。

示例代码

from sklearn.feature_selection import VarianceThreshold

# 创建VarianceThreshold对象,默认阈值为0
selector = VarianceThreshold()

# 模拟数据
data = [[1, 2, 3],
        [1, 2, 3],
        [1, 2, 3],
        [1, 2, 3],
        [1, 2, 3],
        [1, 2, 3]]

# 拟合和变换数据
selected_data = selector.fit_transform(data)

print("Selected Data:")
print(selected_data)



# 输出
Selected Data:
[[2]
 [2]
 [2]
 [2]
 [2]
 [2]]

说明:在上面的示例中,我们首先创建了一个VarianceThreshold对象,然后使用fit_transform方法将数据进行特征选择。根据默认的阈值0,只有一个特征的方差大于0,因此只有一个特征被保留下来。

2.5.3.3相关系数(过滤式)

皮尔逊相关系数(Pearson Correlation Coefficient):反映变量之间相关关系密切程度的统计指标

公式

在这里插入图片描述

特点

相关系数的值介于–1与+1之间,即–1≤ r ≤+1。其性质如下:

  • 当r>0时,表示两变量正相关,r<0时,两变量为负相关
  • 当|r|=1时,表示两变量为完全相关,当r=0时,表示两变量间无相关关系
  • 当0<|r|<1时,表示两变量存在一定程度的相关。且|r|越接近1,两变量间线性关系越密切;|r|
    越接近于0,表示两变量的线性相关越弱
  • 一般可按三级划分:|r|<0.4为低度相关;0.4≤|r|<0.7为显著性相关;0.7≤|r|<1为高度线性相关

API

pearsonr函数

导入

from scipy.stats import pearsonr
函数签名参数返回值描述
pearsonr(x,y)x /y(数组或列表)(r, p) 元组(其中 r 是计算得到的皮尔逊相关系数,p 是相关性的显著性水平(p 值)。)计算两个连续型变量之间的皮尔逊相关系数以及相关性的显著性水平(p 值)。

示例代码

from scipy.stats import pearsonr

# 两个连续型变量的数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 1, 3, 5]

# 计算皮尔逊相关系数和 p 值
corr_coefficient, p_value = pearsonr(x, y)

# 打印结果
print("Pearson Correlation Coefficient:", corr_coefficient)
print("p-value:", p_value)


# 输出
Pearson Correlation Coefficient: 0.5
p-value: 0.31622776601683794

在示例中,pearsonr 函数计算了变量 xy 之间的皮尔逊相关系数,并返回了相关系数值和 p 值。相关系数为 0.5,表示变量 xy 之间存在正相关关系。 p 值为 0.3162,表示相关性的显著性水平。通常,如果 p 值小于显著性水平(例如 0.05),则可以认为相关性是显著的。

2.5.4主成成分分析(PCA)
2.5.4.1主成成分分析是什么
  • 定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量

  • 作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。

  • 应用:回归分析或者聚类分析当中

    对于信息一词,在决策树中会进行介绍

理解:

eg1:在这里插入图片描述

eg2:

将下列五个点(二维数据)简化成一维[线性回归]

在这里插入图片描述

这个过程如何计算的呢?找到一个合适的直线,通过一个矩阵运算得出主成分分析的结果

在这里插入图片描述

2.5.4.2主成成分分析API

sklearn.decomposition.PCA

介绍

PCA是一种常用的降维技术,用于减少数据的维度,保留最重要的特征。它通过计算数据的主成分,将高维数据映射到低维空间。主成分通常按解释方差比例排序,可以根据需要保留一定数量的主成分来降低数据维度。此外,PCA还可以用于可视化数据和去除数据中的噪声。

方法

方法函数签名参数解析返回值描述
构造方法PCA(n_components=None, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None)n_components:指定要保留的主成分数量。默认为None,保留所有主成分。(小数:表示保留百分之多少的信息;整数:减少到多少特征) copy:是否在拟合和变换时创建副本。默认为True。 whiten:是否对数据进行白化。默认为False。 svd_solver:SVD求解器的选择。默认为’auto’。 tol:收敛容忍度。默认为0。 iterated_power:迭代幂法的次数。默认为’auto’。 random_state:随机种子。默认为None。PCA对象创建PCA对象,用于主成分分析。
拟合与变换数据fit(X)X:要拟合的数据。None拟合PCA模型,并计算主成分。
数据变换transform(X)X:要变换的数据。变换后的数据数组使用先前拟合的PCA模型对数据进行降维。
一步完成拟合和变换fit_transform(X)X:要拟合和变换的数据。(X:numpy array格式的数据[n_samples,n_features])变换后的数据数组一次性拟合PCA模型并对数据进行降维,通常用于训练集。
逆变换inverse_transform(X_reduced)X_reduced:要逆变换的降维数据。原始数据数组将降维后的数据逆变换回原始数据。
获取主成分components_无参数主成分矩阵返回主成分矩阵,其中每一行代表一个主成分。
获取主成分方差解释比explained_variance_ratio_无参数方差解释比数组返回每个主成分解释的方差比例。
获取累计方差解释比explained_variance_ratio_.cumsum()无参数累计方差解释比数组返回每个主成分的累计方差解释比例。
获取均值mean_无参数均值数组返回拟合数据的均值。

示例代码

from sklearn.decomposition import PCA
import numpy as np

# 创建PCA对象,指定要保留2个主成分
pca = PCA(n_components=2)

# 模拟数据
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# 拟合和变换数据
reduced_data = pca.fit_transform(data)

print("Reduced Data:")
print(reduced_data)



# 输出
Reduced Data:
[[-2.82842712  0.        ]
 [ 0.          0.        ]
 [ 2.82842712  0.        ]]

说明:在上面的示例中,我们首先创建了一个PCA对象,并指定要保留的主成分数量为2。然后,使用fit_transform方法拟合PCA模型并对数据进行降维,将数据从3维降至2维。

                                             | 主成分矩阵         | 返回主成分矩阵,其中每一行代表一个主成分。          |

| 获取主成分方差解释比 | explained_variance_ratio_ | 无参数 | 方差解释比数组 | 返回每个主成分解释的方差比例。 |
| 获取累计方差解释比 | explained_variance_ratio_.cumsum() | 无参数 | 累计方差解释比数组 | 返回每个主成分的累计方差解释比例。 |
| 获取均值 | mean_ | 无参数 | 均值数组 | 返回拟合数据的均值。 |

示例代码

from sklearn.decomposition import PCA
import numpy as np

# 创建PCA对象,指定要保留2个主成分
pca = PCA(n_components=2)

# 模拟数据
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# 拟合和变换数据
reduced_data = pca.fit_transform(data)

print("Reduced Data:")
print(reduced_data)



# 输出
Reduced Data:
[[-2.82842712  0.        ]
 [ 0.          0.        ]
 [ 2.82842712  0.        ]]

说明:在上面的示例中,我们首先创建了一个PCA对象,并指定要保留的主成分数量为2。然后,使用fit_transform方法拟合PCA模型并对数据进行降维,将数据从3维降至2维。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值