Author Archive: 香蕉与打火机

About 香蕉与打火机

李小蕉!

机器学习总结——1.基础模型与算法:线性模型、决策树、神经网络、支持向量机、聚类

 

西瓜书初识机器学习,书中涉及十几种算法模型,由简入难,逐一推敲,不禁愈加陷入数学与算法的泥潭。苦苦挣扎,惊觉何不跳脱,尝试抓取各算法的核心本质。以期轻装上阵,一窥机器学习真容。

一.线性模型

线性模型的核心本质,在于,试图学得一个通过属性的线性组合(多维1阶)来进行预测的函数(西瓜书P53)。

二.决策树与随机森林

决策树的核心本质,在于,通过对数据的学习,选定判断节点,构造一颗合适的决策树,该树的叶子节点即为确定的分类权值(流到叶子的数据归为某一确定的判断)。最终通过将任意输入数据归类到某一叶子的方法,进行预测或者分类。

随机森林即通过区分样本及特征的方式组合多个决策树,可以解决单个决策树泛化能力弱的不足。(引1)

三.神经网络

神经网络的核心本质,在于,根据数据模型定义一系列神经元模型,再通过神经元的串联与并列,编织一个网络,实现复杂、非线性可分问题。

神经元模型的本质为一个“激活”函数(阶跃函数),其输入为多元函数,或者向量,输出为向量的激活与否。

神经网络的本质是由若干神经元模型相互(嵌套)代入形成。单层神经元网络,与章节初的线性模型等价,用于解决线性可分问题;要解决非线性可分问题,需使用多层功能神经元。输出层与输入层之间的一层或多层神经元,都称为隐层(hidden layer)。每层神经元与下一层神经元全互联,神经元之间不存在同层互连,也不存在跨层连接。

在神经网络中,控制误差并训练神经网络求得最优解的方式是“调参”,或者为在参数空间的参数寻优过程。挑选或者调节各神经元的输入参数值的过程,叫做参数寻优,最耳熟能详的算法为梯度搜索(梯度下降)——误差函数梯度最陡的路线,即能使得误差最快达到最小的路线。梯度下降法就是沿着误差函数的负梯度方向搜索最优解,若误差函数在当前点的梯度为零,则已达到局部极小,参数的迭代更新将在此点停止(认为搜索结束)。如果误差函数具有多个局部最小,那可能因为陷入当前的局部最小导致无法找到全局最小,因此还要考虑“跳出”局部最小的策略(均为启发式,没有理论保障)(P107):

  1. 以多组不同参数值初始化神经网络,相当于从湖泊的上中下游各处开船出发,逼近湖心岛;
  2. 模拟退火;
  3. 随机梯度下降:反其道行之,降低一点梯度下降精度,即,人为制造扰乱或者随机,增大跳出局部极小的几率。

附言,深度学习

神经网络是深度学习的基础,典型的深度学习模型就是很深层的神经网络——最简单的办法就是增加隐层的数目。(P113)

深度学习的难点有:

  1. 在多隐层环境下难以收敛误差,获得稳定状态解;
  2. 如何对上百亿个参数的大型深度学习模型进行设计,节省训练开销;
  3. 用于现实任务时,难以设计出好的特征,如何通过机器学习技术自身产生好特征。

四.支持向量机(Support Vector Machine)

 

实质是对线性可分问题寻找最优分割面,即找到具有“最大间隔”的划分超平面。其关键是如何从支持向量构建出解,学习器的复杂度主要与支持向量的数目有关。实际训练样本存在的问题是其往往不能线性可分,解决的办法是将样本从原始空间映射到一个更高维的特征空间。样本映射到一个合适的特征空间是决定支持向量机性能的关键因素。任何一个核函数都隐式的定义了一个特征空间,但现实样本映射到的特征空间对应哪个核函数我们无法确定,因此反推,只要选到合适的核函数就意味着特征空间是合适的。

支持向量机在文本分类任务中具有卓越的性能。

五.贝叶斯分类器

在概率框架下实施决策。基于后验概率(实际往往是根据假设和样本计算后验概率)找到误判损失最小的类别标记方法。往往基于属性条件的独立性假设。虽然算法的基石就是基于前述假设,在现实应用中很难成立,但是朴素贝叶斯分类器在很多很多情况下都能获得相当好的性能。

六.聚类与决策树的区别

聚类

输入西瓜

输出聚类找出的各类属性:瓜蒂直,瓜蒂扭曲,纯色,有花纹,声音脆,声音闷,密度,含糖率……

决策树:

输入西瓜各个特征及是否好吃的结果

输出具有哪些特征的西瓜好吃。

 

引1:https://www.cnblogs.com/fionacai/p/5894142.html

 

stanford CS 20SI: Tensorflow for Deep Learning Research——Overview of Tensorflow

课程视频:https://www.bilibili.com/video/av9156347/?from=search&seid=6905181275544516403#page=1

课表:http://web.stanford.edu/class/cs20si/syllabus.html

命令演示:

 

slides_01

贝叶斯公式

看西瓜书看到了“最小二乘法”

https://baike.baidu.com/item/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%98%E6%B3%95/2522346?fr=aladdin

https://www.zhihu.com/question/37031188

解释中涉及到了中心极限定理。

翻概率论翻中心极限定理时,首先学起了贝叶斯公式。

贝叶斯公式用朴素的概念理解有些困难,找到以下内容,慢慢看:

数学之美番外篇:平凡而又神奇的贝叶斯方法

http://blog.csdn.net/u011240016/article/details/52730807

https://www.zhihu.com/question/51448623

https://www.zhihu.com/question/21134457

http://www.xuyankun.cn/2017/05/13/bayes/

 

最重要的,现在要回到西瓜书上来。。。

 

linux sftp user jailed into home directory

  • Check openssh version(Should newer than 4.8)

  • Edit ssh configuration file

  • Comment lines ‘Subsystem *’, add line:

  • Add lines from bottom of the conf file

  • Restart sshd service:

  • Create group

  • Create user

  • Correct directory ownership

  • Give password to your sftp user

 

 

 

 

 

 

 

 

 

scala的foreach功能使用java的List类型问题

在对java的List类型使用scala的foreach时,idea报错。

scala的foreach使用java数据类型出错

经查,原来scala的foreach是不能用于java数据类型的。程序写的太low了,应该将java的底子完全舍弃,在建立数据类型的时候直接使用scala的数据类型,才能更好的使用scala的语言特性。

work around:

增加一句:

不过还是建议直接用scala的数据类型吧。

参考链接:http://alvinalexander.com/scala/converting-java-collections-to-scala-list-map-array