机器学习分为有监督学习和无监督学习。
聚类是一种无监督学习。
聚类则是试图将数据集的样本划分为若干个互不相交的类簇,从而每个簇对应一个潜在的类别。
首先随机指定类中心,根据样本与类中心的远近划分类簇,接着重新计算类中心,迭代直至收敛。
如果一个样本在特征空间中的k个最相似的样本大多都属于一个类别,那么这个样本就属于这个类别。
k通常不大于20。
比如下面这个图,如果k为3,则绿色需要判断距离最近的三个点,红色占据三分之二,所以认为绿色是红色;如果k为5,则判断最近的五个点,蓝色占五分之三,则此时绿色是蓝色。
算法步骤(测试数据就是带待预测的):
一个K-means的小实验
步骤:
思想和人的思考过程类似吧。
比如我是否拥有房产,这是一个节点,两个子节点有和没有;如果有,能否结婚,这又是一个节点,子节点是能和不能;选择能,然后是月收入是否大于4k,这也是一个节点,子节点为是或者否,以此类推。
决策树是一个二叉树,非叶子节点存放数据的一些特征属性,每一个分支则表示这个属性的一个输出,叶子节点存放判别的决策结果。从根节点出发,根据数据特征以此选择合适的分支,最终的叶子节点存放的类别作为决策结果。
为了解决噪声和离群点带来的过拟合,可以进行剪枝操作。
特点:
ID3
ID3算法使用信息增益为准则来选择划分属性,“信息熵”(information entropy)是度量样本结合纯度的常用指标
C4.5
ID3算法存在一个问题,就是偏向于取值数目较多的属性,例如:如果存在一个唯一标识,这样样本集D将会被划分为|D|个分支,每个分支只有一个样本,这样划分后的信息熵为零,十分纯净,但是对分类毫无用处。因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性,来避免这个问题带来的困扰。首先使用ID3算法计算出信息增益高于平均水平的候选属性,接着C4.5计算这些候选属性的增益率
CART
CART决策树使用“基尼指数”(Gini index)来选择划分属性,基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小越好
Logistic回归算法,名字虽带有回归,但其实是一个分类模型。它将特征的线性组合作为自变量,然后利用sigmoid函数将其映射到(0,1)上,映射后的值是y=1的概率。
対生成的结果是0或1的概率进行建模,通过采用最大似然估计的方法最大化似然函数,采用梯度上升的方法得到使似然函数最大的参数。求最小值用梯度下降。
优点:
缺点:
对数损失函数求解参数很快,和sigmod函数无关,训练快。
而平方损失函数的话,梯度更新速度和sigmod比较相关的,会导致训练很慢。
sigmod把输入的连续实值变为0-1的映射
sigmod连续单调递增
导数计算很快
支持向量机,是一个二分类模型,有线性和非线性两种。
基本特征是定义在特征空间上的一个线性分类器。是求解凸二次规划的最优化算法
基本思想是求解能够正确划分训练集并使得几何间隔最大的分离超平面。
有以下三类大概
训练样本线性
最大间隔的超平面划分。
通过硬间隔最大化,可以用线性方程wTx+b=0
划分超平面。
其中w
是法向量,b
叫偏移量,决定了超平面和原点的距离。
训练样本近似线性
引入松弛变量,软间隔最大化学习一个线性分类器
线性不可分
使用核技巧和软间隔最大化
通过非线性变换可以转为某个特征空间的线性分类问题。
然后其实在高维里面,不需要显式指定非线性变换,用核函数替换内积。
解决线性不可分问题时,常常采用映射的方式,将低维原始空间映射到高维特征空间,使得数据集在高维空间中变得线性可分,从而再使用线性学习器分类。
核函数可以直接计算隐式映射到高维特征空间后的向量内积,而不需要显式地写出映射后的结果,它虽然完成了将特征从低维到高维的转换,但最终却是在低维空间中完成向量内积计算,与高维特征空间中的计算等效(低维计算,高维表现),从而避免了直接在高维空间无法计算的问题。
线性核函数
是最简单的核函数
多项式核函数
很适合正交归一化后的数据,参数较多,比较稳定
高斯核函数
也叫鲁棒径向基核,对噪音有着较好的抗干扰能力。参数决定了函数作用范围,超过范围以后,数据作用就基本消失了。
指数核函数
是高斯核函数的变种,将向量的L2距离变为L1距离,对参数依赖性较小,使用范围较小。
拉普拉斯核函数
就是指数核函数,这个对参数敏感度更低一些。
按照人思考的问题的方式一样,代表对象属性和值之间的一种映射关系,每个节点表示一个对象,每个分支就表示的是对象的某个属性,每个叶子节点就表示的是对象的值,一个决策树只有单一输出。
从数据产生一个决策树的机器学习叫做决策树学习。
通俗说,就是我是否想结婚,这是一个节点,有两个分支,是和否,是属性;选择是,下一个月薪是否超过4k,又是一个节点,有两个分支,是和否;就这一步一步往下走走到叶子节点就能找到一个值
有两种算法ID3和C4.5。
原始的贝叶斯分类器最大的问题在于联合概率密度函数的估计,首先需要根据经验来假设联合概率分布,其次当属性很多时,训练样本往往覆盖不够,参数的估计会出现很大的偏差。为了避免这个问题,朴素贝叶斯分类器采用了“属性条件独立性假设”,即样本数据的所有属性之间相互独立。
朴素的意思是简单,单纯的意思。
假设了数据之间是独立的,逻辑较为简单,算法稳定,数据出现其他特点的时候,分类性能也不会差太多。
缺点就是数据要求相对独立。
用处:可以用于文本分析,
这里有个小例子,基于朴素贝叶斯的垃圾短信过滤。
主要步骤:
需要显著减少测试误差而且不过度增加训练误差,提高泛化能力。
可以使用正则化,正则化是指修改学习方法,使其降低泛化误差而不降低训练误差
常用的正则化方法根据使用策略不同可以分为如下:
使用和获取更多数据用于训练,是解决过拟合的根本方法
在实际中如果没有太多数据,可以使用“假数据”添加进行测试。
采用合适的模型
比如对于深度学习,CNN层数越多效果越好,但是也会更容易产生过拟合。
L1、L2正则
L1正则是在原始损失函数后面加一个L1正则项,即全部权重w的绝对值的和,再乘λ/n。这是让权重靠近0,减小网络中的网络复杂度,趋向于产生少量的特征,其他特征全为0.因为最优的参数值很有可能出现在坐标轴上,会导致某一维权重为0,从而产生稀疏权重矩阵
L2正则又称为权重衰减,在原始损失函数后面加一个L2正则项,全部权值w的平方和,乘以λ/2n。会选择更多的特征,让这些特征全为0.因为最优的参数值很少出现在坐标轴上,因此每一维的参数都不会是0,最小化权值的时候,可以让每一项趋于0
droupout
在训练过程中,按照一定概率随机“删除”一部分神经元,其实就是隐藏起来不用了。这样在训练中可以产生多个模型,当计算到达一定程度的时候,其实结果是在一个范围内徘徊的,因此这个结果可能是不同模型的一个平均输出。也削弱了对某个神经元的某种依赖关系提高了泛化能力
提前终止
当再每个epoch测试的时候,同时用验证集开始检测,如果在验证集上进行测试,如果发现误差率开始上升,说明前就说好了
越复杂的模型越会尝试对所有样本进行拟合,会造成在较小的区间有一些较大的波动,而较大的波动反应在导数越大。只有越大的参数会出现越大的导数,因此小参数会简单。
通过参数的稀疏一定程度上可以实现对于特征的选择。在实际情况可能有大部分特征的用处其实都不大,虽然可以减少训练集的误差,但是也可能带来干扰,因此可以将这些没用的特征权值设为0让它不起作用。
P-R曲线定义如下:根据学习器的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的排在后面,按此顺序逐个把样本作为“正例”进行预测,每次计算出当前的P值和R值,如下图所示。
理论上是曲线下的面积越大性能越好,但是面积不好算,就比较平衡点P=R
以“真正例率”(True Positive Rate,简称TPR)为横轴,纵轴为“假正例率”(False Positive Rate,简称FPR),ROC偏重研究基于测试样本评估值的排序好坏。
ROC曲线下的面积定义为AUC(Area Uder ROC Curve),不同于P-R的是,这里的AUC是可估算的,即AOC曲线下每一个小矩形的面积之和。易知:AUC越大,证明排序的质量越好,AUC为1时,证明所有正例排在了负例的前面,AUC为0时,所有的负例排在了正例的前面。
损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。
平方损失函数
常用于回归
对数损失函数
指数损失函数
对离群点或者噪声非常敏感
0-1损失函数
如果预测值和目标值不一致则为1,如果一致则为0
绝对值损失函数
绝对值损失函数是计算预测值与目标值的差的绝对值
深度学习是一个迭代的过程,每一轮迭代以后,前向传播算法会预测所以部分数据的预测值,通缩反向传播会动态修改网路中的参数值。
神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应。
一直沿用至今的“M-P神经元模型”正是对这一结构进行了抽象,也称“阈值逻辑单元“,其中树突对应于输入部分,每个神经元收到n个其他神经元传递过来的输入信号,这些信号通过带权重的连接传递给细胞体,这些权重又称为连接权(connection weight)。细胞体分为两部分,前一部分计算总输入值(即输入信号的加权和,或者说累积电平),后一部分先计算总输入值与该神经元阈值的差值,然后通过激活函数(activation function)的处理,产生输出从轴突传送给其它神经元。
单隐层前馈神经网络的拓扑结构,BP神经网络算法也使用梯度下降法(gradient descent),以单个样本的均方误差的负梯度方向对权重进行调节。
可以看出:BP算法首先将误差反向传播给隐层神经元,调节隐层到输出层的连接权重与输出层神经元的阈值;接着根据隐含层神经元的均方误差,来调节输入层到隐含层的连接权值与隐含层神经元的阈值。
是一个python库,用于创建深度(机器)学习的应用程序。
有两个概念
其他概念
提供有一个tensorBoard可视化界面可以直观显示,如日志,图像等信息。
有三种类型的张量
损失函数
tf.nn.softmax_cross_entropy_with_logits(logits=forward,labels=y)
给定一个数据集,包含两个变量,自变量和因变量,关系近乎可以用一条之间表示,y=wx+b,确定w和b确定这条直线,就是线性回归。
步骤:
有多个自变量参与,权值w为一个矩阵,数据需要进行归一化处理,不然偏差如果太大会影响结果。
归一化就是