当前位置:   article > 正文

Python机器学习(scikit-learn):scikit-learn 简介

scikit-learn

原文链接:https://xiets.blog.csdn.net/article/details/130957394

版权声明:原创文章禁止转载

专栏目录:scikit-learn 专栏(总目录)

scikit-learn 官方相关网站:

其他网站(中文):https://scikit-learn.org.cn/

参考书籍:

scikit-learn 安装:详情

$ pip3 install -U scikit-learn
  • 1

1. scikit-learn 简介

scikit-learn 是基于 Python 语言的用于预测数据分析的简单高效机器学习库。它提供了用于机器学习的算法,包括 分类回归降维聚类。它也提供了用于数据预处理、提取特征、优化超参数和评估模型的模块。

scikit-learn 基于 NumPy、SciPy 和 matplotlib 构建。开源,商业可用 - BSD 许可证。

2. 监督学习

输入-输出 对中进行学习的机器学习算法叫做 监督学习算法 (Supervised Learning)。在这种监督学习的算法中,用户将成对的输入和预期的输出提供给算法学习,算法会找到一种可以泛化到其他前所未见的数据中的方法,根据给定新的输入给出预测的输出。

监督学习问题主要有两种:分类(Classification) 和 回归(Regression)。

分类问题是跟进输入特征预测类别标签,输出的取值是固定的枚举值(而不是一个连续范围),表示的是定性属性(而不是数量)。例如,根据身高和体重等特征预测一个人的性别,性别只能是男性或女性,所以这是一个分类问题。

回归问题是跟进输入特征预测一个连续值,输出的取值是一个连续的浮点数范围。例如,根据性别和体重等特征预测一个人的身,身高在一个范围内可以连续取值,所以这是一个回归问题。

许多监督学习算法都能同时处理分类和回归问题,常用的监督学习算法有:最近邻、线型模型、朴素贝叶斯分类器、决策树、随机森林、梯度提升决策树、支持向量机、神经网络。

2.1 训练数据与测试数据

当拿到一组输入-输出对数据用于监督学习构建模型时,需要把数据的一部分用于训练模型,其余数据用于测试训练好的模型性能(预测新数据的准确度)。用于训练模型的数据叫做 训练数据(Training Data) 或 训练集(Training Set)。用于测试模型的数据叫做 测试数据(Test Data) 或 测试集(Test Set)。

训练集和测试集数据不能重复,不能拿训练集中出现过的数据去测试/评估模型,这样测试出的结果可能模型只是简单地记住了训练集数据,而不能泛化到新数据。

scikit-learn 中的 model_selection.train_test_split(*arrays[, ...]) 函数可以随机打乱一个矩阵数据集并进行拆分。这个函数默认将 75% 的数据及对应的标签作为训练集,剩下 25% 的数据及标签作为训练集,可以通过传递参数调整比例和打乱顺序的随机数种子。训练集与测试集的分配比例可以是随意的,但使用 25% 的数据作为测试集是很好的经验法则。

train_test_split() 函数说明:

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

# 参数说明:
#   *arrays         具有相同 长度或shape[0] 的可索引序列, 一般是包括 输入 和 输出 两组数据。
#                   允许的输入是 列表、NumPy数组、scipy-sparse矩阵 或 pandas dataframes。
#                   输入数据 一般是 NumPy 二维矩阵数组。
#                   输出数据 一般是 一维数组(列表/NumPy一维数组)。
#
#   test_size       float 或 int 或 None。测试集数据大小。
#                   如果是float, 则应介于 0.0 和 1.0 之间, 表示要包含在拆分后测试集样本数量的比例。
#                   如果是int, 表示测试集样本的绝对数量。
#                   如果是 None, 则将该值设置为 train_size 的补集, 如果 train_size 也是 None, 它将被设置为 0.25。
#
#   train_size      float 或 int 或 None。训练集数据大小, 和 test_size 含义相似。
#                   如果为 None, 则将该值设置为 test_size 的补集。 
#   
#   random_state    int 或 RandomState 或 None。应用拆分之前用于打乱数据的随机数种子。
#                   如果使用固定值, 可以确保每次打乱后的结果都一样 (一般用于可复现调试模型)。
#
#   shuffle         bool, 拆分数据集前是否打乱顺序。
#
#   stratify        数组, 如果不是 None, 则以分层方式拆分数据, 将其用作类标签。
#
#   return:         返回拆分后的 训练集 和 测试集 数据。类型为: list, length=2 * len(arrays)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

代码示例:

>>> import numpy as np
>>> from sklearn import model_selection
>>> 
>>> X = np.random.randint(0, 10, size=(5, 3))   # 输入数据, 根据习惯, 输入数据一般用大写 X 表示
>>> y = list(range(5))                          # 输出数据, 根据习惯, 输出数据一般用小写 y 表示
>>> 
>>> X                           # 输入数据, 一个二维矩阵数组, 每一行表示一个样本数据,
array([[5, 5, 4],               # 一个样本可以有多个特征, 所以用一个数组(多列)来表示一个样本数据。
       [0, 9, 2],
       [3, 5, 1],
       [2, 4, 4],
       [6, 7, 6]])
>>> y                           # 输入数据对应输出数据, 一个样本(输入数据的每一行)对应一个输出,
[0, 1, 2, 3, 4]                 # 一般情况下输出只有一个 (也有多个的情况), 所以以一维数组的形式表示。
>>> 
>>> # 拆分训练和测试数据集, 返回一个列表, 元素分别为: 训练集输入, 测试集输入, 训练集输出, 测试集输出
>>> X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, random_state=0)
>>> 
>>> X_train
array([[0, 9, 2],
       [2, 4, 4],
       [6, 7, 6]])
>>> y_train
[1, 3, 4]
>>>
>>> X_test
array([[3, 5, 1],
       [5, 5, 4]])
>>> y_test
[2, 0]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

2.1 泛化、过拟合、欠拟合

在监督学习中,使用训练数据构建模型,然后训练好的模型能够对没见过的新数据(新数据与训练集中的数据具有相同的特性)做出准确预测,我们就说模型能够从 训练集 泛化(generalize) 到 测试集。监督学习的目标是要构建一个泛化精度尽可能高的模型。

如果模型在训练集上精准度很高,但在测试集上表现却很差(无法泛化到测试集),这被称为 过拟合(overfitting)。

如果模型经过训练集训练后,在训练集上评估测试表现都很差(无法拟合训练集),这被称为 欠拟合(overfitting)。

3. 无监督学习

数据只有输入特征,没有对应的预期输出,算法从这些只有输入特征的数据中提取知识,这种算法叫做 无监督学习算法 (Unsupervised Learning)。

无监督学习问题有 降维聚类 等。比如根据数据的若干输入特征(没有输出),对数据进行分类(手动指定目标组数),这就是一个无监督学习的聚类问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/537299
推荐阅读
相关标签
  

闽ICP备14008679号