赞
踩
原文链接:https://xiets.blog.csdn.net/article/details/130957394
版权声明:原创文章禁止转载
专栏目录:scikit-learn 专栏(总目录)
scikit-learn 官方相关网站:
其他网站(中文):https://scikit-learn.org.cn/
参考书籍:
scikit-learn 安装:详情:
$ pip3 install -U scikit-learn
scikit-learn 是基于 Python 语言的用于预测数据分析的简单高效机器学习库。它提供了用于机器学习的算法,包括 分类、回归、降维 和 聚类。它也提供了用于数据预处理、提取特征、优化超参数和评估模型的模块。
scikit-learn 基于 NumPy、SciPy 和 matplotlib 构建。开源,商业可用 - BSD 许可证。
从 输入-输出 对中进行学习的机器学习算法叫做 监督学习算法 (Supervised Learning)。在这种监督学习的算法中,用户将成对的输入和预期的输出提供给算法学习,算法会找到一种可以泛化到其他前所未见的数据中的方法,根据给定新的输入给出预测的输出。
监督学习问题主要有两种:分类(Classification) 和 回归(Regression)。
分类问题是跟进输入特征预测类别标签,输出的取值是固定的枚举值(而不是一个连续范围),表示的是定性属性(而不是数量)。例如,根据身高和体重等特征预测一个人的性别,性别只能是男性或女性,所以这是一个分类问题。
回归问题是跟进输入特征预测一个连续值,输出的取值是一个连续的浮点数范围。例如,根据性别和体重等特征预测一个人的身,身高在一个范围内可以连续取值,所以这是一个回归问题。
许多监督学习算法都能同时处理分类和回归问题,常用的监督学习算法有:最近邻、线型模型、朴素贝叶斯分类器、决策树、随机森林、梯度提升决策树、支持向量机、神经网络。
当拿到一组输入-输出对数据用于监督学习构建模型时,需要把数据的一部分用于训练模型,其余数据用于测试训练好的模型性能(预测新数据的准确度)。用于训练模型的数据叫做 训练数据(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)
代码示例:
>>> 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]
在监督学习中,使用训练数据构建模型,然后训练好的模型能够对没见过的新数据(新数据与训练集中的数据具有相同的特性)做出准确预测,我们就说模型能够从 训练集 泛化(generalize) 到 测试集。监督学习的目标是要构建一个泛化精度尽可能高的模型。
如果模型在训练集上精准度很高,但在测试集上表现却很差(无法泛化到测试集),这被称为 过拟合(overfitting)。
如果模型经过训练集训练后,在训练集上评估测试表现都很差(无法拟合训练集),这被称为 欠拟合(overfitting)。
数据只有输入特征,没有对应的预期输出,算法从这些只有输入特征的数据中提取知识,这种算法叫做 无监督学习算法 (Unsupervised Learning)。
无监督学习问题有 降维 和 聚类 等。比如根据数据的若干输入特征(没有输出),对数据进行分类(手动指定目标组数),这就是一个无监督学习的聚类问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。