机器学习实现简单数据分类

                                         

目录:

  1. 简单机器学习的实现过程
  2. 简单神经网络的基本结构
  3. 简单神经网络实现数据分类的数学知识
  4. 数据分类的实现过程
  5. 利用python3.7与tensorflow1.15实现简单的数据分类
  6. 对机器学习进一步的了解.

摘要:

关键词:机器学习,神经网络,数据分类

正文

零.简单机器学习的实现过程。

机器学习(machine learning)是从数据中提取知识。它是人工智能,计算机科学与技术与数学尤其是统计学交叉的研究领域,也被称为predictive analytics或statistic learning。近年来机器学习已经被应用于人民群众日常生活的方方面面。[1]

机器学习的优秀算法应该是那些实现计算机自主决策的算法。机器学习的方法可以大致分为监督学习(supervised learning algorithm)与无监督学习(unsupervised learning algorithm)[1].监督学习,简单来说就是从事先准备好的输入输出数据集中学习。比如说,如果想实现手写数字的识别,就要提前准备大量的手写数字的照片与对应的正确答案。模型被“喂”进大量数据,之后便可以基于得到的正确答案来修改,调整原来模型中的参数,从而使模型的精确性增加。从这一角度来看,所提供的数据集规模越大,最后得到的模型就越精确。

        如果没有实现提供输出数据,就是无监督学习算法。显然,整体上说无监督学习算法要比监督学习的难度更大。

一.    简单神经网络的基本结构

神经元是存在于人体内(主要是人脑中)的一类细胞。神经元主要由树突,轴突,胞体组成。其中轴突会把神经冲动传递给下一个神经元的树突或者胞体,胞体主要负责中心计算与处理。人体内神经元的数量有大约140亿个[3]。很多的神经元连接起来,就构成了神经网络。

(图来自百度图片)

神经网络具有以下两个十分优秀的优点:[2]

  1. 大规模并行式计算结构。
  2. 神经网络的学习能力

神经网络(Artificial Neural Network),在人工智能领域,是一种仿照自然界的生物的神经结构的网络结构(主要模仿了中枢的神经系统)的数学模型,这种模型具有逻辑上的完备性,可以用于对一些数值进行预估。神经网络由大量的人工搭建的数学或逻辑学上的神经元模型连接,以这种神经元模型为基本计算单元进行相关计算。人工神经网络能在外界反馈的数据的基础上调整自身神经网络的参数,通俗的讲,就是说,神经网络具有自我学习的功能。 [2]

二.    简单神经网络实现数据分类的数学知识

了解到神经元的工作原理后,可以仿生的设计类似的信息系统;

(图来自必应图片)

如图所示,神经元“接收”“树突”传来的”刺激”(本例中是x1到xm),为了让不同方向传来的刺激有所区别,还要指定每一条树突上所对应的权值。设置中间的求和过程,使求得结果为 +b,其中第一项是输入量与权值的求和,第二项是偏置项(bias), 由McCulloch和pitts于1964年提出。之后所得的求和结果再由激活函数(activation function)处理。最后再根据处理得结果进行输出,比如定义output函数:

这样的神经元连接在一起,前面的神经元的输出作为下一个神经元的输入,就构成了神经网络。

(图片来自知乎)

三.数据分类的实现过程;

        在使用神经网络之前,是要进行训练的,而训练的过程,其实是通过反向传播来修改神经网络参数,使模型更精确的过程。比如,现在要给定n行两列的矩阵,若同一行数据相加大于0则输出1,若小于0则输出1。

       那么,就要用到前向传播与反向传播的过程了。

       前向传播就是把数据“喂”进神经网络的过程。在这里选用如图所示的神经网络结构:

        那么,可以选用1*2大小的矩阵代表一次数据传递的过程。由于有两侧需要使用参数,可以考虑用2*3矩阵存放第一层的神经元参数,用3*1矩阵存放第二层的参数。为简化表示,这里我们选择bias=0,激活函数为

        那么,记输入数据组成的矩阵为X,存放神经网络参数的矩阵分别为 经过神经网络处理后的数据就是

        但是仅仅有前向传播是不够的,为了根据结果调整神经参数,我们需要进行反向传播过程。

        首先确定描述结果“精确程度”的量,我们称之为“损失函数”。计算方法为均方误差,即:

        而我们的目标就是让loss的值尽可能的小。达成这一目的的手段有很多,较常用的是梯度下降法。梯度下降利用迭代的方法寻找目标函数的极值点。

        这样经过很多次的调整后,所得的神经网络的参数就基本满足相关要求,就可以用于实际应用了。

       

