基于SVD矩阵分解的推荐算法及其应用

基于SVD矩阵分解的推荐算法及其应用

简要介绍

本文参照网上众多资料,搭建了Spark1.6.3并实现单机运行
主要介绍了如何搭建Spark平台并在Eclipse平台上运行简单的SVD实例

1.环境&软件

Ubuntu 14.04
OpenJDK 7
Scala 2.10.6
Spark 1.6.3
Eclipse 3.8.1
MovieLens 10M(测试用)

2.OpenJDK 7安装

参照:http://www.powerxing.com/install-hadoop/ 内含图片详情

更新apt

sudo apt-get update

安装Java环境

sudo apt-get install openjdk-7-jre openjdk-7-jdk

安装好 OpenJDK 后,需要找到相应的安装路径,这个路径是用于配置 JAVA_HOME 环境变量的。执行如下命令:

dpkg -L openjdk-7-jdk | grep '/bin/javac'

该命令会输出一个路径,除去路径末尾的 “/bin/javac”,剩下的就是正确的路径了。如输出路径为 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac,则我们需要的路径为 /usr/lib/jvm/java-7-openjdk-amd64

接着配置 JAVA_HOME 环境变量,为方便,我们在 ~/.bashrc 中进行设置

gedit ~/.bashrc

在文件最前面添加如下单独一行(注意 = 号前后不能有空格),将“JDK安装路径”改为上述命令得到的路径,并保存:

export JAVA_HOME=JDK安装路径

最后使配置生效

source ~/.bashrc    # 使变量设置生效

设置好后我们来检验一下是否设置正确:

java -version

3.Scala 2.10.6安装

参照:http://blog.csdn.net/lin360580306/article/details/51233397
下载:http://www.scala-lang.org/download/2.10.6.html

解压缩:

tar –zxvf scala-2.10.6.tgz

进入sudo gedit /etc/profile在下面添加路径:

SCALA_HOME=/home/hadoop/scala-2.10.6 #注意替换成解压后的路径
PATH=$PATH:${SCALA_HOME}/bin

使配置生效

source /etc/profile

可以在命令行中输入 scala 检测是否安装成功
基于SVD矩阵分解的推荐算法及其应用_第1张图片

4.Spark1.6.3安装

参照:http://blog.csdn.net/lin360580306/article/details/51233397
下载:http://spark.apache.org/downloads.html

解压缩:

tar –zxvf spark-1.6.3-bin-hadoop2.6.tgz

进入sudo gedit /etc/profile在下面添加路径:

SPARK_HOME=/home/hadoop/spark-1.6.3-bin-hadoop2.6#注意替换成解压后的路径
PATH=$PATH:${SPARK_HOME}/bin

使配置生效

source /etc/profile

可以在命令行中输入 spark-shell(可在安装目录中bin里面找到) 检测是否安装成功

5.Eclipse 3.8安装

参照:http://www.powerxing.com/hadoop-build-project-using-eclipse/ 中的 “安装Eclipse”即可

找到Ubuntu软件中心->搜索eclipse->点击安装

6.Eclipse下使用Java开发SVD

参照:http://www.jianshu.com/p/a617005df355
新建Java工程->导入Spark包
代码:

public class MovieLens {
    public static void main(String[] args) {

        //删除一些无关的log信息
        Logger.getLogger("org.apache.spark").setLevel(Level.WARN);
        Logger.getLogger("org.apache.eclipse.jetty.server").setLevel(Level.OFF);

        //Spark信息配置
        SparkConf conf = new SparkConf().setMaster("local[4]").setAppName("movielens");
        JavaSparkContext sc = new JavaSparkContext(conf);
        //读入文件
        JavaRDD data = sc.textFile("ratings.dat");
        JavaRDD rows = data.map(new Function() {
            private static final long serialVersionUID = 1L;
            //处理文件信息
            @Override
            public Rating call(String arg0) throws Exception {
                String[] strArr = arg0.split("::");
                Rating r = new Rating(Integer.parseInt(strArr[0]), Integer.parseInt(strArr[1]), Double.parseDouble(strArr[2]));
                return r;
            }
        });
        //设置检查点
        sc.setCheckpointDir("checkpoint/");
        ALS als = new ALS();
        als.setCheckpointInterval(2);
        //分解的维度设置为20,最大迭代次数设置为5,而正则化系数设置为0.02
        MatrixFactorizationModel a = als.train(rows.rdd(), 20, 5,0.02);
        sc.close();
    }
}

主要参照:http://www.cnblogs.com/pinard/p/6364932.html 里面的代码,用Java写一遍
代码中使用的MovieLens数据集可以在网上下载 http://files.grouplens.org/datasets/movielens/ml-10m.zip
基于SVD矩阵分解的推荐算法及其应用_第2张图片

你可能感兴趣的:(基于SVD矩阵分解的推荐算法及其应用)