训练/测试 概念
前面学了线性回归,多项式回归,知道给一堆单维度的数据,可以得到模型,并根据x得到y。
第二节学了多元回归,知道给多个维度的数据,去得到模型(距离只有线性),同时方便不同维度的数据比较,需要进行归一化。
本节来说两个常规概念,训练和测试。
以前面的例子,把x和y投入到线性回归对象==训练,给x通过模型得到y==测试。
什么是训练/测试
训练/测试是一种测量模型准确性的方法。
之所以称为训练/测试,是因为我们将数据集分为两组:训练集和测试集。
80% 用于训练,20% 用于测试。
您可以使用训练集来训练模型。
您可以使用测试集来测试模型。
训练模型意味着创建模型。
测试模型意味着测试模型的准确性。
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
这个不是刚才的numpy.linspace(1, 22, 100),是 numpy.random.normal,是正泰分布。
x:是一个包含100个元素的数组,其中的每个元素是从均值为3、标准差为1的正态分布中随机生成的。这意味着x包含了100个从3附近随机采样的数值。y:是一个包含100个元素的数组,其中的每个元素是从均值为150、标准差为40的正态分布中随机生成的,然后再除以相应的x值。这样做的目的是为了创建一个具有一定相关性的数据集,其中 y 值随着 x 值的变化而变化。
如果只有一份数据,那就是80%去做训练,得到模型,拿20%去做测试,看看准确性。
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
实例
import numpy
import matplotlib.pyplot as plt
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]
# 多项式回归,根据训练数据进行多项式回归后得到模型
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
# 画出原始数据
plt.scatter(train_x, train_y)
# 画出回归曲线
myline = numpy.linspace(0, 6, 100)
# plt.plot(myline, mymodel(myline))
# plt.show()
# 计算拟合度
r2 = r2_score(train_y, mymodel(train_x))
# 引入测试集,计算拟合度,如果和训练集的拟合度差不多,则说明测试集
test_x = x[80:]
test_y = y[80:]
r22 = r2_score(test_y, mymodel(test_x))
print(r2,r22)
# 预测,如果这里有过归一化,那这个5也要归一化后再输入模型
print(mymodel(5))
上面应该很好的解释了,
训练(拿训练数据放到回归计算中训练得到回归模型)
测试(拿测试数据放到模型中计算拟合度,看看测试数据是否差不多)
预测(单个数据放到模型,得一个结果)