四.利用python3.7与tensorflow1.15实现简单的数据分类

        Tensorflow是由谷歌发布的一个开放源代码的的软件库,经常被用于机器学习领域,tensorflow非常的灵活,可以在不同的地方上使用,具有良好的可移植性,而且tensorflow对有关算法的封装性很好。无论是学术界还是在工业界,tensorflow的使用都很普遍。现在就来尝试利用python与tensorflow,实现识别两个0到1之间的小数的和是否大于1。

        Tensorflow可以被多种语言调用,比如python,Java,C++,Go,Swift等。这里选用python3.7与tensorflow1.15来实现数据的分类。编程环境的搭建利用了用于科学计算的python发行版anaconda.

        Tensorflow中比较基本,经常使用的数据类型被称为“张量”,可以看作多个维度的数组。比如零维张量就是平常所使用的的实数(或者称为“标量”),一维张量就是一维数组,二维张量就是二维数组。

        在tensorflow中,可以很方便的利用正态分布来生成随机的神经网络参数,再通过反向传播来调整一开始得到的参数的值。为了得到测试数据,可以调用python中另一个科学计算包numpy.

#生成随机矩阵

rng=np.random.RandomState(seed)

#返回32行2列的矩阵,表示32组测试数据

X=rng.rand(32,2)

 

        这样在指定seed的值之后,就能得到32*2大小的随机数生成的矩阵。再利用列表生成式得到“正确答案”

Y=[[int(x0+x1<1)] for(x0,x1) in X]

用代码实现前向传播的过程:

 

#定义神经网络的输入,参数和输出,定义前项传播过程

x=tf.placeholder(tf.float32,shape=(None,2))

y_=tf.placeholder(tf.float32,shape=(None,1))

 

#可以用正态分布生成随机数

w1=tf.Variable(tf.random.normal([2,3],stddev=1,seed=1))

w2=tf.Variable(tf.random.normal([3,1],stddev=1,seed=1))

 

a=tf.matmul(x,w1)

y=tf.matmul(a,w2)

 

tf.random.normal可以得到符合正态分布的随机数作为初始的神经网络参数;matmul即进行矩阵的乘法。这样就搭建了简单的神经网络

Tensorflow中对各种算法的包装已经很成熟,这样就允许用户在不是十分了解底层的算法机理的情况下实现对算法的调用。举例来说,如果希望实现梯度下降的训练过程,且希望每次对神经网络参数的更改幅度为0.001,则可以直接调用现成的方法:

import tensorflow as tf

train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss)

首先引入tensorflow模块,调用梯度下降训练方法,每次改变的步长设置为0.001,目的是最小化损失函数。

之后如果想要进行计算过程,得到最后的结果,还要用到“会话”的过程。

        整个程序的基本过程就是准备测试数据(输入数据和对应的答案),构建前向传播与反向传播的过程,经过大量次数的训练,得到合适的神经网络的参数。

设定训练次数为3000轮,在训练结束后输出神经网络的参数,可以得到以下结果:

(图片系程序运行时输出参数的截图)

这样,如果现在只提供输入数据,如果两个数的和大于1,那么计算得到的结果将非常接近1,如果两个数的和小于1,计算得到的结果应该很接近0.对最后的结果作四舍五入并输出,就可以得到最后的结果。最后运行结果精确度径本人测试,应该在80%以上。如下图所示:

       

(图片系程序运行过程中的截图)

这样,就能让程序识别两个数的和是否大于1   

(程序运行环境:win10,python3,7 tensorflow1.15,代码地址:https://github.com/OldAtaraxia/tensorflow-

五.对机器学习进一步的了解.

        以上所介绍的只是最最基本的一些内容。事实上,机器学习远比这复杂得多。线性回归,朴素贝叶斯,向量机,梯度下降,决策树……机器学习的广泛知识还正等待我们去学习,去探索。

        日常生活中,机器学习的应用十分广泛。比如拦截垃圾邮件,检测信用卡交易中的诈骗行为,检测很多篇文章的主题,检测web的不正常的访问等等。机器学习在现代社会拥有非常广泛的应用场景,从数据挖掘到模式识别,从嵌入式系统到生物信息学,从数据分析到自然语言处理,从智力活动到电子竞技,机器学习必然在未来的时代中大放异彩,成为推动社会进步,提升人民生活质量的不可或缺的一部分。

参考文献:

  1. 【德】Andreas C.Muller 【美】Sarah Guido《Python机器学习基础教程》,中国工信出版集团人民邮电出版社
  2. 高扬,卫峥,尹会生《白话大数据与机器学习》,机械工业出版社
  3. 维基百科:神经元
  4. 维基百科:神经网络
  5. 百度百科:tensorflow
  6. 维基百科:机器学习

       

 

猜你喜欢

转载自www.cnblogs.com/OldAtaraxi/p/12175140.html