/sparkML_project

基于sparkMLlib的森林植被分类系统

Primary LanguagePython

森林植被分类

1. 项目思路

问题描述:依据环境、土壤等信息对森林植被类型进行分类预测
问题解决流程:

  1. 预处理:数据集—>清理与规约—>数据划分
  2. 训练:训练集—>特征选取—>训练—>分类器
  3. 分类:测试集—>特征选取—>分类—>判决
    算法选取:对于分类器,选取了典型的贝叶斯、Lazy Learning和Trees三类算法加以实现

2. 运行环境

集群部署:master4G,两个worker各2G
环境:Spark + Pycharm
语言:Python

3. 数据集描述

数据源:UCI数据集
数据量:581012
字段描述:54个属性字段,一个类别字段
环境属性10个:数值属性,描述海拔、方位、斜角等环境信息
野生区域属性4个:二元属性,标定区域类型
土壤类型属性40个:二元属性,标记土壤类型
森林植被类型:1~7,标记七种不同类型

4. 算法描述

4.1 朴素贝叶斯

核心代码:
 # 将数据按照60%和40%的比例分为训练集和测试集
 (trainingData, testData) = data.randomSplit([0.6, 0.4], seed=0)
 # 训练朴素贝叶斯模型  model = NaiveBayes.train(training, 1.0)
参数说明:
 Addictive Smoothing:拉普拉斯平滑,为解决零概率问题进行平滑所需参数,这里为1.0

4.2 决策树

核心代码:
 # 将数据按照70%和30%的比例分为训练集和测试集
 (trainingData, testData) = data.randomSplit([0.7, 0.3])
 # 训练决策树模型
 model=DecisionTree.trainClassifier(trainingData,numClasses=8,categoricalFeaturesInfo={},impurity='gini', maxDepth=15, maxBins=32)
参数说明:
 numClasses:分类数,需比实际类别数量大,这里设置为8;
 categoricalFeaturesInfo:特征类别信息,为空,意为所有特征为连续型变量;
 impurity:信息纯度度量,进行分类时可选择熵或基尼,这里设置为基尼;
 maxDepth:决策树最大深度,这里设为15;
 maxBins:特征分裂时的最大划分数量,这里设为32。

4.3 K近邻

核心代码:
 def knn(sampleData, label, data, k):
  difference=np.zeros(len(sampleData))
  q=Queue.PriorityQueue()
  for i in range(len(difference)):
   t = sampleData[i]-data
   difference[i] = t.dot(t)**0.5
   e = Element(i, difference[i])
   if q.qsize() < k:
    q.put(e)
    continue
   maxe = q.get()
   q.put(difference[i] < maxe.value and e or maxe)
  count=np.zeros(max(label)+1)
  while not q.empty():
   count[label[q.get().id]] += 1
 return count.argmax()
参数说明:
 k为6,距离权重均为1,样本间距离使用欧几里得距离

4.4 随机森林

核心代码:  # 将数据按照70%和30%的比例分为训练集和测试集
(trainingData, testData) = data.randomSplit([0.7, 0.3])
 # 训练随机森林模型
 model=RandomForest.trainClassifier(trainingData,numClasses=8,categoricalFeaturesInfo={},numTrees=20,featureSubsetStrategy="auto",impurity='gini',maxDepth=18,maxBins=32)
参数说明:
    numClasses:分类数,需比实际类别数量大,这里设置为8;
    categoricalFeaturesInfo:特征类别信息,为空,意为所有特征为连续型变量;
    numTrees:森林中树的数量,这里设为20;
    featureSubsetStrategy:特征子集采样策略,auto表示算法自主选取;
    impurity:信息纯度度量,进行分类时可选择熵或基尼,这里设置为基尼;
    maxDepth:决策树最大深度,这里设为18;
    maxBins:特征分裂时的最大划分数量,这里设为32。