本帖最后由 regan 于 2018-4-19 19:05 编辑
多层感知机模型亦即:Full-connection Neural Network ,网络结构如下,分为输入,隐层与输出层,除了输入层外,其余的每层激活函数均采用 sigmod ,MLP 容易受到局部极小值与梯度弥散的困扰,如下图所示:
感知机基于前向传播及方向传播来更新神经网络中的权重参数。比较经典的文章请参考:https://www.cnblogs.com/ooon/p/5577241.html,这边文章包括了前向传播,及反向传播公式推导,讲得很详细。下面引用这篇文章中的一幅gif动态图片。
多层感知机隐层采用sigmod激活函数,输出层采用softmax分类方法。
多层感知机MLPC分类算法正是基于这种感知机模型的实现,我们直接来看pyspark为我们封装并提供的多层感知机如何使用吧。
2.pyspark中的多层感知机分类模型
from pyspark.ml.classification import MultilayerPerceptronClassifierfrom pyspark.ml.evaluation import MulticlassClassificationEvaluator
data = spark.read.format("libsvm").load("/datas/multi_classification.txt")
splits = data.randomSplit([0.6, 0.4], 1234)
train = splits[0]
test = splits[1]
#指定感知机各个层神经元个数layers = [4, 16,32, 16, 3]
trainer = MultilayerPerceptronClassifier(maxIter=100, layers=layers, blockSize=128, seed=1234)
model = trainer.fit(train)result = model.transform(test)
predictionAndLabels = result.select("prediction", "label")
evaluator = MulticlassClassificationEvaluator(metricName="accuracy")
print("Test set accuracy = " + str(evaluator.evaluate(predictionAndLabels)))
多层感知机的构建非常简单,因为多层感知机各个层都是全连接层,因此只需要指定各个层神经元的个数即可,而输入维度、隐藏层维度、输入维度全部放在一个list中,通过MultilayerPerceptrionClassifier中的关键字参数layers指定。blockSize指定的是存放数据的块的大小,默认为128m,推荐范围是10~1000.
在测试集上的分类精度达到90%。
|