前言
这部分不是要介绍哪个具体的机器学习算法,前面做了一些机器学习的算法,本人在学习的过程中也去看别人写的材料,但是很多作者写的太难懂,或者就是放了太多的公式,所以我就想我来写点这方面的材料可以给大家参照,当然,由于本人才疏学浅,在写博客或者在写程序的过程中有什么不合理或者说错误的地方,还劳烦各位多多指出,因为有你们的支持才能体现出我做这些工作的价值。
由于博客会越来越多,在这里我想对上面做的机器学习相关的博客做个目录,方便各位查看,这个目录也会一直更新。
一、引言
李航老师指出,机器学习=模型+策略+算法。这里的模型在监督学习中就是指所要学习的条件概率或者决策函数;策略指的是如何定义损失函数或者风险函数。算法主要指的是如何去优化损失函数。所以在学习机器学习的过程中,有必要去了解一下优化函数。
二、优化算法
优化函数有很多种,凸优化本身也是一门学问,在我已经做的工作中有如下一些优化方法:
1、梯度下降法
梯度下降法是机器学习中使用最为广泛的一种优化算法。
2、人工蜂群算法(ABC)
以下的算法都属于智能优化算法,不但能够解决凸优化问题,更能够解决一些存在局部极值的问题,具有更加广泛的应用。
3、粒子群算法(PSO)
与ABC一样,都属于群智能优化算法。我的还有一些工作还没有写出来,我还做了差分进化算法DE和遗传算法GA,这个工作会在近期放到博客上。
三、分类算法
分类算法是一个大类,主要是一些常见的算法的常见用法,主要有以下一些:
1、k-近邻算法
k-近邻算法是一种简单的算法,基本的算法思想是通过相似性的比较,最终得到最相似的k类中最为相似的,在k-近邻算法中有几个很重要的地方:第一是k的取值,当然在我的博客中也没指出具体怎么取,其实k的取值就是模型的选择,模型的选择可以采用交叉验证的方式或者通过正则化的方式,显然这里是采用交叉验证的方式。第二点就是相似性的度量,有很多文章在写相似性的文章,但是具体各种相似性的度量方法应用在具体什么问题中,我也还在摸索,希望能给大家写一篇详细点的出来,也欢迎各位看到好的材料推荐给我。
2、决策树之ID3算法
在ID3算法中主要使用的是信息熵的概念,熵表示的是数据的混乱程度,我们分类的目标是使得最终的每个类中的数据属于同一个类,即数据不再混乱,所以每次选择一个特征,这个特征使得分类后的熵下降最快,所以就引入了信息增益的概念。
3、朴素贝叶斯
朴素贝叶斯是对特征做最基本的假设,即每个特征都是独立的且都是同等重要。朴素贝叶斯比较适合处理文本相关的分类问题,一直以来都还没把实验补上。。。
4、Logistic回归
Logistic回归主要是通过系数来选择特征,对不同的特征赋予不同的权重,最终对数据分类。
5、Rosenblatt感知机
地址1,基本解法,地址2,对偶解法。Rosenblatt感知机是神经网络的基础,主要是通过查找误分类点来计算神经网络的权重和偏置,以使得所有的数据都能正确被分类,这里就说明了Rosenblatt感知机只能处理线性可分的问题。
6、神经网络之BP神经网络
BP算法可以说是神经网络中最为基本的一种算法,也是最重要的一种算法,因为其他的一些神经网络类的算法都是在此基础上。BP神经网络主要是一种单隐层前馈神经网络,在BP算法中通过信息的前向传播,得到误差,再通过误差的反向传播去调整神经网络的权重和偏置。这里将梯度下降法运用到了极致。很基础的算法,也是相当重要的一种算法,思想尤为重要。
7、极限学习机(ELM)
极限学习机是由黄广斌老师提出的一种神经网络系的算法,为什么把它放到这些基本的机器学习算法中,我个人觉得黄老师在设计ELM算法时,有些基本的思想是很重要的,ELM的模型和BP神经网络是一样的,都是单隐层前馈神经网络,只是ELM不是迭代的算法,通过信息的前向传播便能构造一个线性方程组,然后通过广义逆的方式求解线性方程组,这样大大节省了训练的时间。
8、支持向量机(SVM)
SVM在机器学习算法中的地位是很高的,SVM有着很强的数学基础,主要分为线性可分支持向量机,线性支持向量机(和非线性支持向量机。对于支持向量机的算法实现,主要是序列最小优化算法,这部分还没有完成,希望下次能够用Java语言去完整实现一个SVM。
四、回归算法
回归算法主要处理连续型的问题,主要的算法有如下的一些:
1、基本的线性回归与局部加权线性回归
在这个方面主要实现了基本的线性回归和局部加权线性回归。主要通过正规方程组的方式求解权重。在线性回归中最容易出现过拟合和欠拟合的问题,所以引入局部加权线性回归,通过权重调节每个特征的重要程度。
2、基本线性回归的另类实现
在这里可以使用广义逆求解其权重,这也是在ELM中学到的一点。
3、岭回归
岭回归主要还是在处理过拟合的问题,我们需要找到方差和偏差折中的算法,岭回归主要是通过正则项去做模型的选择。
五、聚类算法
聚类算法主要还是一种无监督的学习算法,通过不同的方式使具有相同结构的数据聚集在一起,聚类算法远不止我列出来的这些,还有很多,我也会在以后继续添加更多的聚类算法,我实现的主要有以下的一些聚类方法:
1、K均值(K-Means)
K-Means首先随机初始化k个聚类中心,通过迭代的方式不断调整聚类中心,知道k个聚类中心不再改变为之。在K-Means算法中,和K-近邻算法一样,这里的K的取值和相似性的度量都是很重要的。
2、基于密度的聚类算法DBSCAN
K-Mean算法除了上述的问题之外,还存在着他的聚类结果是球状的簇,而基于密度的算法可以使任意的形状,其次,在DBSCAN算法中没有k的取值问题,取而代之的是将每一个点分为核心点,边界点和噪音点。
六、推荐算法
推荐算法最早是基于协同过滤的方法,当然后来又有很多,比如基于内容的推荐,这里我还是主要实现的是基于协同过滤的推荐算法:
1、协同过滤的推荐算法
基本的算法地址,在基本的协同过滤算法中又分为基于项的推荐系统和基于用户的推荐系统,协同过滤的推荐系统主要是计算不同用户或者不同项之间的相似性,然后对需要推荐的选项打分,最终推荐分数较高的选项。相似度计算是一件很花费时间的事或者这样的矩阵是一个稀疏矩阵,没法实现相似度的计算,所以可以先对这样的矩阵降维,并映射到主题空间中,再去计算此时的相似度
七、降维的方法
原始数据的处理一直以来都是很重要的,原来我也是一直忽视这一块,找工作的过程中,我意识到算法是一些既定的框架,在具体的问题中特征的提取,以及一些原始数据的处理方式方法对这个机器学习问题才是最关键的,原来我在这块也有忽视,做的比较少,以后会重点做好这块的工作,以下是以下我实现的一些降维的方法:
1、主成分分析(PCA)
PCA是一种较为常用的降维技术,PCA的思想是将维特征映射到维上,这维是全新的正交特征。这维特征称为主元,是重新构造出来的维特征。
2、奇异值分解(SVD)
SVD的思想与特征值、特征向量的概念类似,提取出重要的向量,便称为左奇异向量和右奇异向量。
以上是我花了一点时间把我做的机器学习相关算法做的一个目录,方便大家查阅,有什么疏漏或者错误的地方还希望大家提出来,有好的资料大家也可以互相分享,我做的工作还很粗浅,也比较少,希望在以后的日子里和大家一起进步,一起努力,谢谢各位。