1、决策树多元分类介绍
决策树多元分类(DecisionTree Multi Class Classfication),预测在多个特征条件不同组合下的准确率。
2、场景假设
“森林覆盖植被”问题。
海拔(Elevation),方位(Aspect),斜率(Slope),水源的垂直距离,荒野分类,水源的水平距离,土壤分类都会影响植被的生长。
字段 | 说明 |
---|---|
特征(feature) | 海拔(Elevation),方位(Aspect),斜率(Slope),水源的垂直距离,荒野分类,水源的水平距离,土壤分类 |
标签(Label) | 森林覆盖分类: 1-云杉/冷杉(Spruce/Fir) 2-美国黑松(Lodgepole Pine) 3-北美黄松(Ponderosa Pine) 4-杨木/柳树(Cottonwood/Willow) 5-山杨(Aspen) 6-花旗松(Douglas-fir) 7-高山矮曲林(Krummholz) |
2、搜集数据
http://archive.ics.uci.edu/ml/machine-learning-databases/covtype/covtype.info
其他数据集:http://archive.ics.uci.edu/ml/index.php
3、基于MLLIB的实现
# -*- coding: UTF-8 -*-
import sys
from time import time
import pandas as pd
import matplotlib.pyplot as plt
from pyspark import SparkConf, SparkContext
from pyspark.mllib.tree import DecisionTree
from pyspark.mllib.regression import LabeledPoint
from pyspark.mllib.evaluation import MulticlassMetrics
def SetLogger( sc ):
logger = sc._jvm.org.apache.log4j
logger.LogManager.getLogger("org"). setLevel( logger.Level.ERROR )
logger.LogManager.getLogger("akka").setLevel( logger.Level.ERROR )
logger.LogManager.getRootLogger().setLevel(logger.Level.ERROR)
def SetPath(sc):
global Path
if sc.master[0:5]=="local" :
Path="file:/home/hduser/pythonwork/PythonProject/"
else:
Path="hdfs://master:9000/user/hduser/"
#如果要在cluster模式运行(hadoop yarn 或Spark Stand alone),请按照书上的说明,先把文件上传到HDFS目录
def get_mapping(rdd, idx):
return rdd.map(lambda fields: fields[idx]).distinct().zipWithIndex().collectAsMap()
def extract_label(record):
label=(record[-1])
return float(label)-1
def convert_float(x):
return (0 if x=="?" else float(x))
def extract_features(record,featureEnd):
numericalFeatures=[convert_float(field) for field in record[0: featureEnd]]
return numericalFeatures
def PrepareData(sc):
#----------------------1.导入并转换数据-------------
print("开始导入数据...")
rawData = sc.textFile(Path+"data/covtype.data")
print("共计:" + str(rawData.count()) + "项")
lines = rawData.map(lambda x: x.split(","))
#----------------------2.建立训练评估所需数据 RDD[LabeledPoint]-------------
labelpointRDD = lines.map(lambda r: LabeledPoint(
extract_label(r),
extract_features(r,len(r) - 1)))
#----------------------3.以随机方式将数据分为3个部分并且返回-------------
(trainData, validationData, testData) = labelpointRDD.randomSplit([8, 1, 1])
print("将数据分trainData:" + str(trainData.count())+\
" validationData:" + str(validationData.count()) +\
" testData:" + str(testData.count()))
print labelpointRDD.first()
return (trainData, validationData, testData)
def PredictData(sc,model):
#----------------------1.导入并转换数据-------------
rawData = sc.textFile(Path+"data/covtype.data")
print("共计:" + str(rawData.count()) + "项")
print("建立训练评估所需数据 RDD...")
lines = rawData.map(lambda x: x.split(","))
#----------------------2.建立预测所需数据 RDD[LabeledPoint]-------------
labelpointRDD = lines.map(lambda r: LabeledPoint(
extract_label(r), extract_features(r,len(r) - 1)))
#----------------------3.进行预测并显示结果-------------
for lp in labelpointRDD.take(100):
predict = model.predict(lp.features)
label=lp.label
features=lp.features
result = ("正确" if (label == predict) else "错误")
print("土地条件:海拔:" + str(features[0]) +
" 方位:" + str(features[1]) +
" 斜率:" + str(features[2]) +
" 水源垂直距离:" + str(features[3]) +
" 水源水平距离:" + str(features[4]) +
" 9点时阴影:" + str(features[5]) +
"....==>预测:" + str(predict) +
" 实际:" + str(label) + "结果:" + result)
def evaluateModel(model, validationData):
score = model.predict(validationData.map(lambda p: p.features))
scoreAndLabels=score.zip(validationData.map(lambda p: p.label))
metrics = MulticlassMetrics(scoreAndLabels)
accuracy = metrics.accuracy
return( accuracy)
def trainEvaluateModel(trainData,validationData,
impurityParm, maxDepthParm, maxBinsParm):
startTime = time()
model = DecisionTree.trainClassifier(trainData,\
numClasses=7, categoricalFeaturesInfo={}, \
impurity=impurityParm,
maxDepth=maxDepthParm,
maxBins=maxBinsParm)
accuracy = evaluateModel(model, validationData)
duration = time() - startTime
print "训练评估:使用参数" + \
" impurityParm= %s"%impurityParm+ \
" maxDepthParm= %s"%maxDepthParm+ \
" maxBinsParm = %d."%maxBinsParm + \
" 所需时间=%d"%duration + \
" 结果accuracy = %f " % accuracy
return (accuracy,duration, impurityParm, maxDepthParm, maxBinsParm,model)
def evalParameter(trainData, validationData, evaparm,impurityList, maxDepthList, maxBinsList):
metrics = [trainEvaluateModel(trainData, validationData, impurity,numIter, maxBins )
for impurity in impurityList for numIter in maxDepthList for maxBins in maxBinsList ]
if evaparm=="impurity":
IndexList=impurityList[:]
elif evaparm=="maxDepth":
IndexList=maxDepthList[:]
elif evaparm=="maxBins":
IndexList=maxBinsList[:]
df = pd.DataFrame(metrics,index=IndexList,
columns=['accuracy', 'duration','impurity', 'maxDepth', 'maxBins','model'])
showchart(df,evaparm,'accuracy','duration',0.6,1.0 )
def showchart(df,evalparm ,barData,lineData,yMin,yMax):
ax = df[barData].plot(kind='bar', titl =evalparm,figsize=(10,6),legend=True, fontsize=12)
ax.set_xlabel(evalparm,fontsize=12)
ax.set_ylim([yMin,yMax])
ax.set_ylabel(barData,fontsize=12)
ax2 = ax.twinx()
ax2.plot(df[[lineData ]].values, linestyle='-', marker='o', linewidth=2.0,color='r')
plt.show()
def evalAllParameter(training_RDD, validation_RDD, impurityList, maxDepthList, maxBinsList):
metrics = [trainEvaluateModel(trainData, validationData, impurity,numIter, maxBins )
for impurity in impurityList for numIter in maxDepthList for maxBins in maxBinsList ]
Smetrics = sorted(metrics, key=lambda k: k[0], reverse=True)
bestParameter=Smetrics[0]
print("调校后最佳参数:impurity:" + str(bestParameter[2]) +
" ,maxDepth:" + str(bestParameter[3]) +
" ,maxBins:" + str(bestParameter[4]) +
" ,结果accuracy = " + str(bestParameter[0]))
return bestParameter[5]
def parametersEval(training_RDD, validation_RDD):
print("----- 评估impurity参数使用 ---------")
evalParameter(trainData, validationData,"impurity",
impurityList=["gini", "entropy"],
maxDepthList=[10],
maxBinsList=[10 ])
print("----- 评估maxDepth参数使用 ---------")
evalParameter(trainData, validationData,"maxDepth",
impurityList=["gini"],
maxDepthList=[3, 5, 10, 15, 20, 25],
maxBinsList=[10])
print("----- 评估maxBins参数使用 ---------")
evalParameter(trainData, validationData,"maxBins",
impurityList=["gini"],
maxDepthList =[10],
maxBinsList=[3, 5, 10, 50, 100, 200 ])
def CreateSparkContext():
sparkConf = SparkConf() \
.setAppName("RunDecisionTreeBinary") \
.set("spark.ui.showConsoleProgress", "false")
sc = SparkContext(conf = sparkConf)
print ("master="+sc.master)
SetLogger(sc)
SetPath(sc)
return (sc)
if __name__ == "__main__":
print("RunDecisionTreeMulti")
sc=CreateSparkContext()
print("==========数据准备阶段===============")
(trainData, validationData, testData) =PrepareData(sc)
trainData.persist(); validationData.persist(); testData.persist()
print("==========训练评估阶段===============")
(AUC,duration, impurityParm, maxDepthParm, maxBinsParm,model)= \
trainEvaluateModel(trainData, validationData, "entropy", 15,50)
#if (len(sys.argv) == 2) and (sys.argv[1]=="-e"):
# parametersEval(trainData, validationData)
#elif (len(sys.argv) == 2) and (sys.argv[1]=="-a"):
print("-----所有参数训练评估找出最好的参数组合---------")
model=evalAllParameter(trainData, validationData,
["gini", "entropy"],
[3, 5, 10, 15],
[3, 5, 10, 50 ])
print("==========测试阶段===============")
accuracy = evaluateModel(model, testData)
print("使用test Data测试最佳模型,结果 accuracy:" + str(accuracy))
print("==========预测数据===============")
PredictData(sc, model)
#print model.toDebugString()
19/06/01 10:15:07 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
]0;IPython: pythonwork/PythonProjectRunDecisionTreeMulti
master=spark://master:7077
==========数据准备阶段===============
开始导入数据...
共计:581012项
将数据分trainData:465004 validationData:58086 testData:57922
(4.0,[2596.0,51.0,3.0,258.0,0.0,510.0,221.0,232.0,148.0,6279.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0])
==========训练评估阶段===============
训练评估:使用参数 impurityParm= entropy maxDepthParm= 15 maxBinsParm = 50. 所需时间=71 结果accuracy = 0.855473
-----所有参数训练评估找出最好的参数组合---------
训练评估:使用参数 impurityParm= gini maxDepthParm= 3 maxBinsParm = 3. 所需时间=50 结果accuracy = 0.661709
训练评估:使用参数 impurityParm= gini maxDepthParm= 3 maxBinsParm = 5. 所需时间=50 结果accuracy = 0.678460
训练评估:使用参数 impurityParm= gini maxDepthParm= 3 maxBinsParm = 10. 所需时间=49 结果accuracy = 0.672262
训练评估:使用参数 impurityParm= gini maxDepthParm= 3 maxBinsParm = 50. 所需时间=51 结果accuracy = 0.675671
训练评估:使用参数 impurityParm= gini maxDepthParm= 5 maxBinsParm = 3. 所需时间=57 结果accuracy = 0.687446
训练评估:使用参数 impurityParm= gini maxDepthParm= 5 maxBinsParm = 5. 所需时间=47 结果accuracy = 0.701288
训练评估:使用参数 impurityParm= gini maxDepthParm= 5 maxBinsParm = 10. 所需时间=50 结果accuracy = 0.696967
训练评估:使用参数 impurityParm= gini maxDepthParm= 5 maxBinsParm = 50. 所需时间=46 结果accuracy = 0.703388
训练评估:使用参数 impurityParm= gini maxDepthParm= 10 maxBinsParm = 3. 所需时间=58 结果accuracy = 0.732603
训练评估:使用参数 impurityParm= gini maxDepthParm= 10 maxBinsParm = 5. 所需时间=60 结果accuracy = 0.761612
训练评估:使用参数 impurityParm= gini maxDepthParm= 10 maxBinsParm = 10. 所需时间=56 结果accuracy = 0.774765
训练评估:使用参数 impurityParm= gini maxDepthParm= 10 maxBinsParm = 50. 所需时间=55 结果accuracy = 0.776676
训练评估:使用参数 impurityParm= gini maxDepthParm= 15 maxBinsParm = 3. 所需时间=45 结果accuracy = 0.778208
训练评估:使用参数 impurityParm= gini maxDepthParm= 15 maxBinsParm = 5. 所需时间=46 结果accuracy = 0.815601
训练评估:使用参数 impurityParm= gini maxDepthParm= 15 maxBinsParm = 10. 所需时间=46 结果accuracy = 0.844059
训练评估:使用参数 impurityParm= gini maxDepthParm= 15 maxBinsParm = 50. 所需时间=46 结果accuracy = 0.849361
训练评估:使用参数 impurityParm= entropy maxDepthParm= 3 maxBinsParm = 3. 所需时间=47 结果accuracy = 0.658024
训练评估:使用参数 impurityParm= entropy maxDepthParm= 3 maxBinsParm = 5. 所需时间=44 结果accuracy = 0.664411
训练评估:使用参数 impurityParm= entropy maxDepthParm= 3 maxBinsParm = 10. 所需时间=48 结果accuracy = 0.670196
训练评估:使用参数 impurityParm= entropy maxDepthParm= 3 maxBinsParm = 50. 所需时间=48 结果accuracy = 0.669129
训练评估:使用参数 impurityParm= entropy maxDepthParm= 5 maxBinsParm = 3. 所需时间=43 结果accuracy = 0.691647
训练评估:使用参数 impurityParm= entropy maxDepthParm= 5 maxBinsParm = 5. 所需时间=43 结果accuracy = 0.695865
训练评估:使用参数 impurityParm= entropy maxDepthParm= 5 maxBinsParm = 10. 所需时间=50 结果accuracy = 0.693145
训练评估:使用参数 impurityParm= entropy maxDepthParm= 5 maxBinsParm = 50. 所需时间=45 结果accuracy = 0.701477
训练评估:使用参数 impurityParm= entropy maxDepthParm= 10 maxBinsParm = 3. 所需时间=46 结果accuracy = 0.723737
训练评估:使用参数 impurityParm= entropy maxDepthParm= 10 maxBinsParm = 5. 所需时间=54 结果accuracy = 0.758393
训练评估:使用参数 impurityParm= entropy maxDepthParm= 10 maxBinsParm = 10. 所需时间=45 结果accuracy = 0.764091
训练评估:使用参数 impurityParm= entropy maxDepthParm= 10 maxBinsParm = 50. 所需时间=54 结果accuracy = 0.775454
训练评估:使用参数 impurityParm= entropy maxDepthParm= 15 maxBinsParm = 3. 所需时间=54 结果accuracy = 0.769067
训练评估:使用参数 impurityParm= entropy maxDepthParm= 15 maxBinsParm = 5. 所需时间=57 结果accuracy = 0.819767
训练评估:使用参数 impurityParm= entropy maxDepthParm= 15 maxBinsParm = 10. 所需时间=57 结果accuracy = 0.841597
训练评估:使用参数 impurityParm= entropy maxDepthParm= 15 maxBinsParm = 50. 所需时间=63 结果accuracy = 0.855473
调校后最佳参数:impurity:entropy ,maxDepth:15 ,maxBins:50 ,结果accuracy = 0.855472919464
==========测试阶段===============
使用test Data测试最佳模型,结果 accuracy:0.859310797279
==========预测数据===============
共计:581012项
建立训练评估所需数据 RDD...
土地条件:海拔:2596.0 方位:51.0 斜率:3.0 水源垂直距离:258.0 水源水平距离:0.0 9点时阴影:510.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2590.0 方位:56.0 斜率:2.0 水源垂直距离:212.0 水源水平距离:-6.0 9点时阴影:390.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2804.0 方位:139.0 斜率:9.0 水源垂直距离:268.0 水源水平距离:65.0 9点时阴影:3180.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2785.0 方位:155.0 斜率:18.0 水源垂直距离:242.0 水源水平距离:118.0 9点时阴影:3090.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2595.0 方位:45.0 斜率:2.0 水源垂直距离:153.0 水源水平距离:-1.0 9点时阴影:391.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2579.0 方位:132.0 斜率:6.0 水源垂直距离:300.0 水源水平距离:-15.0 9点时阴影:67.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2606.0 方位:45.0 斜率:7.0 水源垂直距离:270.0 水源水平距离:5.0 9点时阴影:633.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2605.0 方位:49.0 斜率:4.0 水源垂直距离:234.0 水源水平距离:7.0 9点时阴影:573.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2617.0 方位:45.0 斜率:9.0 水源垂直距离:240.0 水源水平距离:56.0 9点时阴影:666.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2612.0 方位:59.0 斜率:10.0 水源垂直距离:247.0 水源水平距离:11.0 9点时阴影:636.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2612.0 方位:201.0 斜率:4.0 水源垂直距离:180.0 水源水平距离:51.0 9点时阴影:735.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2886.0 方位:151.0 斜率:11.0 水源垂直距离:371.0 水源水平距离:26.0 9点时阴影:5253.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2742.0 方位:134.0 斜率:22.0 水源垂直距离:150.0 水源水平距离:69.0 9点时阴影:3215.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2609.0 方位:214.0 斜率:7.0 水源垂直距离:150.0 水源水平距离:46.0 9点时阴影:771.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2503.0 方位:157.0 斜率:4.0 水源垂直距离:67.0 水源水平距离:4.0 9点时阴影:674.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2495.0 方位:51.0 斜率:7.0 水源垂直距离:42.0 水源水平距离:2.0 9点时阴影:752.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2610.0 方位:259.0 斜率:1.0 水源垂直距离:120.0 水源水平距离:-1.0 9点时阴影:607.0....==>预测:1.0 实际:4.0结果:错误
土地条件:海拔:2517.0 方位:72.0 斜率:7.0 水源垂直距离:85.0 水源水平距离:6.0 9点时阴影:595.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2504.0 方位:0.0 斜率:4.0 水源垂直距离:95.0 水源水平距离:5.0 9点时阴影:691.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2503.0 方位:38.0 斜率:5.0 水源垂直距离:85.0 水源水平距离:10.0 9点时阴影:741.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2501.0 方位:71.0 斜率:9.0 水源垂直距离:60.0 水源水平距离:8.0 9点时阴影:767.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2880.0 方位:209.0 斜率:17.0 水源垂直距离:216.0 水源水平距离:30.0 9点时阴影:4986.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2768.0 方位:114.0 斜率:23.0 水源垂直距离:192.0 水源水平距离:82.0 9点时阴影:3339.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2511.0 方位:54.0 斜率:8.0 水源垂直距离:124.0 水源水平距离:0.0 9点时阴影:638.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2507.0 方位:22.0 斜率:9.0 水源垂直距离:120.0 水源水平距离:14.0 9点时阴影:732.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2492.0 方位:135.0 斜率:6.0 水源垂直距离:0.0 水源水平距离:0.0 9点时阴影:860.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2489.0 方位:163.0 斜率:10.0 水源垂直距离:30.0 水源水平距离:-4.0 9点时阴影:849.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2962.0 方位:148.0 斜率:16.0 水源垂直距离:323.0 水源水平距离:23.0 9点时阴影:5916.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2811.0 方位:135.0 斜率:1.0 水源垂直距离:212.0 水源水平距离:30.0 9点时阴影:3670.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2739.0 方位:117.0 斜率:24.0 水源垂直距离:127.0 水源水平距离:53.0 9点时阴影:3281.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2703.0 方位:122.0 斜率:30.0 水源垂直距离:67.0 水源水平距离:27.0 9点时阴影:3191.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2522.0 方位:105.0 斜率:7.0 水源垂直距离:120.0 水源水平距离:1.0 9点时阴影:595.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2519.0 方位:102.0 斜率:6.0 水源垂直距离:124.0 水源水平距离:4.0 9点时阴影:616.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2516.0 方位:23.0 斜率:6.0 水源垂直距离:150.0 水源水平距离:4.0 9点时阴影:658.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2515.0 方位:41.0 斜率:9.0 水源垂直距离:162.0 水源水平距离:4.0 9点时阴影:680.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2900.0 方位:45.0 斜率:19.0 水源垂直距离:242.0 水源水平距离:20.0 9点时阴影:5199.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2709.0 方位:125.0 斜率:28.0 水源垂直距离:67.0 水源水平距离:23.0 9点时阴影:3224.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2511.0 方位:92.0 斜率:7.0 水源垂直距离:182.0 水源水平距离:18.0 9点时阴影:722.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2749.0 方位:98.0 斜率:30.0 水源垂直距离:124.0 水源水平距离:53.0 9点时阴影:3316.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2686.0 方位:354.0 斜率:12.0 水源垂直距离:0.0 水源水平距离:0.0 9点时阴影:3167.0....==>预测:0.0 实际:4.0结果:错误
土地条件:海拔:2699.0 方位:347.0 斜率:3.0 水源垂直距离:0.0 水源水平距离:0.0 9点时阴影:2096.0....==>预测:0.0 实际:0.0结果:正确
土地条件:海拔:2570.0 方位:346.0 斜率:2.0 水源垂直距离:0.0 水源水平距离:0.0 9点时阴影:331.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2533.0 方位:71.0 斜率:9.0 水源垂直距离:150.0 水源水平距离:-3.0 9点时阴影:577.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2703.0 方位:330.0 斜率:27.0 水源垂直距离:30.0 水源水平距离:17.0 9点时阴影:3141.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2678.0 方位:128.0 斜率:5.0 水源垂直距离:95.0 水源水平距离:23.0 9点时阴影:1660.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2529.0 方位:68.0 斜率:8.0 水源垂直距离:210.0 水源水平距离:-5.0 9点时阴影:666.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2524.0 方位:94.0 斜率:7.0 水源垂直距离:212.0 水源水平距离:-4.0 9点时阴影:684.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2536.0 方位:99.0 斜率:6.0 水源垂直距离:234.0 水源水平距离:0.0 9点时阴影:659.0....==>预测:1.0 实际:4.0结果:错误
土地条件:海拔:2498.0 方位:66.0 斜率:6.0 水源垂直距离:95.0 水源水平距离:7.0 9点时阴影:900.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2489.0 方位:100.0 斜率:7.0 水源垂直距离:85.0 水源水平距离:13.0 9点时阴影:810.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2713.0 方位:117.0 斜率:30.0 水源垂直距离:60.0 水源水平距离:17.0 9点时阴影:3297.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2739.0 方位:323.0 斜率:25.0 水源垂直距离:85.0 水源水平距离:43.0 9点时阴影:3118.0....==>预测:0.0 实际:0.0结果:正确
土地条件:海拔:2696.0 方位:72.0 斜率:2.0 水源垂直距离:30.0 水源水平距离:0.0 9点时阴影:3271.0....==>预测:0.0 实际:0.0结果:正确
土地条件:海拔:2510.0 方位:79.0 斜率:14.0 水源垂直距离:192.0 水源水平距离:19.0 9点时阴影:891.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2502.0 方位:81.0 斜率:7.0 水源垂直距离:175.0 水源水平距离:11.0 9点时阴影:912.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2722.0 方位:315.0 斜率:24.0 水源垂直距离:30.0 水源水平距离:19.0 9点时阴影:3216.0....==>预测:0.0 实际:0.0结果:正确
土地条件:海拔:2500.0 方位:74.0 斜率:11.0 水源垂直距离:190.0 水源水平距离:9.0 9点时阴影:930.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2486.0 方位:68.0 斜率:5.0 水源垂直距离:180.0 水源水平距离:-4.0 9点时阴影:870.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2489.0 方位:11.0 斜率:4.0 水源垂直距离:175.0 水源水平距离:13.0 9点时阴影:840.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2489.0 方位:42.0 斜率:6.0 水源垂直距离:162.0 水源水平距离:13.0 9点时阴影:810.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2490.0 方位:75.0 斜率:5.0 水源垂直距离:134.0 水源水平距离:17.0 9点时阴影:810.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2952.0 方位:107.0 斜率:11.0 水源垂直距离:42.0 水源水平距离:7.0 9点时阴影:5845.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2705.0 方位:90.0 斜率:8.0 水源垂直距离:134.0 水源水平距离:22.0 9点时阴影:2023.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2507.0 方位:40.0 斜率:7.0 水源垂直距离:153.0 水源水平距离:10.0 9点时阴影:930.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2500.0 方位:49.0 斜率:14.0 水源垂直距离:150.0 水源水平距离:27.0 9点时阴影:870.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2493.0 方位:63.0 斜率:10.0 水源垂直距离:127.0 水源水平距离:20.0 9点时阴影:840.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2509.0 方位:59.0 斜率:7.0 水源垂直距离:134.0 水源水平距离:10.0 9点时阴影:900.0....==>预测:4.0 实际:4.0结果:正确
土地条件:海拔:2919.0 方位:13.0 斜率:13.0 水源垂直距离:90.0 水源水平距离:6.0 9点时阴影:5321.0....==>预测:0.0 实际:0.0结果:正确
土地条件:海拔:2740.0 方位:54.0 斜率:6.0 水源垂直距离:218.0 水源水平距离:42.0 9点时阴影:2287.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2640.0 方位:80.0 斜率:8.0 水源垂直距离:180.0 水源水平距离:-2.0 9点时阴影:1092.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2843.0 方位:166.0 斜率:12.0 水源垂直距离:242.0 水源水平距离:53.0 9点时阴影:4434.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:3008.0 方位:45.0 斜率:14.0 水源垂直距离:277.0 水源水平距离:10.0 9点时阴影:6371.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2893.0 方位:114.0 斜率:16.0 水源垂直距离:108.0 水源水平距离:30.0 9点时阴影:5066.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2850.0 方位:6.0 斜率:9.0 水源垂直距离:0.0 水源水平距离:0.0 9点时阴影:4858.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2628.0 方位:30.0 斜率:10.0 水源垂直距离:240.0 水源水平距离:19.0 9点时阴影:960.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2864.0 方位:118.0 斜率:18.0 水源垂直距离:201.0 水源水平距离:74.0 9点时阴影:4567.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2827.0 方位:160.0 斜率:28.0 水源垂直距离:134.0 水源水平距离:65.0 9点时阴影:3948.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2529.0 方位:326.0 斜率:5.0 水源垂直距离:30.0 水源水平距离:14.0 9点时阴影:1062.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2808.0 方位:99.0 斜率:7.0 水源垂直距离:382.0 水源水平距离:95.0 9点时阴影:3107.0....==>预测:0.0 实际:0.0结果:正确
土地条件:海拔:2840.0 方位:153.0 斜率:26.0 水源垂直距离:134.0 水源水平距离:42.0 9点时阴影:4613.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2795.0 方位:79.0 斜率:10.0 水源垂直距离:531.0 水源水平距离:96.0 9点时阴影:2980.0....==>预测:1.0 实际:0.0结果:错误
土地条件:海拔:2746.0 方位:143.0 斜率:16.0 水源垂直距离:67.0 水源水平距离:22.0 9点时阴影:2440.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2847.0 方位:352.0 斜率:26.0 水源垂直距离:150.0 水源水平距离:82.0 9点时阴影:3697.0....==>预测:0.0 实际:0.0结果:正确
土地条件:海拔:2840.0 方位:14.0 斜率:14.0 水源垂直距离:216.0 水源水平距离:88.0 9点时阴影:3552.0....==>预测:0.0 实际:0.0结果:正确
土地条件:海拔:2537.0 方位:42.0 斜率:7.0 水源垂直距离:210.0 水源水平距离:17.0 9点时阴影:1132.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2860.0 方位:358.0 斜率:17.0 水源垂直距离:175.0 水源水平距离:98.0 9点时阴影:3705.0....==>预测:0.0 实际:0.0结果:正确
土地条件:海拔:2818.0 方位:332.0 斜率:26.0 水源垂直距离:30.0 水源水平距离:17.0 9点时阴影:4526.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2801.0 方位:18.0 斜率:7.0 水源垂直距离:560.0 水源水平距离:58.0 9点时阴影:3084.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2791.0 方位:63.0 斜率:10.0 水源垂直距离:418.0 水源水平距离:48.0 9点时阴影:2942.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2745.0 方位:306.0 斜率:11.0 水源垂直距离:67.0 水源水平距离:24.0 9点时阴影:2416.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2514.0 方位:102.0 斜率:6.0 水源垂直距离:272.0 水源水平距离:-5.0 9点时阴影:1082.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2788.0 方位:13.0 斜率:16.0 水源垂直距离:30.0 水源水平距离:8.0 9点时阴影:4126.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2562.0 方位:354.0 斜率:12.0 水源垂直距离:67.0 水源水平距离:9.0 9点时阴影:1057.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:3073.0 方位:173.0 斜率:12.0 水源垂直距离:108.0 水源水平距离:-3.0 9点时阴影:6836.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2978.0 方位:71.0 斜率:10.0 水源垂直距离:426.0 水源水平距离:85.0 9点时阴影:5742.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2860.0 方位:31.0 斜率:10.0 水源垂直距离:295.0 水源水平距离:98.0 9点时阴影:3644.0....==>预测:0.0 实际:0.0结果:正确
土地条件:海拔:3067.0 方位:164.0 斜率:11.0 水源垂直距离:85.0 水源水平距离:7.0 9点时阴影:6811.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2804.0 方位:72.0 斜率:5.0 水源垂直距离:543.0 水源水平距离:61.0 9点时阴影:3115.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2562.0 方位:59.0 斜率:3.0 水源垂直距离:0.0 水源水平距离:0.0 9点时阴影:1116.0....==>预测:1.0 实际:1.0结果:正确
土地条件:海拔:2567.0 方位:34.0 斜率:9.0 水源垂直距离:190.0 水源水平距离:16.0 9点时阴影:1136.0....==>预测:1.0 实际:1.0结果:正确