网站建设做网站多少钱,网站规划建设与管理维护答案,wordpress如何使用百度主动推送,杭州电商网站策划设计神经网络使用情景
人脸#xff0f;图像识别语音搜索文本到语音#xff08;转录#xff09;垃圾邮件筛选#xff08;异常情况探测#xff09;欺诈探测推荐系统#xff08;客户关系管理、广告技术、避免用户流失#xff09;回归分析 为何选择Deeplearning4j#xff1f; … 神经网络使用情景
人脸图像识别语音搜索文本到语音转录垃圾邮件筛选异常情况探测欺诈探测推荐系统客户关系管理、广告技术、避免用户流失回归分析 为何选择Deeplearning4j
功能多样的N维数组类为Java和Scala设计与GPU集合可在Hadoop、Spark上实现扩缩Canova机器学习库的通用向量化工具ND4J线性代数库较Numpy快一倍 Deeplearning4j包括了分布式、多线程的深度学习框架以及普通的单线程深度学习框架。定型过程以集群进行也就是说Deeplearning4j可以快速处理大量数据。神经网络可通过[迭代化简]平行定型与Java、Scala和Clojure均兼容。Deeplearning4j在开放堆栈中作为模块组件的功能使之成为首个为微服务架构打造的深度学习框架。 DL4J神经网络
受限玻尔兹曼机卷积网络 图像递归网络/LSTMs时间序列和传感器数据递归自动编码器深度置信网络深度自动编码器问答数据压缩递归神经传感器网络场景、分析堆叠式降噪自动编码器更多用途请参见《如何选择神经网络》 深度神经网络能够实现前所未有的准确度。对神经网络的简介请参见概览页。简而言之Deeplearning4j能够让你从各类浅层网络其中每一层在英文中被称为出发设计深层神经网络。这一灵活性使用户可以根据所需在分布式、生产级、能够在分布式CPU或GPU的基础上与Spark和Hadoop协同工作的框架内整合受限玻尔兹曼机、其他自动编码器、卷积网络或递归网络。 此处为我们已经建立的各个库及其在系统整体中的所处位置 在定型深度学习网络的过程中有许多可供调节的参数。我们已尽可能对这些参数进行解释从而使Deeplearning4j能够成为Java、Scala和Clojure编程人员的DIY工具。 如果您有任何问题请在Gitter上加入我们如果需要高级支持则请与Skymind联系。ND4J是基于Java的科学运算引擎用来驱动矩阵操作。在大型矩阵上我们的基准显示ND4J较Numpy运算速度快大约一倍。 Deeplearning4j教程
深度神经网络简介卷积网络教程LSTM和递归网络教程通过DL4J使用递归网络深度置信网络和MNIST针对LFW人脸图像数据集进行人脸重构通过Canova库自定义数据准备工作受限玻尔兹曼机本征向量、主成分分析PCA和熵深度学习词汇表 用户反馈 为Deeplearning4j做出贡献 想要为Deeplearning4j作出贡献的开发人员可先阅读开发人员指南。 DL4J功能强大但非常复杂如何能轻松驾驭 世界领先的零代码机器学习架构RapidMiner结合其 DL4J扩展可无需编程地运用 DL4J的力量和灵活性。RapidMiner DL4J 扩展由RapidMiner China基于Skymind的深度学习库即Deeplearning4jDL4J开发它开源且对所有RapidMiner社区开放。点击查看详情。 用Deeplearning4j进行研究
斯坦福NLP“大规模语言分类” 神经网络使用情景 人脸图像识别语音搜索文本到语音转录垃圾邮件筛选异常情况探测欺诈探测推荐系统客户关系管理、广告技术、避免用户流失回归分析 为何选择Deeplearning4j 功能多样的N维数组类为Java和Scala设计与GPU集合可在Hadoop、Spark上实现扩缩Canova机器学习库的通用向量化工具ND4J线性代数库较Numpy快一倍 Deeplearning4j包括了分布式、多线程的深度学习框架以及普通的单线程深度学习框架。定型过程以集群进行也就是说Deeplearning4j可以快速处理大量数据。神经网络可通过[迭代化简]平行定型与Java、Scala和Clojure均兼容。Deeplearning4j在开放堆栈中作为模块组件的功能使之成为首个为微服务架构打造的深度学习框架。 DL4J神经网络 受限玻尔兹曼机卷积网络 图像递归网络/LSTMs时间序列和传感器数据递归自动编码器深度置信网络深度自动编码器问答数据压缩递归神经传感器网络场景、分析堆叠式降噪自动编码器更多用途请参见《如何选择神经网络》 深度神经网络能够实现前所未有的准确度。对神经网络的简介请参见概览页。简而言之Deeplearning4j能够让你从各类浅层网络其中每一层在英文中被称为出发设计深层神经网络。这一灵活性使用户可以根据所需在分布式、生产级、能够在分布式CPU或GPU的基础上与Spark和Hadoop协同工作的框架内整合受限玻尔兹曼机、其他自动编码器、卷积网络或递归网络。 此处为我们已经建立的各个库及其在系统整体中的所处位置 在定型深度学习网络的过程中有许多可供调节的参数。我们已尽可能对这些参数进行解释从而使Deeplearning4j能够成为Java、Scala和Clojure编程人员的DIY工具。 如果您有任何问题请在Gitter上加入我们如果需要高级支持则请与Skymind联系。ND4J是基于Java的科学运算引擎用来驱动矩阵操作。在大型矩阵上我们的基准显示ND4J较Numpy运算速度快大约一倍。 Deeplearning4j教程 深度神经网络简介卷积网络教程LSTM和递归网络教程通过DL4J使用递归网络深度置信网络和MNIST针对LFW人脸图像数据集进行人脸重构通过Canova库自定义数据准备工作受限玻尔兹曼机本征向量、主成分分析PCA和熵深度学习词汇表 用户反馈 为Deeplearning4j做出贡献 想要为Deeplearning4j作出贡献的开发人员可先阅读开发人员指南。 DL4J功能强大但非常复杂如何能轻松驾驭 世界领先的零代码机器学习架构RapidMiner结合其 DL4J扩展可无需编程地运用 DL4J的力量和灵活性。RapidMiner DL4J 扩展由RapidMiner China基于Skymind的深度学习库即Deeplearning4jDL4J开发它开源且对所有RapidMiner社区开放。点击查看详情。 用Deeplearning4j进行研究 斯坦福NLP“大规模语言分类” 学习方式 根据数据类型的不同对一个问题的建模有不同的方式。在机器学习或者人工智能领域人们首先会考虑算法的学习方式。在机器学习领域有几种主要 的学习方式。将算法按照学习方式分类是一个不错的想法这样可以让人们在建模和算法选择的时候考虑能根据输入数据来选择最合适的算法来获得最好的结果。 监督式学习 在监督式学习下输入数据被称为“训练数据”每组训练数据有一个明确的标识或结果如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”对手写 数字识别中的“1“”2“”3“”4“等。在建立预测模型的时候监督式学习建立一个学习过程将预测结果与“训练数据”的实际结果进行比较不断 的调整预测模型直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。常见算法有逻辑回归Logistic Regression和反向传递神经网络Back Propagation Neural Network 非监督式学习 在非监督式学习中数据并不被特别标识学习模型是为了推断出数据的一些内在结构。常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法以及k-Means算法。 半监督式学习 在此学习方式下输入数据部分被标识部分没有被标识这种学习模型可以用来进行预测但是模型首先需要学习数据的内在结构以便合理的组织数据 来进行预测。应用场景包括分类和回归算法包括一些对常用监督式学习算法的延伸这些算法首先试图对未标识数据进行建模在此基础上再对标识的数据进行预 测。如图论推理算法Graph Inference或者拉普拉斯支持向量机Laplacian SVM.等。 强化学习 在这种学习模式下输入数据作为对模型的反馈不像监督模型那样输入数据仅仅是作为一个检查模型对错的方式在强化学习下输入数据直接反馈 到模型模型必须对此立刻作出调整。常见的应用场景包括动态系统以及机器人控制等。常见算法包括Q-Learning以及时间差学习Temporal difference learning 在企业数据应用的场景下 人们最常用的可能就是监督式学习和非监督式学习的模型。 在图像识别等领域由于存在大量的非标识的数据和少量的可标识数据 目前半监督式学习是一个很热的话题。 而强化学习更多的应用在机器人控制及其他需要进行系统控制的领域。 算法类似性 根据算法的功能和形式的类似性我们可以把算法分类比如说基于树的算法基于神经网络的算法等等。当然机器学习的范围非常庞大有些算法很 难明确归类到某一类。而对于有些分类来说同一分类的算法可以针对不同类型的问题。这里我们尽量把常用的算法按照最容易理解的方式进行分类。 回归算法 回归算法是试图采用对误差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。在机器学习领域人们说起回归有时候是指一 类问题有时候是指一类算法这一点常常会使初学者有所困惑。常见的回归算法包括最小二乘法Ordinary Least Square逻辑回归Logistic Regression逐步式回归Stepwise Regression多元自适应回归样条Multivariate Adaptive Regression Splines以及本地散点平滑估计Locally Estimated Scatterplot Smoothing 基于实例的算法 基于实例的算法常常用来对决策问题建立模型这样的模型常常先选取一批样本数据然后根据某些近似性把新数据与样本数据进行比较。通过这种方式 来寻找最佳的匹配。因此基于实例的算法常常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化Learning Vector Quantization LVQ以及自组织映射算法Self-Organizing Map SOM 正则化方法 正则化方法是其他算法通常是回归算法的延伸根据算法的复杂度对算法进行调整。正则化方法通常对简单模型予以奖励而对复杂算法予以惩罚。常 见的算法包括Ridge Regression Least Absolute Shrinkage and Selection OperatorLASSO以及弹性网络Elastic Net。 决策树学习 决策树算法根据数据的属性采用树状结构建立决策模型 决策树模型常常用来解决分类和回归问题。常见的算法包括分类及回归树Classification And Regression Tree CART ID3 (Iterative Dichotomiser 3) C4.5 Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林Random Forest 多元自适应回归样条MARS以及梯度推进机Gradient Boosting Machine GBM 贝叶斯方法 贝叶斯方法算法是基于贝叶斯定理的一类算法主要用来解决分类和回归问题。常见算法包括朴素贝叶斯算法平均单依赖估计Averaged One-Dependence Estimators AODE以及Bayesian Belief NetworkBBN。 基于核的算法 基于核的算法中最着名的莫过于支持向量机SVM了。 基于核的算法把输入数据映射到一个高阶的向量空间 在这些高阶向量空间里 有些分类或者回归问题能够更容易的解决。 常见的基于核的算法包括支持向量机Support Vector Machine SVM 径向基函数Radial Basis Function RBF) 以及线性判别分析Linear Discriminate Analysis LDA)等。 聚类算法 聚类就像回归一样有时候人们描述的是一类问题有时候描述的是一类算法。聚类算法通常按照中心点或者分层的方式对输入数据进行归并。所以的 聚类算法都试图找到数据的内在结构以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及期望最大化算法Expectation Maximization EM。 关联规则学习 关联规则学习通过寻找最能够解释数据变量之间关系的规则来找出大量多元数据集中有用的关联规则。常见算法包括 Apriori算法和Eclat算法等。 人工神经网络 人工神经网络算法模拟生物神经网络是一类模式匹配算法。通常用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支有几百种不同 的算法。其中深度学习就是其中的一类算法我们会单独讨论重要的人工神经网络算法包括感知器神经网络Perceptron Neural Network, 反向传递Back Propagation Hopfield网络自组织映射Self-Organizing Map, SOM。学习矢量量化Learning Vector Quantization LVQ 深度学习 深度学习算法是对人工神经网络的发展。 在近期赢得了很多关注 特别是 百度也开始发力深度学习后 更是在国内引起了很多关注。 在计算能力变得日益廉价的今天深度学习试图建立大得多也复杂得多的神经网络。很多深度学习的算法是半监督式学习算法用来处理存在少量未标识数据的大 数据集。常见的深度学习算法包括受限波尔兹曼机Restricted Boltzmann Machine RBN Deep Belief NetworksDBN卷积网络Convolutional Network, 堆栈式自动编码器Stacked Auto-encoders。 降低维度算法 像聚类算法一样降低维度算法试图分析数据的内在结构不过降低维度算法是以非监督学习的方式试图利用较少的信息来归纳或者解释数据。这类算法 可以用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括主成份分析Principle Component Analysis PCA偏最小二乘回归Partial Least Square RegressionPLS Sammon映射多维尺度Multi-Dimensional Scaling, MDS, 投影追踪Projection Pursuit等。 集成算法 集成算法用一些相对较弱的学习模型独立地就同样的样本进行训练然后把结果整合起来进行整体预测。集成算法的主要难点在于究竟集成哪些独立的较 弱的学习模型以及如何把学习结果整合起来。这是一类非常强大的算法同时也非常流行。常见的算法包括Boosting Bootstrapped AggregationBagging AdaBoost堆叠泛化Stacked Generalization Blending梯度推进机Gradient Boosting Machine, GBM随机森林Random Forest。 详细解释 朴素贝叶斯 P(A∩B)P(A)*P(B|A)P(B)*P(A|B) 所以有P(A|B)P(B|A)*P(A)/P(B) 对于给出的待分类项求解在此项出现的条件下各个目标类别出现的概率哪个最大就认为此待分类项属于哪个类别 工作原理 假设现在有样本x(a1,a2,a3,…an)这个待分类项(并认为x里面的特征独立)再假设现在有分类目标Y{y1,y2,y3,y4..yn}那么max(P(y1|x),P(y2|x),P(y3|x)..P(yn|x))中的最大者就是最终的分类类别而P(yi|x)p(x|yi)*P(yi)/P(x)因为x对于每个分类目标来说都一样所以就是求max(P(x|yi)*p(yi))P(x|yi)*p(yi)p(yi)*PI(P(ai|yi)) (PI表示连乘)而具体的p(ai|yi)和p(yi)都是能从训练样本中统计出来 p(ai|yi)表示该类别下该特征出现的概率 p(yi)表示全部类别中这个这个类别出现的概率好的就是这么工作的^_^ 工作流程 准备阶段 确定特征属性并对每个特征属性进行适当划分然后由人工对一部分待分类项进行分类形成训练样本。训练阶段 计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计应用阶段 使用分类器进行分类输入是分类器和待分类样本输出是样本属于的分类类别 属性特征 特征为离散值时直接统计即可表示统计概率特征为连续值的时候假定特征符合高斯分布:g(x,n,u) 那么p(ak|yi)g(xk,ni,ui) Laplace校准(拉普拉斯校验) 当某个类别下某个特征划分没有出现时会有P(a|y)0就是导致分类器质量降低所以此时引入Laplace校验就是对没类别下所有划分的计数加1。 遇到特征之间不独立问题 参考改进的贝叶斯网络使用DAG来进行概率图的描述 优缺点 朴素贝叶斯的优点 对小规模的数据表现很好适合多分类任务适合增量式训练。 缺点对输入数据的表达形式很敏感离散、连续值极大极小之类的。 http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html 逻辑回归和线性回归 LR回归是一个线性的二分类模型主要是计算在某个样本特征下事件发生的概率比如根据用户的浏览购买情况作为特征来计算它是否会购买这个商品抑或是它是否会点击这个商品。然后LR的最终值是根据一个线性和函数再通过一个sigmod函数来求得这个线性和函数权重与特征值的累加以及加上偏置求出来的所以在训练LR时也就是在训练线性和函数的各个权重值w。 关于这个权重值w一般使用最大似然法来估计比如yi1的概率是pi,则yi0的概率是1-pi那么观测概率为p(yi)pi^yi*(1-pi)^(1-yi)这个这个最大似然函数为hw(xi)^yi*(1-hw(xi))^(1-yi)连乘对这个似然函数取对数之后就会得到的表达式L(w)sigma(yi*log(hw(xi))-(1-yi)log(1-hw(xi)))sigma(yi*(w*xi)-log(1exp(w*xi)))估计这个L(w)的极大值就可以得到w的估计值。 所以求解问题就变成了这个最大似然函数的最优化问题这里通常会采样随机梯度下降法和拟牛顿迭代法来进行优化 梯度下降法 如果hw(x)1/(1-e^(-wx)) 则cost function-1/m* sigma(yi*log(hw(xi)(1-yi)*log(1-hw(xi)))j(w) 这里就成了就min(j(w)) 所以更新w的过程为 w:w-lamea*j(w)’ (求导) w:w-lamea* 1/m\*sigma[m](hw(xi)-yi)*xi) 直到j(w)不能再的时候停止 梯度下降法的最大问题就是会陷入局部最优并且每次在对当前样本计算cost的时候都需要去遍历全部样本才能得到cost值这样计算速度就会慢很多虽然在计算的时候可以转为矩阵乘法去更新整个w值 所以现在好多框架mahout中一般使用随机梯度下降法它在计算cost的时候只计算当前的代价最终cost是在全部样本迭代一遍之求和得出还有他在更新当前的参数w的时候并不是依次遍历样本而是从所有的样本中随机选择一条进行计算它方法收敛速度快一般是使用最大迭代次数并且还可以避免局部最优并且还很容易并行使用参数服务器的方式进行并行 这里SGD可以改进的地方就是使用动态的梯度值alpha0.04*(1.0ni)Rate 其他优化方法 拟牛顿法记得是需要使用Hessian矩阵和cholesky分解BFGSL-BFGS 优缺点无需选择学习率α更快但是更复杂 关于LR的过拟合问题 如果我们有很多的特性在训练集上拟合得很好但是在预测集上却达不到这种效果 1. 减少feature个数人工定义留多少个feature、算法选取这些feature2. 正则化留下所有的feature但对于部分feature定义其parameter非常小在cost上加 lamea(sigma(w^2))同时w的更新变为w:w-rate* 1/m\*sigma[m](hw(xi)-yi)*xi lamea/m)*w。注意这里的w0不受正则化影响 关于LR的多分类softmax softmax:假设离散型随机变量Y的取值集合是{1,2,..,k},则多分类的LR为 P(Ya|x)exp(wa*x)/(1-1到k求和(wk*x)) 1ak 这里会输出当前样本下属于哪一类的概率并且满足全部概率加起来1 关于softmax和k个LR的选择 如果类别之间是否互斥比如音乐只能属于古典音乐、乡村音乐、摇滚月的一种就用softmax 否则类别之前有联系比如一首歌曲可能有影视原声也可能包含人声或者是舞曲这个时候使用k个LR更为合适 优缺点 Logistic回归优点 实现简单分类时计算量非常小速度很快存储资源低 缺点 容易欠拟合一般准确度不太高只能处理两分类问题在此基础上衍生出来的softmax可以用于多分类且必须线性可分 http://www.cnblogs.com/biyeymyhjob/archive/2012/07/18/2595410.html http://blog.csdn.net/abcjennifer/article/details/7716281 http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92 KNN算法 给一个训练数据集和一个新的实例在训练数据集中找出与这个新实例最近的k个训练实例然后统计最近的k个训练实例中所属类别计数最多的那个类就是新实例的类 三要素 k值的选择距离的度量常见的距离度量有欧式距离马氏距离等分类决策规则 多数表决规则 k值的选择 k值越小表明模型越复杂更加容易过拟合但是k值越大模型越简单如果kN的时候就表明无论什么点都是训练集中类别最多的那个类 所以一般k会取一个较小的值然后用过交叉验证来确定 这里所谓的交叉验证就是将样本划分一部分出来为预测样本比如95%训练5%预测然后k分别取12345之类的进行预测计算最后的分类误差选择误差最小的k KNN的回归 在找到最近的k个实例之后可以计算这k个实例的平均值作为预测值。或者还可以给这k个实例添加一个权重再求平均值这个权重与度量距离成反比越近权重越大。 优缺点 KNN算法的优点 思想简单理论成熟既可以用来做分类也可以用来做回归可用于非线性分类训练时间复杂度为O(n)准确度高对数据没有假设对outlier不敏感 缺点 计算量大样本不平衡问题即有些类别的样本数量很多而其它样本的数量很少需要大量的内存 KD树 KD树是一个二叉树表示对K维空间的一个划分可以进行快速检索那KNN计算的时候不需要对全样本进行距离的计算了 构造KD树 在k维的空间上循环找子区域的中位数进行划分的过程。 假设现在有K维空间的数据集T{x1,x2,x3,…xn},xi{a1,a2,a3..ak} 首先构造根节点以坐标a1的中位数b为切分点将根结点对应的矩形局域划分为两个区域区域1中a1b构造叶子节点分别以上面两个区域中a2的中位数作为切分点再次将他们两两划分作为深度1的叶子节点如果a2中位数则a2的实例落在切分面不断重复2的操作深度为j的叶子节点划分的时候索取的ai 的ij%k1直到两个子区域没有实例时停止 KD树的搜索 首先从根节点开始递归往下找到包含x的叶子节点每一层都是找对应的xi将这个叶子节点认为是当前的“近似最近点”递归向上回退如果以x圆心以“近似最近点”为半径的球与根节点的另一半子区域边界相交则说明另一半子区域中存在与x更近的点则进入另一个子区域中查找该点并且更新”近似最近点“重复3的步骤直到另一子区域与球体不相交或者退回根节点最后更新的”近似最近点“与x真正的最近点 KD树进行KNN查找 通过KD树的搜索找到与搜索目标最近的点这样KNN的搜索就可以被限制在空间的局部区域上了可以大大增加效率。 KD树搜索的复杂度 当实例随机分布的时候搜索的复杂度为log(N)N为实例的个数KD树更加适用于实例数量远大于空间维度的KNN搜索如果实例的空间维度与实例个数差不多时它的效率基于等于线性扫描。 SVM、SMO 对于样本点(xi,yi)以及svm的超平面wixb0 函数间隔yi(wxib)几何间隔yi(wxib)/||w||,其中||w||为w的L2范数几何间隔不会因为参数比例的改变而改变 svm的基本想法就是求解能正确划分训练样本并且其几何间隔最大化的超平面。 线性SVM问题 yi(wxib)/||w||d 使用几何间隔 求max(d) 那么假设d’d||w|| 则将问题转为yi(wxib)1,max(d’/||w||) 由于d’的成比例增减不会影响实际间距所以这里的取d’1又因为max(1/||w||)min(1/2\||w||^2) 所以最终的问题就变为了 yi(wxib)1,min(1/2*||w||^2) 这样就变成了一个凸的二次规划化可以将其转换为拉格朗日函数然后使用对偶算法来求解 对偶求解 L(w,b,a)1/2*||w||^2-sigma(ai*yi(wxib))sigma(ai) 其中a{a1,a2..an}为拉格朗日向量 根据对偶性质 原始问题就是求对偶问题的极大极小max[a]min[w,b]L(w,b,a) 先求L对w,b的极小再求对a的极大 求min[w,b]L(w,b,a) L’(w)w-sigma(aiyixi)0 L’(b)sigma(aiyi)0; 代入后可得min[w,b]L(w,b,a)-1/2*sigma(sigma(aiajyiyj(xi·xj)))sigma(ai) 求min[w,b]L(w,b,a)对a的极大 max[a] -1/2*sigma(sigma(aiajyiyj(xi·xj)))sigma(ai) sigma(aiyi)0 转成等价的对偶形式就是 min[a] 1/2*sigma(sigma(aiajyiyj(xi·xj)))-sigma(ai) sigma(aiyi)0 假如求解出来的a为a^(a1,a2,…an) 则得到最优的w,b分别为 w^sigma(aiyixi) b^yj-sigma(aiyi(xi·xj)) 所以最终的决策分类面为 fsign(sigma(aiyi(x·xi))b^ 也就是说分类决策函数只依赖于输入x与训练样本的输入的内积 与分离超平面最近的样本点称为支持向量 损失函数 经验损失函数:sigma(1-yi(wxib)) (注意如果该值小于0时直接取0即可) 合页损失函数sigma(1-yi(wib)) leama||w||^2 后面的是L2正则项 为什么要引入对偶算法 对偶问题往往更加容易求解(结合拉格朗日和kkt条件)可以很自然的引用核函数拉格朗日表达式里面有内积而核函数也是通过内积进行映射的 核函数 将输入特征x线性不可分映射到高维特征R空间可以在R空间上让SVM进行线性可以变这就是核函数的作用 多项式核函数:K(x,z)(x*z1)^p高斯核函数:K(x,z)exp(-(x-z)^2/a^2) a为均值字符串核函数好像用于文本匹配、检索之类的不懂 SVM优缺点 优点 使用核函数可以向高维空间进行映射使用核函数可以解决非线性的分类分类思想很简单就是将样本与决策面的间隔最大化分类效果较好 缺点 对大规模数据训练比较困难因为它是用二次规划来求解的无法直接支持多分类但是可以使用间接的方法来做 SMO SMO是用于快速求解SVM的 它选择凸二次规划的两个变量其他的变量保持不变然后根据这两个变量构建一个二次规划问题这个二次规划关于这两个变量解会更加的接近原始二次规划的解通过这样的子问题划分可以大大增加整个算法的计算速度关于这两个变量 其中一个是严重违反KKT条件的一个变量另一个变量是根据自由约束确定好像是求剩余变量的最大化来确定的。 SVM多分类问题 直接法 直接在目标函数上进行修改将多个分类面的参数求解合并到一个最优化问题中通过求解该优化就可以实现多分类计算复杂度很高实现起来较为困难间接法 一对多 其中某个类为一类其余n-1个类为另一个类比如A,B,C,D四个类第一次A为一个类{B,C,D}为一个类训练一个分类器第二次B为一个类,{A,C,D}为另一个类,按这方式共需要训练4个分类器最后在测试的时候将测试样本经过这4个分类器f1(x),f2(x),f3(x)和f4(x),取其最大值为分类器(这种方式由于是1对M分类会存在偏置很不实用)一对一(libsvm实现的方式) 任意两个类都训练一个分类器那么n个类就需要n*(n-1)/2个svm分类器。 还是以A,B,C,D为例,那么需要{A,B},{A,C},{A,D},{B,C},{B,D},{C,D}为目标共6个分类器然后在预测的将测试样本通过这6个分类器之后进行投票选择最终结果。这种方法虽好但是需要n*(n-1)/2个分类器代价太大不过有好像使用循环图来进行改进 决策树 决策树是一颗依托决策而建立起来的树。 ID3 首先是针对当前的集合计算每个特征的信息增益然后选择信息增益最大的特征作为当前节点的决策决策特征根据特征不同的类别划分到不同的子节点比如年龄特征有青年中年老年则划分到3颗子树然后继续对子节点进行递归直到所有特征都被划分 S(C,ai)-sigma(pilog(pi)) 一个属性中某个类别的熵 piP(yi|ai) pi表示ai情况下发生yi的概率也即是统计概率 S(C,A)sigma(P(Aai)\S(ai)) 整个属性的熵为各个类别的比例与各自熵的加权求和 Gain(C,A)S(C)-S(C,A) 增益表示分类目标的熵减去当前属性的熵增益越大分类能力越强 (这里前者叫做经验熵表示数据集分类C的不确定性后者就是经验条件熵表示在给定A的条件下对数据集分类C的不确定性两者相减叫做互信息决策树的增益等价于互信息) 比如说当前属性是是否拥有房产分类是是否能偿还债务 现在 有用房产为7个4个能偿还债务3个无法偿还债务然后无房产为3个其中1个能偿还债务2个无法偿还债务 然后S(有房产)-(4/7*log4/73/7*log3/7) S(无房产)-(1/3*log1/32/3*log2/3) 其中S(分类)-(5/10*log5/105/10*log5/10) 最终的增益S(分类)-(7/10*S(有房产)3/10*S(无房产)) 最大越好 关于损失函数 设树的叶子节点个数为Tt为其中一个叶子节点该叶子节点有Nt个样本其中k类的样本有Ntk个H(t)为叶子节点上的经验熵则损失函数定义为 Ct(T)sigma(Nt*H(t)) lamdba |T| 其中H(t)sigma(Ntk/Nt*log(Ntk/Nt)) 代入可以得到Ct(T)sigma(sigma(Ntk*log(Ntk/Nt)))lamdba|T| 最终有Ct(T)C(T) lamdba|T| lamdba|T|为正则化项leama是用于调节比率 决策树的生成只考虑了信息增益 C4.5 它是ID3的一个改进算法使用信息增益率来进行属性的选择 splitInformation(S,A)-sigma(|Si|/|S|*log2(|Si|/|S|)) GainRatio(S,A)Gain(S,A)/splitInformation(S,A) 优缺点 准确率高但是子构造树的过程中需要进行多次的扫描和排序所以它的运算效率较低 Cart 分类回归树(Classification And Regression Tree)是一个决策二叉树在通过递归的方式建立每个节点在分裂的时候都是希望通过最好的方式将剩余的样本划分成两类这里的分类指标 分类树基尼指数最小化(gini_index)回归树平方误差最小化 分类树 首先是根据当前特征计算他们的基尼增益选择基尼增益最小的特征作为划分特征从该特征中查找基尼指数最小的分类类别作为最优划分点将当前样本划分成两类一类是划分特征的类别等于最优划分点另一类就是不等于针对这两类递归进行上述的划分工作直达所有叶子指向同一样本目标或者叶子个数小于一定的阈值 gini用来度量分布不均匀性或者说不纯总体的类别越杂乱GINI指数就越大跟熵的概念很相似 gini(ai)1-sigma(pi^2) pi当前数据集中第i类样本的比例 gini越小表示样本分布越均匀0的时候就表示只有一类了越大越不均匀 基尼增益gini_gainsigma(Ni/N*gini(ai)) 表示当前属性的一个混乱 Ni/N表示当前类别占所有类别的概率 最终Cart选择GiniGain最小的特征作为划分特征 以ID3中的贷款的那棵树为样例 gini(有房产)1-((3/7)^2(4/7)^2) //基尼指数 gini(无房产)1-((1/3)^2(2/3)^2) gini_gain7/10*gini(有房产)3/10*gini(无房产) //基尼增益 回归树 回归树是以平方误差最小化的准则划分为两块区域 遍历特征计算最优的划分点s 使其最小化的平方误差是min{min(R1.sigma((yi-c1)^2))min(R2.sigma((yi-c2)^2))} 计算根据s划分到左侧和右侧子树的目标值与预测值之差的平方和最小这里的预测值是两个子树上输入xi样本对应yi的均值找到最小的划分特征j以及其最优的划分点s,根据特征j以及划分点s将现有的样本划分为两个区域一个是在特征j上小于等于s另一个在在特征j上大于s R1(j){x|x(j)s}、R2(j){x|x(j)s}进入两个子区域按上述方法继续划分直到到达停止条件 这里面的最小化我记得可以使用最小二乘法来求 关于剪枝用独立的验证数据集对训练集生长的树进行剪枝事后剪枝。 停止条件 直到每个叶子节点都只有一种类型的记录时停止这种方式很容易过拟合另一种时当叶子节点的记录树小于一定的阈值或者节点的信息增益小于一定的阈值时停止 关于特征与目标值 特征离散 目标值离散可以使用ID3cart特征连续 目标值离散将连续的特征离散化 可以使用ID3cart特征离散 目标值连续 决策树的分类与回归 分类树 输出叶子节点中所属类别最多的那一类回归树 输出叶子节点中各个样本值的平均值 理想的决策树 叶子节点数尽量少叶子节点的深度尽量小(太深可能会过拟合) 解决决策树的过拟合 剪枝 前置剪枝在分裂节点的时候设计比较苛刻的条件如不满足则直接停止分裂这样干决策树无法到最优也无法得到比较好的效果后置剪枝在树建立完之后用单个节点代替子树节点的分类采用子树中主要的分类这种方法比较浪费前面的建立过程 交叉验证随机森林 优缺点 优点 计算量简单可解释性强比较适合处理有缺失属性值的样本能够处理不相关的特征 缺点单颗决策树分类能力弱并且对连续值变量难以处理容易过拟合后续出现了随机森林减小了过拟合现象 随机森林RF 随机森林是有很多随机得决策树构成它们之间没有关联。得到RF以后在预测时分别对每一个决策树进行判断最后使用Bagging的思想进行结果的输出也就是投票的思想 学习过程 现在有N个训练样本每个样本的特征为M个需要建K颗树从N个训练样本中有放回的取N个样本作为一组训练集其余未取到的样本作为预测分类评估其误差从M个特征中取m个特征左右子集特征(mM)对采样的数据使用完全分裂的方式来建立决策树这样的决策树每个节点要么无法分裂要么所有的样本都指向同一个分类重复2的过程K次即可建立森林 预测过程 将预测样本输入到K颗树分别进行预测如果是分类问题直接使用投票的方式选择分类频次最高的类别如果是回归问题使用分类之后的均值作为结果 参数问题 这里的一般取msqrt(M)关于树的个数K一般都需要成百上千但是也有具体的样本有关比如特征数量树的最大深度太深可能可能导致过拟合节点上的最小样本数、最小信息增益 泛化误差估计 使用oobout-of-bag进行泛化误差的估计将各个树的未采样样本作为预测样本大约有36.8%使用已经建立好的森林对各个预测样本进行预测预测完之后最后统计误分得个数占总预测样本的比率作为RF的oob误分率。 学习算法 ID3算法处理离散值的量C45算法处理连续值的量Cart算法离散和连续 两者都合适 关于CART Cart可以通过特征的选择迭代建立一颗分类树使得每次的分类平面能最好的将剩余数据分为两类 gini1-sigma(pi^2)表示每个类别出现的概率和与1的差值 分类问题argmaxGini-GiniLeft-GiniRight 回归问题argmax(Var-VarLeft-VarRight) 查找最佳特征f已经最佳属性阈值th 小于th的在左边大于th的在右边子树 优缺点 能够处理大量特征的分类并且还不用做特征选择在训练完成之后能给出哪些feature的比较重要训练速度很快很容易并行实现相对来说较为简单 GBDT GBDT的精髓在于训练的时候都是以上一颗树的残差为目标这个残差就是上一个树的预测值与真实值的差值。 比如当前样本年龄是18岁那么第一颗会去按18岁来训练但是训练完之后预测的年龄为12岁差值为6所以第二颗树的会以6岁来进行训练假如训练完之后预测出来 Boosting的好处就是每一步的参加就是变相了增加了分错instance的权重而对已经对的instance趋向于0这样后面的树就可以更加关注错分的instance的训练了 Shrinkage Shrinkage认为每次走一小步逐步逼近的结果要比每次迈一大步逼近结果更加容易避免过拟合。 y(1 ~ i) y(1 ~ i-1) step * yi 就像我们做互联网总是先解决60%用户的需求凑合着再解决35%用户的需求最后才关注那5%人的需求这样就能逐渐把产品做好. 调参 树的个数 100~10000叶子的深度 3~8学习速率 0.01~1叶子上最大节点树 20训练采样比例 0.5~1训练特征采样比例 sqrt(num) 优缺点 优点 精度高能处理非线性数据能处理多特征类型适合低维稠密数据 缺点并行麻烦因为上下两颗树有联系多分类的时候 复杂度很大 BP 最小二乘法 最小二乘法是一种数学的优化技术通过求最小化平方误差来寻找最佳的函数匹配 假设现在有二维的观测数据(x1,y1),(x2,y2)…(xn,yn)求yabx的拟合。 现设yiabxiki 如果有a,b能得到sigma(|ki|)最小则该线比较理想 所以先变为求min(sigma(ki)) 这个与min(sigma(ki^2))等价 而kiyi-(abxi) 那么现设fsigma((yi-(abxi))^2)求其最小即可 上述就是最小二乘原则估计a,b的方法称为最小二乘法 先求f对a,b的偏导 f’(a)-2*sigma(yi-(abxi))0 f’(b)-2*xi*sigma(yi-(abxi))0 现设Xsigma(xi)/n Ysigma(yi)/ 则代入上述偏导 anbnXnY anXb*sigma(xi^2)sigma(xi*yi) 求该行列式: |n ,nX | |nX,sigma(xi^2)| n*sigma((xi-X))!0 所以有唯一解 最后记 l(xx)sigma((xi-X)^2) l(yy)sigma((yi-Y)^2) l(xy)sigma((xi-X)(yi-Y)) 则bl(xy)/l(xx) aY-bX 百度文库-最小二乘法 EM EM用于隐含变量的概率模型的极大似然估计它一般分为两步第一步求期望(E),第二步求极大(M) 如果概率模型的变量都是观测变量那么给定数据之后就可以直接使用极大似然法或者贝叶斯估计模型参数。 但是当模型含有隐含变量的时候就不能简单的用这些方法来估计EM就是一种含有隐含变量的概率模型参数的极大似然估计法。 应用到的地方混合高斯模型、混合朴素贝叶斯模型、因子分析模型 Bagging 从N样本中有放回的采样N个样本对这N个样本在全属性上建立分类器(CART,SVM)重复上面的步骤建立m个分类器预测的时候使用投票的方法得到结果 Boosting boosting在训练的时候会给样本加一个权重然后使loss function尽量去考虑那些分错类的样本比如给分错类的样本的权重值加大 凸优化 在机器学习中往往是最终要求解某个函数的最优值但是一般情况下任意一个函数的最优值求解比较困难但是对于凸函数来说就可以有效的求解出全局最优值。 凸集 一个集合C是当前仅当任意x,y属于C且0theta1都有theta*x(1-theta)*y属于C 用通俗的话来说C集合线段上的任意两点也在C集合中 凸函数 一个函数f其定义域(D(f))是凸集并且对任意x,y属于D(f)和0theta1都有 f(theta*x(1-theta)*y)theta*f(x)(1-theta)*f(y) —这个貌似叫做jensen不等式 用通俗的话来说就是曲线上任意两点的割线都在曲线的上方 常见的凸函数有 指数函数f(x)a^x a1负对数函数-logax a1,x0开口向上的二次函数等 凸函数的判定 如果f是一阶可导对于任意数据域内的x,y满足f(y)f(x)f’(x)(y-x)如果f是二阶可导 凸优化应用举例 SVM其中由max|w| 转向min(1/2*|w|^2) 最小二乘法 LR的损失函数sigma(yi*log(hw(x))(1-yi)*(log(1-hw(x))))