pyspark分类算法之多层感知机神经网络分类器模型实践【MLPClassifier】

         继上文的集成学习模型之后,本文实践使用的pyspark提供的多层感知机神经网络模型,这是一种比较简单但是却又很重要的神经网络模型。MLP是一种前向结构的人工神经网络,映射一组输入向量到一组输出向量。MLP可以被看做是一个有向图,由多个节点层组成,每一层全连接到下一层。除了输入节点,每个节点都是一个带有非线性激活函数的神经元(或称处理单元)。一种被称为反向传播算法的监督学习方法常被用来训练MLP。MLP是感知器的推广,克服了感知器无法实现对线性不可分数据识别的缺点。多层感知器(Multi-Layer Perceptron,MLP)也叫人工神经网络(Artificial Neural Network,ANN),除了输入输出层,它中间可以有多个隐层。最简单的MLP需要有一层隐层,即输入层、隐层和输出层才能称为一个简单的神经网络。

       一个简单的MLP结果示意图如下所示:
 

pyspark分类算法之多层感知机神经网络分类器模型实践【MLPClassifier】_第1张图片

       也可以是这样的:

pyspark分类算法之多层感知机神经网络分类器模型实践【MLPClassifier】_第2张图片

       上面是隐藏层只有一层的MLP神经网络模型,下面是隐藏层为两层的神经网络结果示意图: 

 

pyspark分类算法之多层感知机神经网络分类器模型实践【MLPClassifier】_第3张图片

      同样,下面贴一下自己学习pyspark以来的记录笔记,具体如下:

    pyspark顾名思义就是由python和spark组合使用的。Spark提供了一个Python_Shell,即pyspark,从而可以以交互的方式使用Python编写Spark程序。有关Spark的基本架构以及pyspark环境配置相关的内容本篇博客就不再多加阐述了,网络上也有很多不错的讲解。

      pyspark里最核心的模块是SparkContext(简称sc),最重要的数据载体是RDD。RDD就像一个NumPy array或者一个Pandas Series,可以视作一个有序的item集合。只不过这些item并不存在driver端的内存里,而是被分割成很多个partitions,每个partition的数据存在集群的executor的内存中。

       接下来回归正题,基于pyspark的MLP分类模型实现如下:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division
 
 
'''
__Author__:沂水寒城
功能: pyspark 机器学习实践之【多层感知器分类器模型】
'''
 
 
 
import findspark
findspark.init()
import pyspark
from pyspark import SparkConf
from pyspark.ml import Pipeline
from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
from pyspark.ml.classification import DecisionTreeClassifier
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
from pyspark.ml.feature import StringIndexer, VectorIndexer,IndexToString
 
 
 
conf=SparkConf().setAppName('MLDemo')
sc = SparkContext('local')
spark = SparkSession(sc)
 
 
def MLPClassifier(data="mllib/sample_multiclass_classification_data.txt"):
    '''
    多层感知器分类器(MLPC)是基于前馈人工神经网络的分类器。 MLPC由多层节点组成。 每层完全连接到网络中的下一层。 输入层中的节点表示输入数据。 所有其他节点通过输入与节点权重w和偏差b的线性组合将输入映射到输出,并应用激活函数。
    多层感知机分类器
    '''
    #加载LIBSVM格式的数据集
    data = spark.read.format("libsvm").load(data)
    #训练集、测试集划分
    splits = data.randomSplit([0.6, 0.4], 1234)
    train = splits[0]
    test = splits[1]
    #指定神经网络的层
    #输入层4个神经元,隐藏层两层神经元数量分别为:5、4,输出层3个神经元
    layers = [4, 5, 4, 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)))


 
if __name__=='__main__':
    MLPClassifier(data="mllib/sample_multiclass_classification_data.txt")

        结果输出如下:
 

pyspark分类算法之多层感知机神经网络分类器模型实践【MLPClassifier】_第4张图片

      本文MLP神经网络模型输入的是多分类的数据集,可以看到在多分类的情况下MLP达到了90%以上的准确度,整体的性能来说还是很不错的。
 

你可能感兴趣的:(编程技术,机器学习,大数据,软件工具使用)