如何將自己的文本數據集(CSV格式)加載進mxnet中並使用它?


對iris數據集使用mlp進行分類預測

如果你有一個自己的數據集,數據集得格式是 .csv,那么你可以按照以下步驟將數據集導進mxnet中,本教程使用iris的數據集進行示范

第一步:確定你數據集的保存位置

筆者的數據集保存在以下路徑:C:/Users/d2l-zh-1.0/data/iris.csv

數據集中的數據情況如下:

 

第二步:導入需要的庫,將csv文件讀進程序中,筆者使用pandas.read_csv讀入csv文件:

import mxnet as mx
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import d2lzh as d2l
%matplotlib inline

from sklearn.model_selection import train_test_split
from mxnet import autograd, gluon, init, nd
from mxnet.gluon import loss as gloss, nn

iris_data = pd.read_csv('C:/Users/d2l-zh-1.0/data/iris.csv')

此時,你的csv文件已經讀進了內存,對iris數據集還需要進行進一步的處理:增加iris的分類標簽

iris_data['target'] = 0
iris_data.loc[(iris_data['Class'] == 'Iris-setosa', 'target')] = 0
iris_data.loc[(iris_data['Class'] == 'Iris-versicolor', 'target')] = 1
iris_data.loc[(iris_data['Class'] == 'Iris-virginica', 'target')] = 2

增加之后的數據集情況如下:

 

第三步:使用sklearn中的train_test_split函數划分訓練集和測試集

X, y = iris_data.ix[:, 0:4], iris_data.ix[:, 5]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)

此時,數據被分成了包含112個數據的訓練集和38個數據的測試集。

 

第四步:將讀入的數據轉化為NDArray的形式

X_train_nd = nd.array(X_train.values)
X_test_nd = nd.array(X_test.values)
y_train_nd = nd.array(y_train.values)
y_test_nd = nd.array(y_test.values)

 

第五步:使用mxnet中自帶的函數 mx.io.NDArrayIter將其轉化為 train_iter和 test_iter

batch_size = 10
train_iter = mx.io.NDArrayIter(data = X_train_nd, label = y_train_nd, 
                               batch_size = batch_size)
test_iter = mx.io.NDArrayIter(data = X_test_nd, label = y_test_nd, 
                               batch_size = batch_size)

 

第六步:使用下面的類使得 train_iter和 test_iter可以迭代,如果不進行這步,后續的程序會報錯,提示 'DataBatch' object is not iterable

class DataIterLoader():
  def __init__(self, data_iter):
    self.data_iter = data_iter

  def __iter__(self):
    self.data_iter.reset()
    return self

  def __next__(self):
    batch = self.data_iter.__next__()
    assert len(batch.data) == len(batch.label) == 1
    data = batch.data[0]
    label = batch.label[0]
    return data, label

  def next(self):
    return self.__next__()

train_iter_loader = DataIterLoader(train_iter)
test_iter_loader = DataIterLoader(test_iter)

此時我們已經將一個csv數據轉換為mxnet中可以使用的 train_iter_loader 和 test_iter_loader,這兩個數據形式可以套用進我們在mxnet中學習過的模型

我們用一個mlp來測試一下:

net = nn.Sequential()
net.add(nn.Dense(100, activation='relu'),
        nn.Dense(3))
net.initialize(init.Normal(sigma=0.01))

loss = gloss.SoftmaxCrossEntropyLoss()
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.01})
num_epochs = 60
d2l.train_ch3(net, train_iter_loader, test_iter_loader, 
              loss, num_epochs, batch_size, None,
              None, trainer)

  

經過60輪的迭代,測試集精度達到了100%

這樣,我們就完成了對iris數據集使用mlp進行分類預測,如有疑問,在留言區告訴我。筆者也是剛入門mxnet,學藝不精,如有錯誤,請大家指正。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM