Hadoop Eclipse插件不能删除HDFS文件

2014年12月8日 没有评论

在windows下Hadoop的Eclipse插件在删除HDFS上文件的时候提示没有权限,解决方式是设系统变量添加:

HADOOP_USER_NAME =username

 

username是hadoop中配置的系统用户。

分类: 高级民工 标签:

编译Hadoop2.5.2

2014年11月26日 没有评论

1.当前环境

centos6.3

2.需要具备的工具和库

Maven 3.3.2 下载地址:http://apache.fayea.com/apache-mirror/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz

gcc c++等编译工具,执行yum安装: yum install make cmake zlib-devel openssl-devel gcc gcc+ gcc-c++

还需要google的protobuf,下载地址:https://protobuf.googlecode.com/files/protobuf-2.5.0.tar.gz,解压后编译即可,./configure ; make ; make install

3.编译

hadoop源码下载:http://www.apache.org/dyn/closer.cgi/hadoop/common/

解压后进入编译:

mvn package -Pdist,native -DskipTests -Dtar

 

注:使用官方编译好的hadoop时出现:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

解决办法,使用自己编译的hadoop或者复制自己编译的lib/native下面的文件。

分类: 高级民工 标签:

线性回归

2014年11月24日 没有评论

回归的意思就是给定一个训练集合的前提下,找到一个数学函数拟合这些训练集合的过程;线性回归则是需要找的数学函数是一个线性方程。线性回归的算法有:最小二乘法、梯度下降法(批量梯度下降和随机梯度下降)。

* 给定训练集合

X = [1 4;2 5;5 1;4 2 ]

y = [19;26;19;20]

1.最小二乘法

正规方程唯一解:

normal-eq

上式中theta即是需要求出的线性回归中各项的系数,X是训练集合矩阵,y向量是训练集合中每个的结果。

如果使用Octave计算,则代码为:

theta=pinv(X'*X)*X'*y

需要注意X必须是列满秩,否则(X’*X)得到的矩阵不可逆;不过Octave中pinv对于不可逆的矩阵一样可以计算,是伪逆。

2.梯度下降法

梯度下降法可以分为批量梯度下降法和随机梯度下降法;批量梯度下降法每一次迭代需要把整个训练集合遍历一次;随机梯度则是在每一次迭代中自行指定一条训练集合中的数据不用遍历整个训练集合。

若按照平方差公式来估计损失函数,如下式:
costFunction

目标就是把求得J(theta)的最小值。

* 为什么用平方差,因为大家用了都说好….

要求J(theta)的最小值则求偏导,并对theta进行迭代,至其收敛:

computeTheta

α是学习速率,其作用是避免步长过大时J(theta)无法达到最小值,或步长多短时学习时间较长。另外在实际应用时可以直接另α=α*(1/m),只要给予α恰当的值就不会影响最终结果。

a)批量梯度下降算法 Java版

package com.opsunv.machine.regression;
 
public class BatchGradient {
 
	public static void main(String[] args) {
		//训练集合输入值
		double x[][] = { { 1, 4 }, { 2, 5 }, { 5, 1 }, { 4, 2 } };
		//训练集合期望输出值
		double y[] = { 19, 26, 19, 20 };
		//线性方程参数
		double theta[] = { 0, 0 }; 
		double learningRate = 0.01;
 
		for (int i = 0; i < 100 ; i++) {
			double err_sum = 0;
 
			double[] tmp = new double[theta.length];
			System.arraycopy(theta, 0, tmp, 0, theta.length);
 
			for (int j = 0; j < x.length; j++) {
 
				double h = 0;
				for (int k = 0; k < theta.length; k++) {
					h += x[j][k] * theta[k];
				}
 
				err_sum = h - y[j] ;
 
				for (int k = 0; k < theta.length; k++) {
					//梯度下降 ,这里直接另 α=α*(1/m),所以没有乘 1/m
					tmp[k] -= learningRate * err_sum* x[j][k]; 
				}
			}
 
			//批量更新参数
			theta = tmp;
		}
 
		for(int i=0;i<theta.length;i++){
			System.out.println("theta"+i+"="+theta[i]);
		}
 
	}
}

a)批量梯度下降算法 Octave版

X = [1 4;2 5;5 1;4 2 ];
y = [19;26;19;20];
theta = zeros(2,1);
 
m = length(X);
a = 0.01;
 
for i=1:1000
	h = ((X*theta)-y)';
	theta = theta - (a*(1/m)*h*X)';
end;
 
theta

c)随机梯度下降算法,以后有空再给出。

最小二乘法和梯度下降法的区别是;最小二乘对于特征向量较少时可以很快的计算出结果,但是有一定局限性如训练集合X必须满足|X|!=0;对于梯度下降法缺点是需要考虑学习速率参数α的大小,并且梯度下降法是一个迭代的过程在一定情况下比最小二乘法慢,不过梯度下降法可以应对更多的情况。

Machine Learning

2014年11月18日 没有评论

最近买了基本跟机器学习相关的书籍看看能不能入门,《数学之美》 《机器学习》 《统计学习方法》 ,以及大学时还没有扔掉的《高数》 《概率统计》 《线性代数》,并且还看了《 斯坦福大学公开课 :机器学习课程》,感觉基础数学基本忘得差不多了。这两天看了,马尔科夫模型:C-K方程、Viterbi算法 和 线性回归:梯度下降算法(随机梯度下降和批量梯度下降)、最小二乘法,只搞清楚了能干什么,公式的意义,但对公式的推导基本是晕的。

下阶段准备用业余时间考虑一个可以用到机器学习相关原理的应用,在实践中学习,纯理论的实在有点头大。

分类: 生活 标签:

PHP的pack与unpack

2014年9月30日 没有评论

PHP的pack和unpack主要用于把数据进行二进制化和反二进制化,一般用于网络传输或者存储数据时用,能一定程度降低数据长度。

pack函数的用法在PHP文档中已说明清楚了,针对具体的format格式不做说明,下面举例几种用法。

pack('L',1);//把数字1转换为无符号long型,占4字节
pack('c','a');//转换为二进制字符
pack('c3L','abc',1);//转换为3个字符和1个long型
pack('c*','aaaaaaaaaaaaaaaaaaaaaa'); //转换n个字符

通过上面代码在format后面可以跟数字表示转换几个,可以跟*表示之后的所有。

unpack函数的用法:

$data = pack('c3L2','abc',100,200);
unpack('c3str/Lnum1/Lnum2',$data); //得到array('str'=>'abc','num1'=>100,'num2'=>200);
分类: 高级民工 标签: