将数据输入训练器
一旦我们选择并配置了训练器,就该加载数据集了。我们已将iris数据集保存为 . CSV文件,我们将使用名为pandas的数据整理包来加载数据集。
从 .CSV 文件加载数据集的步骤
第 1 步- 首先,我们需要导入pandas包。
第 2 步- 现在,我们需要调用名为read_csv的函数来从磁盘加载 .csv 文件。
df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’,
‘petal_length’, ‘petal_width’, index_col=False)
加载数据集后,我们需要将其拆分为一组特征和一个标签。
将数据集拆分为特征和标签的步骤
第 1 步 - 首先,我们需要从数据集中选择所有行和前四列。它可以通过使用iloc函数来完成。
x = df_source.iloc[:, :4].values
第 2 步- 接下来我们需要从 iris 数据集中选择物种列。我们将使用 values 属性来访问底层的numpy数组。
x = df_source[‘species’].values
将物种列编码为数字向量表示的步骤
正如我们前面所讨论的,我们的模型是基于分类的,它需要数字输入值。因此,这里我们需要将物种列编码为数字向量表示。让我们看看它的步骤 -
第 1 步- 首先,我们需要创建一个列表表达式来迭代数组中的所有元素。然后在 label_mapping 字典中查找每个值。
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
第 2 步 - 接下来,将此转换后的数值转换为 one-hot 编码向量。我们将使用one_hot函数如下 -
def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result
第 3 步- 最后,我们需要将此转换后的列表转换为numpy数组。
y = np.array([one_hot(label_mapping[v], 3) for v in y])
检测过拟合的步骤
当您的模型记住样本但无法从训练样本中推断出规则时,这种情况就是过度拟合。借助以下步骤,我们可以检测模型的过度拟合 -
第 1 步- 首先,从sklearn包中,从model_selection模块导入train_test_split函数。
from sklearn.model_selection import train_test_split
第 2 步- 接下来,我们需要调用带有特征 x 和标签 y 的 train_test_split 函数,如下所示 -
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2,
stratify=y)
我们将 test_size 指定为 0.2 以预留 20% 的总数据。
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
向我们的模型提供训练集和验证集的步骤
第 1 步- 为了训练我们的模型,首先,我们将调用train_minibatch方法。然后给它一个字典,将输入数据映射到我们用来定义 NN 及其相关损失函数的输入变量。
trainer.train_minibatch({ features: X_train, label: y_train})
第 2 步- 接下来,使用以下 for 循环调用train_minibatch -
for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))
将数据输入训练器 - 完整示例
from import pandas as pd
df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’, index_col=False)
x = df_source.iloc[:, :4].values
x = df_source[‘species’].values
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result
y = np.array([one_hot(label_mapping[v], 3) for v in y])
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2, stratify=y)
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
trainer.train_minibatch({ features: X_train, label: y_train})
for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))