likes
comments
collection
share

机器学习基础-监督学习-训练数据

作者站长头像
站长
· 阅读数 8

在机器学习中,训练数据是用于训练模型的数据集合。训练数据包含一系列的样本,每个样本都包含了一个特征向量和一个对应的标签。特征向量表示了样本的特征,标签则是我们要预测的目标。通过训练数据,我们可以训练出一个模型,用于预测未知数据的标签。

下面我们来看一个简单的示例,说明如何使用训练数据训练一个线性回归模型:

假设我们有一个训练数据集合包含 mmm 个样本 (x1,y1),(x2,y2),…,(xm,ym)(\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), \ldots, (\mathbf{x}_m, y_m)(x1,y1),(x2,y2),,(xm,ym),其中 xi\mathbf{x}_ixi 是一个 nnn 维的特征向量,yiy_iyi 是对应的标签。我们的目标是学习出一个线性回归模型,将输入特征向量 x\mathbf{x}x 映射到标签 yyy,即:

hθ(x)=θ0+θ1x1+θ2x2+...+θnxn=θTxh_\theta(\mathbf{x}) = \theta_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_n = \theta^T\mathbf{x}hθ(x)=θ0+θ1x1+θ2x2+...+θnxn=θTx

其中 θ0,θ1,…,θn\theta_0, \theta_1, \ldots, \theta_nθ0,θ1,,θn 是模型的参数,需要通过训练数据来学习。我们定义模型的预测值和真实值之间的误差为:

Error(θ)=12m∑i=1m(hθ(xi)−yi)2\mathbf{Error}(\theta) = \frac{1}{2m} \textstyle\sum_{i=1}^{m} (h_\theta(\mathbf{x}_i)-y_i)^2Error(θ)=2m1i=1m(hθ(xi)yi)2

我们的目标是找到一组参数 θ\thetaθ,使得误差最小。可以使用梯度下降法来最小化误差,更新参数的公式为:

θj=θj−α∂Error(θ)∂θj\theta_j = \theta_j - \alpha\frac{\partial\mathbf{Error}(\theta)}{\partial\theta_j}θj=θjαθjError(θ)

其中 α\alphaα 是学习率,控制参数的更新步长。梯度下降法的过程就是不断迭代更新参数 θ\thetaθ,直到误差收敛。

下面是一个简单的 Python 代码示例,演示如何使用梯度下降法训练一个线性回归模型:

import numpy as np

# 训练数据
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y = np.array([3, 7, 11, 15])

# 初始化模型参数
theta = np.zeros(2)

# 定义模型
def h(X, theta):
    return np.dot(X, theta)

# 定义误差函数
def error(X, y, theta):
    m = len(y)
    return 1.0 / (2 * m) * np.sum((h(X, theta) - y) ** 2)

# 定义梯度函数
def gradient(X, y, theta):
m = len(y)
return 1.0 / m * np.dot(X.T, h(X, theta) - y)

# 定义梯度下降函数
def gradient_descent(X, y, theta, alpha, num_iters):
    for i in range(num_iters):
        theta -= alpha * gradient(X, y, theta)
        if i % 100 == 0:
            print("Iteration {}: error = {}".format(i, error(X, y, theta)))
            return theta

# 调用梯度下降函数训练模型
theta = gradient_descent(X, y, theta, alpha=0.01, num_iters=1000)

# 输出模型参数
print("theta =", theta)

在这个示例中,我们首先定义了训练数据 XXX 和标签 yyy,然后初始化了模型参数 θ\thetaθ。接着我们定义了模型函数 h(x,θ)h(\mathbf{x}, \theta)h(x,θ)、误差函数 Error(θ)\mathrm{Error}(\theta)Error(θ) 和梯度函数 ∇θError(θ)\nabla_{\theta} \mathrm{Error}(\theta)θError(θ)。最后我们调用了梯度下降函数 gradient_descent(),将训练数据 XXX、标签 yyy、模型参数 θ\thetaθ、学习率 α\alphaα 和迭代次数 num_iters 作为输入,训练出了一个线性回归模型,并输出了最终的模型参数 θ\thetaθ

需要注意的是,训练数据的质量对模型的性能影响很大。如果训练数据的样本数量太少、特征过于简单或者样本中存在较大的噪声,都会导致模型的泛化性能不佳。因此,在选择训练数据时需要仔细考虑,确保数据集合足够大、特征丰富,并且尽量去除噪声数据。

在监督学习中,训练数据的准备和处理是非常重要的。以下是一些常见的训练数据处理方法:

  1. 数据清洗:数据清洗是指对原始数据进行去重、缺失值填充、异常值处理等操作,以保证数据的质量。数据清洗通常是数据处理的第一步,可以使用 Python 中的 pandas 库进行实现。

  2. 特征提取和特征选择:特征提取是指从原始数据中提取有意义的特征,以便更好地表达数据的本质特性。特征选择则是从已经提取出的特征中选择最重要的特征,以减少模型的复杂度。常用的特征提取方法包括 PCA(主成分分析)、LDA(线性判别分析)和文本特征提取等方法。

  3. 数据转换和标准化:数据转换是指将数据从一种形式转换为另一种形式,比如将分类数据转换为数值型数据。数据标准化则是将数据进行缩放和归一化,以便更好地适应模型。常用的数据标准化方法包括 Z-score 标准化、最大最小值标准化等方法。

以上方法不一定适用于所有的监督学习任务,具体应根据任务的特性进行选择和调整。例如,对于图像分类任务,常用的特征提取方法是使用卷积神经网络(CNN)进行特征提取。在实际应用中,特征提取和数据处理通常是一个迭代的过程,需要不断调整和优化以获得更好的模型性能。

总之,训练数据的准备和处理是监督学习中非常重要的一步,良好的数据处理可以有效提高模型的泛化能力和性能。

转载自:https://juejin.cn/post/7226910005144354876
评论
请登录