diff --git a/SUMMARY.md b/SUMMARY.md index 11b4edc..d17e204 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -19,7 +19,8 @@ * [第四章 Spark图数据计算与分析实战](/chapter4/4Spark图数据计算简介.md) * [4.1 SparkGraphX计算生成最短路径](/chapter4/4.1SparkGraphX计算生成最短路径.md) * [第五章 Spark机器学习实战](/chapter5/5Spark机器学习实战简介.md) - * [5.1 Spark机器学习](/chapter5/5.1Spark机器学习实战.md) + * [5.1 Spark机器学习入门](/chapter5/5.1Spark机器学习入门.md) + * [5.2 Spark机器学习实战](/chapter5/5.2Spark机器学习实战.md) diff --git a/chapter1/1.2Spark单机版环境搭建.md b/chapter1/1.2Spark单机版环境搭建.md index c64405a..19754c6 100644 --- a/chapter1/1.2Spark单机版环境搭建.md +++ b/chapter1/1.2Spark单机版环境搭建.md @@ -22,7 +22,7 @@ 接下来解压,在平台已经将`spark`安装包下载到`/opt`目录下了,所以不需要再下载了。 ``` -tar -zxvf spark-2.2.2-bin-hadoop2.7/ -C /app +tar -zxvf spark-2.2.2-bin-hadoop2.7.tgz -C /app ``` 将压缩包解压到`/app`目录下。 @@ -64,13 +64,9 @@ export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_111 export SCALA_HOME=/app/scala-2.12.7 -export HADOOP_HOME=/usr/local/hadoop/ +export SPARK_MASTER_IP=machine_name # machine_name 根据自己的主机确定 -export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop - -export SPARK_MASTER_IP=machine_name // machine_name 根据自己的主机确定 - -export SPARK_LOCAL_IP=machine_name // machine_name 根据自己的主机确定 +export SPARK_LOCAL_IP=machine_name # machine_name 根据自己的主机确定 ``` @@ -80,8 +76,6 @@ export SPARK_LOCAL_IP=machine_name // machine_name 根据自己的主机确 | - | - | | JAVA_HOME | Java的安装路径 | |SCALA_HOME|Scala的安装路径| -| HADOOP_HOME| Hadoop的安装路径 | -| HADOOP_CONF_DIR| Hadoop配置文件的路径| | SPARK_MASTER_IP | Spark主节点的IP或机器名| | SPARK_LOCAL_IP | Spark本地的IP或主机名 | @@ -111,4 +105,4 @@ export SPARK_LOCAL_IP=machine_name // machine_name 根据自己的主机确
-好了,如果你能到这一步就已经完成了伪分布式`Spark`的安装啦。 \ No newline at end of file +好了,如果你能到这一步就已经完成了单机版`Spark`的安装啦。 \ No newline at end of file diff --git a/chapter5/5.1Spark机器学习入门.md b/chapter5/5.1Spark机器学习入门.md new file mode 100644 index 0000000..b930464 --- /dev/null +++ b/chapter5/5.1Spark机器学习入门.md @@ -0,0 +1,52 @@ +## 5.1 Spark 机器学习入门 + + +### 5.1.1 机器学习的定义 +在维基百科上对机器学习提出以下几种定义: + +- “机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。 + +- “机器学习是对能通过经验自动改进的计算机算法的研究”。 + +- “机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。” + +可以看出机器学习强调三个关键词:算法、经验、性能,其处理过程如下图所示。 + + + +上图表明机器学习是数据通过算法构建出模型并对模型进行评估,评估的性能如果达到要求就拿这个模型来测试其他的数据,如果达不到要求就要调整算法来重新建立模型,再次进行评估,如此循环往复,最终获得满意的经验来处理其他的数据。 + + +### 5.1.2 机器学习的基本任务 + +机器学习基于数据,并以此获取新知识、新技能。它的任务有很多,分类是其基本任务之一。 所谓分类,就是将新数据划分到合适的类别中,一般用于类别型的目标特征。如果目标特征为连续型,则往往采用回归方法。回归是对新目标特征进行预测 , 是机器学习中使用非常广泛的方法之一。 + +分类和回归,都是先根据标签值或目标值建立模型或规则,然后利用这些带有目标值 的数据形成的模型或规则 ,对新数据进行识别或预测。这两种方法都属于监督学习。与监督学习相对的 +是无监督学习,无监督学习不指定目标值或预先无法知道目标值,它可以把相似或相近的数据划分到相同的组里,聚类就是解决这一类问题的方法之一。 + + + + + +### 5.1.3 如何选择合适的算法 + +当我们接到一个数据分析或挖掘的任务或需求时,如果希望用机器学习来处理,首先 要做的是根据任务或需求选择合适算法,选择算法一般步骤如下图所示: + + + +充分了解数据及其特性,有助于我们更有效地选择机器学习算法。采用以上步骤在一定程度上可以缩小算法的选择范围,使我们少走些弯路,但在具体选择哪种算法方面,一般并不存在最好的算法或者可以给出最好结果的算法。在实际做项目的过程中,这个过程往往需要多次尝试,有时还要尝试不同算法。过先用一种简单熟悉的方法,然后,在这个基础上不断优化,时常能收获意想不到的效果。 + + +### 5.1.4 Spark 机器学习的步骤 + +关于机器学习,我们有一个几乎固定的“套路”,简单来分就四大步骤了。 + +1. 读取数据文件 + +2. 通过某种算法建立数据模型 + +3. 再用测试数据评估数据模型的准确性 + +4. 运行模型进行数据预测. + + diff --git a/chapter5/5.1Spark机器学习实战.md b/chapter5/5.1Spark机器学习实战.md deleted file mode 100644 index e69de29..0000000 diff --git a/chapter5/5.2Spark机器学习实战.md b/chapter5/5.2Spark机器学习实战.md new file mode 100644 index 0000000..2ec12c2 --- /dev/null +++ b/chapter5/5.2Spark机器学习实战.md @@ -0,0 +1,208 @@ + +## 5.1 Spark机器学习实战 + +坦克图片识别分类 + +### 5.1.1 数据集介绍 + +三种坦克图片数据集,如下图所示: + + + + + + + +以上有三种数据集,分别是以`bmp-2`开头的`BMP-2`步兵战车的图片、以`btr-70`开头的`BTR-70`装甲输送车的图片、以`t-72`开头的`T-72`主战坦克的图片。 + + +#### 5.1.2 数据集处理 + +##### 5.1.2.1 加载图片数据集 + + +我们可以使用`opencv_python`计算机视觉库来读取一幅图像。 + +在读取图像之前,我们需要对图像的构造有一定的理解,怎么理解呢? + +简单来说图像就是一个矩阵,在`OpenCV for Python`中,图像就是`NumPy`中的数组! + +我们知道图像就是一个矩阵了,之后我们通过代码来读取呢? + +示例: +``` +# 读入图像文件,返回numpy数组 +img = cv2.imread('/root/1.jpg', cv2.IMREAD_GRAYSCALE) +rows, columns = img.shape +# 将二维数组转一维数组 +img = img.reshape(rows*columns) +``` + + +##### 5.1.2.2 将一维数组转换成 Spark 中的向量 + +上一步我们将图片转换成一维的数组之后了,接下来我们将一维数组转换成 Spark 中的向量。 + +可能你会有疑问?为什么要将一维数组转换成 Spark 中的向量呢? + +简单来说就是类型不匹配了。 + +示例: + +``` +import cv2 +img = cv2.imread("testing2\\bmp-2-1.jpg", cv2.IMREAD_GRAYSCALE) +rows, columns = img.shape +img = img.reshape(rows * columns) +print(type(img)) +``` + +结果如下: +``` +