用MLPClassifer训练数据的神经网络

用MLPClassifer训练数据的神经网络

一个简单的神经网络

今天我们将使用的主要库叫做MLPClassifer。这个库没有任何反向传播,因此应该在具有二进制输出或输出节点很少的中小型数据集中使用。我们还将实现更多的库作为辅助工具。

我们将使用一个名为“exercise”的数据集,建立一个神经网络,根据人们的饮食和脉搏来预测人们锻炼的时间

import seaborn as sns

#import data

data = sns.load_dataset('exercise')

data.head()

从数据中我们可以明显地看到,列“kind”和“diet”是非整数值,这使得训练模型几乎是不可能的。

这就是LabelEncoder()的用武之地!

from sklearn.preprocessing import LabelEncoder

#one hot encoded the string columns

for label in ['diet', 'kind']:

data[label] = LabelEncoder().fit_transform(data[label])

我们在这里做的是将这两列的字符串值转换为一个整数,这样我们的模型可以更好地理解。

下一步是确定我们预测的产品是什么!我们将分别将数据和“target”分别放入X和Y中。

#set target and dataset or X and Y

y = data['kind']

X = data.drop(['kind'], axis = 1)

下一部分是它开始变得有趣的地方

import matplotlib.pyplot as plt

from sklearn.preprocessing import MinMaxScaler

from sklearn.neural_network import MLPClassifier

params = [{'solver': 'sgd', 'learning_rate': 'constant', 'momentum': 0,

'learning_rate_init': 0.2},

{'solver': 'sgd', 'learning_rate': 'constant', 'momentum': .9,

'nesterovs_momentum': False, 'learning_rate_init': 0.2},

{'solver': 'sgd', 'learning_rate': 'constant', 'momentum': .9,

'nesterovs_momentum': True, 'learning_rate_init': 0.2},

{'solver': 'sgd', 'learning_rate': 'invscaling', 'momentum': 0,

'learning_rate_init': 0.2},

{'solver': 'sgd', 'learning_rate': 'invscaling', 'momentum': .9,

'nesterovs_momentum': True, 'learning_rate_init': 0.2},

{'solver': 'sgd', 'learning_rate': 'invscaling', 'momentum': .9,

'nesterovs_momentum': False, 'learning_rate_init': 0.2},

{'solver': 'adam', 'learning_rate_init': 0.01}]

这里我们导入重要的模块。第一个模块是Matplotlib,我们将用它来可视化我们的神经网络。下一个是MinMaxScaler,这很重要,因为它允许我们将数据扩展为机器能够更好地处理的格式。最重要的是MLPClassifer,这很好,因为它允许我们设置不同的参数和学习风格,看哪一个最适合。

重要的是,您可以看到上面的参数。这些参数包括层数、每个层的神经元数、训练迭代数等等。所有这些都可以调整,其他的选项也可以添加到更好的性能。

def plot_on_dataset(X, y, ax, name):

# for each dataset, plot learning for each learning strategy

print("learning on dataset %s" % name)

ax.set_title(name)

X = MinMaxScaler().fit_transform(X)

mlps = []

if name == "digits":

# digits is larger but converges fairly quickly

max_iter = 15

else:

max_iter = 400

for label, param in zip(labels, params):

print("training: %s" % label)

mlp = MLPClassifier(verbose=0, random_state=0,

max_iter=max_iter, **param)

mlp.fit(X, y)

mlps.append(mlp)

print("Training set score: %f" % mlp.score(X, y))

print("Training set loss: %f" % mlp.loss_)

for mlp, label, args in zip(mlps, labels, plot_args):

ax.plot(mlp.loss_curve_, label=label, **args)

接下来我们来看一个函数它不仅绘制我们的数据它还会缩放X使用MLPClassifer和我们上面设置的参数来启动我们的神经网络。

fig, axes = plt.subplots(2, 2, figsize=(15, 10))

data_sets = [(X,y)]

for ax, data, name in zip(axes.ravel(), data_sets, ['exercise']):

plot_on_dataset(*data, ax=ax, name=name)

# can scale up to 4 I only have 1 dataset

fig.legend(ax.get_lines(), labels, ncol=2, loc="upper center")

plt.show()

最后我们设置图形和轴,同时确保我们将data_set设置为X和y。在我们做完这些之后,我们将坐标轴和数据,然后设置图形的名称,最后用plt.show()

用MLPClassifer训练数据的神经网络

正如您所看到的,Neural Net的外观并不复杂,但大多数工作都来自于模型的数据准备和调整。

相关推荐