tensorflow 实践 (1)机器学习

来源:互联网 发布:linux抓包命令 编辑:程序博客网 时间:2024/06/05 22:44

注:本系列是博主在学习了一段时间后自己总结的,博主也一直在学习,为此特地申请一个csdn帐号来记录生活的点点滴滴。博客仅表述作者自己观点,欢迎拍砖,如有错误,请各位大牛指出,谢谢。
何为机器学习
如果把一件事情,或者一个结果归为一个函数,那么机器学习这个技术要做的就是通过大量的合理的数据拟合这个函数,而机器学习工作者,就是用或者构造这么个函数,学者则是发明一个这样的函数。函数的自变量可以是任何与事件有关的属性,甚至无关的都可以,这个自变量的选择,也是考验机器学习工作者的一项非常重要的技术。

result = f(x)

比如对于一个y=x为决策线的一个分类
x1 = [0.3,0.2], y1 = [0];
x2 = [5.6,5.5], y1 = [0];
x3 = [3.7,4.0], y3 = [1];
x4 = [2.7,3.2], y4 = [1];
……
对于这样一个数据集,大部分的机器学习算法来讲,大部分分类算法都是这么一个流程:

  1. 数据预处理。得到 [X,lable]
  2. 构造一个模型,以及对各种参数合理的初始化。得到f(x)
  3. 构造一个损失函数,即优化的目标函数。得到loss function(x,y)
  4. 用步骤1中的数据,通过某些方法,求解这个目标函数的最优解

这四步在我看来都非常重要,甚至有种前后关联,一步出错,整个框架都不会好。限于作者知识水平,下面大体讲一下,具体可以百度,或者google。
数据预处理
预处理相当重要,大体可以分为以下几个步骤:

  1. 初始数据获取(spider)
  2. 数据清洗
  3. 数据集成
  4. 数据变换 (tf-idf)
  5. 数据归约 (立方体聚集,标准化,归一化,离散化,概念分层等)

在这几步中数据清洗尤为重要,数据清洗的目的和作用就是去噪,用于清洗掉脏数据,如果让脏数据进入到了后续步骤,再进入机器学习的时候,就会产生”垃圾进垃圾出”的现象。
构造一个模型
这个模型可以说就是机器学习算法,或者说是框架。比如KNN,Kmeans聚类或者一些网络:cnn,rnn,gan或者他们扩展的某些深度学习网络等等。这些算法,框架都非常好,是人类知识的结晶。模型没有好坏,只有适合不适合!想KNN,KNN在图像分类等某些高维度的数据中,表现的都不是很好,但在某些低维度的数据集中却表现的很好。
机器学习工作者的工作之一就是选择适合场景的模型进行数据建模。比如图像分类用CNN,RNN,自然语言处理,垃圾邮件分类用贝叶斯网络,SVM等等。
损失函数
在作者眼中,大部分的损失函数都是在定义模型计算结果与标准结果的相似度,是一种度量学习。
最常用的就是二范数:

l(x) = (f(x)-y)^2 #单个样本

这个很容易理解,二范数的意义就是计算了f(x)结果与实际结果的偏差,而平方又使得单个结果为正,求和的时候避免来有正有负造成损失函数小而实际模型非常差的误差。
交叉熵

  • (y * log(f(x)))

交叉熵是基于概率,计算两个概率之间的距离。根据公式它也是永正,跟二范数一样可以通过最小化代价函数得到好的模型。
优化器
下面一下tensorflow中常用的优化器(optimizer):
tf.train.GradientDescentOptimizer
tf.train.AdadeltaOptimizer
tf.train.AdagradOptimizer
tf.train.MomentumOptimizer
tf.train.AdamOptimizer
tf.train.FtrlOptimizer
tf.train.RMSPropOptimizer #alpha-Go

官方文档链接

推荐书籍:
tensorflow实战Google深度学习框架
面向机器智能的tensorflow实践

原创粉丝点击