<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yhao2014的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yhao2014</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yhao2014]]></copyright><item><title><![CDATA[基于LR的新闻多分类（基于spark2.1.0, 附完整代码）]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/60324939</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/60324939</guid><author>yhao2014</author><pubDate>Sat, 04 Mar 2017 13:47:29 +0800</pubDate><description><![CDATA[自从引进DataFrame之后，spark在ml方面，开始使用DataFrame作为RDD的上层封装，以屏蔽RDD层次的复杂操作，对应用开发者提供简单的DataFrame，以减少开发量。本文以最新的spark2.1.0版本为基础，构建从数据预处理、特征转换、模型训练、数据测试到模型评估的一整套处理流程。]]></description><category></category></item><item><title><![CDATA[JUnit简单使用教程]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/52584450</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/52584450</guid><author>yhao2014</author><pubDate>Mon, 19 Sep 2016 13:45:28 +0800</pubDate><description><![CDATA[JUnit简介
JUnit是由 Erich Gamma和Kent Beck编写的一个回归测试框架(regression testing framework)。JUnit测试是程序员测试，即所谓白盒测试，因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。




简单编写单元测试实例

public class JunitAnnotation {]]></description><category></category></item><item><title><![CDATA[Hadoop HA——namenode无法启动问题解决]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/52426494</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/52426494</guid><author>yhao2014</author><pubDate>Sat, 03 Sep 2016 23:30:56 +0800</pubDate><description><![CDATA[﻿﻿
今天按照之前《Hadoop2.6.0 + zookeeper集群环境搭建 》一文重新搭建了Hadoop2.7.2+zookeeper的HA，实现namenode挂掉后可以自动切换，总体来说还算比较顺利。搭建完成后一切正常！但是！第二天重新启动集群的时候出现问题：两个namenode有一个始终启动不了！，具体问题描述如下：


问题描述

HA按照规划配置好，启动后，NameNod]]></description><category></category></item><item><title><![CDATA[[Spark2.0]ML 调优：模型选择和超参数调优]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/52257315</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/52257315</guid><author>yhao2014</author><pubDate>Sat, 20 Aug 2016 01:13:08 +0800</pubDate><description><![CDATA[本节讲述如何使用MLlib提供的工具来对ML算法和Pipline进行调优。内建的交叉验证和其他工具允许用户在算法和Pipline中优化超参数。
 
 
模型选择（又名
超参数调优）
       
在ML中一个重要的任务就是模型选择，或者使用给定的数据为给定的任务寻找最适合的模型或参数。这也叫做
调优。调优可以是对单个的Estimator，比如LogisticRegression，或]]></description><category></category></item><item><title><![CDATA[[Spark2.0]ML piplines管道模式]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/52235729</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/52235729</guid><author>yhao2014</author><pubDate>Wed, 17 Aug 2016 23:26:57 +0800</pubDate><description><![CDATA[在本部分，我们将介绍ML Pipline的概念。ML Pipline提供了一整套建立在DataFrame上的高级API，它能帮助用户创建和调优实际机器学习管道。




Pipline的主要思想
       Mllib标准化了机器学习算法的API，使得将多个算法融合到一个简单的管道或工作流更为简单。本部分将覆盖Pipline API的关键思想，这里的pipline概念是受scikit]]></description><category></category></item><item><title><![CDATA[[Spark2.0]Spark SQL, DataFrames 和Datasets指南]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/52215966</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/52215966</guid><author>yhao2014</author><pubDate>Tue, 16 Aug 2016 00:00:28 +0800</pubDate><description><![CDATA[综述
        Spark SQL是Spark提供的针对结构化数据处理的模块。不同于基本的Spark RDD API，SparkSQL提供的接口提供了更多的关于数据和计算执行的信息。在内部，SparkSQL使用这些额外信息完成额外的优化。这里有几种方式可以和SparkSQL相互操作，包括SQL和Dataset
 API。计算结果的时候使用相同的执行
        
本页中所有示例使]]></description><category></category></item><item><title><![CDATA[梯度下降法及其Python实现]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/51554910</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/51554910</guid><author>yhao2014</author><pubDate>Wed, 01 Jun 2016 12:24:36 +0800</pubDate><description><![CDATA[梯度下降法（gradient descent），又名最速下降法（steepest descent）是求解无约束最优化问题最常用的方法，它是一种迭代方法，每一步主要的操作是求解目标函数的梯度向量，将当前位置的负梯度方向作为搜索方向（因为在该方向上目标函数下降最快，这也是最速下降法名称的由来）。
梯度下降法特点：越接近目标值，步长越小，下降速度越慢。
直观上来看如下图所示：


这里每一个圈]]></description><category></category></item><item><title><![CDATA[最小二乘法及其python实现]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/51491413</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/51491413</guid><author>yhao2014</author><pubDate>Tue, 24 May 2016 16:57:30 +0800</pubDate><description><![CDATA[最小二乘法Least Square Method，做为分类回归算法的基础，有着悠久的历史（由马里·勒让德于1806年提出）。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据，并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
那什么是最小二乘法呢？别着急，我们先从]]></description><category></category></item><item><title><![CDATA[基于centos6.7的Ceph分布式文件系统安装指南]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/51394815</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/51394815</guid><author>yhao2014</author><pubDate>Fri, 13 May 2016 14:46:33 +0800</pubDate><description><![CDATA[Ceph是加州大学Santa Cruz分校的Sage Weil（DreamHost的联合创始人）专为博士论文设计的新一代自由软件分布式文件系统。自2007年毕业之后，Sage开始全职投入到Ceph开 发之中，使其能适用于生产环境。Ceph的主要目标是设计成基于POSIX的没有单点故障的分布式文件系统，使数据能容错和无缝的复制。2010年3
 月，Linus Torvalds将Ceph clien]]></description><category></category></item><item><title><![CDATA[【问题跟踪】KryoException: java.io.IOException: No space left on device]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/51159189</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/51159189</guid><author>yhao2014</author><pubDate>Fri, 15 Apr 2016 10:35:46 +0800</pubDate><description><![CDATA[今天在对LDA进行不同参数训练模型，记录其avglogLikelihood和logPerplexity，以便判断模型训练是否收敛时，产生了一个令人极度崩溃的事儿：程序在辛辛苦苦跑了7.3h后...挂了！证据如下：


早上一来看这张图，好像跑完了，然后点进去看...然后就没有然后了


每次迭代都需要9min左右，迭代了近50次跟我说挂了，确实挺让人奔溃的。


先说说我的配置以]]></description><category></category></item><item><title><![CDATA[基于spark mllib的LDA模型训练源码解析]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/51144813</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/51144813</guid><author>yhao2014</author><pubDate>Wed, 13 Apr 2016 17:14:16 +0800</pubDate><description><![CDATA[一直想写一篇关于LDA模型训练的源代码走读，但是因为个人水平以及时间原因未能如愿，今天想起来就记录了一下源码走读过程。有什么解释的不太清楚或者错误的地方请大家指正。


LDA模型训练大致经过以下这些步骤：


输入数据（已转换为Vector）和参数设置根据LDA选择的算法初始化优化器迭代优化器获得LDA模型

下面对每一步的源码进行代码跟进。完整的项目可以到我的github下载]]></description><category></category></item><item><title><![CDATA[基于spark mllib的LDA模型训练Scala代码实现]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/51098136</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/51098136</guid><author>yhao2014</author><pubDate>Fri, 08 Apr 2016 17:37:05 +0800</pubDate><description><![CDATA[从事NLP算法工作也快一年了，主要时间花在了LDA上面，但是却一直没有好好整理一下，决心把到目前为止做的一些东西分享出来，如有疑问敬请指正。
在Github上建了一个自己的项目：CkoocNLP（去这个名字是想做一个NLP相关的技术的代码实现，不过目前上面还没有什么东西）。里面已经有基于spark的训练和预测代码实现，有兴趣的同学可以去看看，代码比较简单，可以直接checkout出来跑。
直接]]></description><category></category></item><item><title><![CDATA[通俗理解LDA主题模型]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/51098037</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/51098037</guid><author>yhao2014</author><pubDate>Fri, 08 Apr 2016 17:05:10 +0800</pubDate><description><![CDATA[声明：本文转载自July的优快云博客，仅作为知识记录所用，原文链接：http://blog.youkuaiyun.com/v_july_v/article/details/41209515




0 前言


    印象中，最开始听说“LDA”这个名词，是缘于rickjin在2013年3月写的一个LDA科普系列，叫LDA数学八卦，我当时一直想看来着，记得还打印过一次，但不知是因为这篇文档]]></description><category></category></item><item><title><![CDATA[spark1.6.0集群安装]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/51028899</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/51028899</guid><author>yhao2014</author><pubDate>Thu, 31 Mar 2016 18:34:08 +0800</pubDate><description><![CDATA[1. 概述


本文是对spark1.6.0分布式集群的安装的一个详细说明，旨在帮助相关人员按照本说明能够快速搭建并使用spark集群。
 
2. 安装环境

本安装说明的示例环境部署如下：




IP
外网IP
hostname
备注


10.47.110.38
120.27.153.137
iZ237654q6qZ
Master、Slaver
]]></description><category></category></item><item><title><![CDATA[[Scala函数特性系列]——部分应用函数和柯里化]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/50718076</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/50718076</guid><author>yhao2014</author><pubDate>Mon, 22 Feb 2016 17:23:00 +0800</pubDate><description><![CDATA[柯里化是指将原来接收两个参数的函数变成接收一个参数的函数的过程，新的函数返回一个以原有第二个参数作为参数的函数。是不是有种被绕晕了的感觉，先别急，先看一个示例：


 
结果：


 
这里可以看出，柯里化函数与多个参数的函数具有相同的功能，这中间有一个“应用部分函数”，或者叫“偏应用函数”，这个函数multipleOf4表示固定了两个参数中的一个，部分提供了函数mul所需要的参数]]></description><category></category></item><item><title><![CDATA[[Scala函数特性系列]——高阶函数]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/50709561</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/50709561</guid><author>yhao2014</author><pubDate>Sun, 21 Feb 2016 21:25:57 +0800</pubDate><description><![CDATA[带函数参数的函数由于是一个接受函数参数的函数，故被称为高阶函数，像之前讲到的map()函数就是高阶函数。如下例所示：


上述代码中，apply函数接受一个函数f作为参数，接受一个Int类型的参数，进行f(v)运算，在下面又给出了f具体的定义（layout函数）。
 
同样的，高阶函数也可以产出另一个函数（即返回结果为一个函数，而不是某个值或对象），如下例所示：


这里函数rec]]></description><category></category></item><item><title><![CDATA[[Scala函数特性系列]——作为值的函数和借贷模式]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/50708650</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/50708650</guid><author>yhao2014</author><pubDate>Sun, 21 Feb 2016 17:04:51 +0800</pubDate><description><![CDATA[在scala中，函数是“头等公民”，几乎所有的操作都是以函数形式进行。同样的，能够在变量中存放函数（听上去很神奇吧）。示例如下：


本段代码将ceil函数赋值给fun变量，ceil后面的_表名这是一个函数，而不是碰巧忘记给它传参。
 
在scala中，不需要为每个函数命名，这种没有命名的函数叫做匿名函数。如何进行匿名函数的定义呢？示例如下：
(x:Double) => 3 * x]]></description><category></category></item><item><title><![CDATA[[Scala函数特性系列]——使用可变参数]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/50699296</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/50699296</guid><author>yhao2014</author><pubDate>Fri, 19 Feb 2016 17:12:55 +0800</pubDate><description><![CDATA[scala同java一样，在定义函数的时候支持接收可变长参数列表，即最后一个参数的可以被重复。示例代码如下：


 
结果：


在此代码中我们定义函数printInfo接收变长参数列表，其最后一个参数names可以根据实际情况进行传参（这里我们传了3个实参）。注意，函数可变参数只能是该函数的最后一个参数（否则不能识别参数长度，这个应该很好理解）。
printInfo函数被声明的参]]></description><category></category></item><item><title><![CDATA[[Scala函数特性系列]——使用命名参数]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/50699146</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/50699146</guid><author>yhao2014</author><pubDate>Fri, 19 Feb 2016 16:53:33 +0800</pubDate><description><![CDATA[在正常的函数调用中，调用参数在调用函数中是按其定义时的参数顺序进行一一匹配。如果需要按不同的顺序传递参数，就要使用到scala的一种函数特性——命名参数。
命名参数使用方法很简单，即在调用函数时，指定参数名并进行赋值。示例代码如下：


 
结果：


 
从代码和结果中就可以看出使用命名参数的优点：在需要时可以任意的指定函数中某个参数的值，而不必将此参数之前的参数都赋值一遍。]]></description><category></category></item><item><title><![CDATA[[Scala函数特性系列]——按名称传递参数]]></title><link>https://blog.youkuaiyun.com/yhao2014/article/details/50698902</link><guid>https://blog.youkuaiyun.com/yhao2014/article/details/50698902</guid><author>yhao2014</author><pubDate>Fri, 19 Feb 2016 16:32:36 +0800</pubDate><description><![CDATA[通常情况下，函数的参数是传值参数；即参数的值在它被传递给函数之前被确定。但是，如果我们需要编写一个接收参数不希望马上计算，直到调用函数内的表达式才进行真正的计算的函数。对于这种情况，Scala提供按名称参数调用函数。
示例代码如下：


 
结果：


 
在代码中，如果定义函数的时候，传入参数不是传入的值，而是传入的参数名称（如代码中使用t: => Long而不是t:
 Lo]]></description><category></category></item></channel></rss>