Python 教程

Python 教程 Python 简介 Python 历史 Python 下载安装 Python 入门 Python 语法 Python 注释 Python 变量 Python 数据类型 Python 数值类型 Python 类型转换 Python 字符串 Python 布尔值 Python 运算符 Python 列表 Python 元组 Python 集合 Python 字典 Python If...Else Python While 循环 Python For 循环 Python 函数 Python Lambda Python 数组 Python 类和对象 Python 继承 Python 迭代 Python 作用域 Python 模块 Python 日期时间 Python 数学运算 Python JSON Python 正则表达式 Python PIP Python Try...Except Python 用户输入 Python 字符串格式化

Python 文件处理

Python 文件处理 Python 打开文件 Python 创建/写入文件 Python 删除文件

Python NumPy

NumPy 简介 NumPy 入门 NumPy 创建数组 NumPy 数组索引 NumPy 数组裁切 NumPy 数据类型 NumPy 副本 vs 视图 NumPy 数组形状 NumPy 数组重塑 NumPy 数组迭代 NumPy 数组连接 NumPy 数组拆分 NumPy 数组搜索 NumPy 数组排序 NumPy 数组过滤 NumPy 随机数 NumPy ufunc 通用函数

Python SciPy

SciPy 简介 SciPy 入门 SciPy 常量 SciPy 优化器 SciPy 稀疏数据 SciPy 图表 SciPy 空间数据 SciPy Matlab 数组 SciPy 插值 SciPy 统计显着性检验

Python 机器学习

Machine 机器学习入门 Machine 平均中位数模式 Machine 标准差 Machine 百分位数 Machine 数据分布 Machine 正态数据分布 Machine 散点图 Machine 线性回归 Machine 多项式回归 Machine 多元回归 Machine 缩放 Machine 训练/测试 Machine 决策树

Python MySQL

MySQL 入门 MySQL Create Database MySQL Create Table MySQL Insert MySQL Select MySQL Where MySQL Order By MySQL Delete MySQL Drop Table MySQL Update MySQL Limit MySQL Join

Python MongoDB

MongoDB 入门 MongoDB 创建数据库 MongoDB 创建集合 MongoDB 插入 MongoDB 查找 MongoDB 查询 MongoDB 排序 MongoDB 删除 MongoDB 删除集合 MongoDB 更新 MongoDB 限制

Python 参考手册

Python 参考手册 Python 内置函数 Python 字符串方法 Python 列表/数组方法 Python 字典方法 Python 元组方法 Python 集合方法 Python 文件方法 Python 关键字 Python 内置异常 Python 词汇表

Python 模块参考

Python 随机模块 Python 请求模块 Python 统计模块 Python 数学模块 Python cMath模块

Python 如何使用

Python 删除列表重复项 Python 反转字符串 Python 添加两个数字

Python 高级教程

Python 常用指引 将Python2代码迁移到Python3 将扩展模块移植到 Python3 Curses 编程 描述器使用指南 函数式编程指引 日志常用指引 日志操作手册 正则表达式使用指南 套接字编程指南 排序指南 Unicode 指南 如何利用urllib包获取网络资源 Argparse 教程 ipaddress 模块介绍 Argument Clinic 的用法 使用DTrace和SystemTap检测CPython 对象注解属性的最佳实践

Python 实例

Python 实例 Python 编译器 Python 练习 Python 测验 NumPy 测验 SciPy 测验


机器学习 - 训练/测试

评估模型

在机器学习中,我们创建模型来预测某些事件的结果,就像在上一章中当我们了解重量和发动机排量时,预测了汽车的二氧化碳排放量一样。

要衡量模型是否足够好,我们可以使用一种称为训练/测试的方法。


什么是训练/测试

训练/测试是一种测量模型准确性的方法。

之所以称为训练/测试,是因为我们将数据集分为两组:训练集和测试集。

80% 用于训练,20% 用于测试。

您可以使用训练集来训练模型。

您可以使用测试集来测试模型。

训练模型意味着创建模型。

测试模型意味着测试模型的准确性。


从数据集开始

从要测试的数据集开始。

我们的数据集展示了商店中的 100 位顾客及其购物习惯。

实例

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

plt.scatter(x, y)
plt.show()

结果:

x 轴表示购买前的分钟数。

y 轴表示在购买上花费的金额。

运行实例 »


拆分训练/测试

训练集应该是原始数据的 80% 的随机选择。

测试集应该是剩余的 20%。

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]


显示训练集

显示与训练集相同的散点图:

实例

plt.scatter(train_x, train_y)
plt.show()

结果:

它看起来像原始数据集,因此似乎是一个合理的选择:

运行实例 »


显示测试集

为了确保测试集不是完全不同,我们还要看一下测试集。

实例

plt.scatter(test_x, test_y)
plt.show()

结果:

测试集也看起来像原始数据集:

运行实例 »


拟合数据集

数据集是什么样的?我认为最合适拟合的是多项式回归,因此让我们画一条多项式回归线。

要通过数据点画一条线,我们使用 matplotlib 模块的 plot() 方法:

实例

绘制穿过数据点的多项式回归线:

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))

myline = numpy.linspace(0, 6, 100)

plt.scatter(train_x, train_y)
plt.plot(myline, mymodel(myline))
plt.show()

结果:

运行实例 »

此结果可以支持我们对数据集拟合多项式回归的建议,即使如果我们尝试预测数据集之外的值会给我们带来一些奇怪的结果。例如:该行表明某位顾客在商店购物 6 分钟,会完成一笔价值 200 的购物。这可能是过拟合的迹象。

但是 R-squared 分数呢? R-squared score很好地指示了我的数据集对模型的拟合程度。


R2

还记得 R2,也称为 R平方(R-squared)吗?

它测量 x 轴和 y 轴之间的关系,取值范围从 0 到 1,其中 0 表示没有关系,而 1 表示完全相关。

sklearn 模块有一个名为 r2_score() 的方法,该方法将帮助我们找到这种关系。

在这里,我们要衡量顾客在商店停留的时间与他们花费多少钱之间的关系。

实例

我们的训练数据在多项式回归中的拟合度如何?

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))

r2 = r2_score(train_y, mymodel(train_x))

print(r2)
亲自试一试 »

注释: 结果 0.799 显示关系不错。

引入测试集

现在,至少在训练数据方面,我们已经建立了一个不错的模型。

然后,我们要使用测试数据来测试模型,以检验是否给出相同的结果。

实例

让我们在使用测试数据时确定 R2 分数:

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))

r2 = r2_score(test_y, mymodel(test_x))

print(r2)
亲自试一试 »

注释: 结果 0.809 表明该模型也适合测试集,我们确信可以使用该模型预测未来值。


预测值

现在我们已经确定我们的模型是不错的,可以开始预测新值了。

实例

如果购买客户在商店中停留 5 分钟,他/她将花费多少钱?

print(mymodel(5))
运行实例 »

该例预测客户花费了 22.88 美元,似乎与图表相对应: