- Otwieramy nowy projekt i ustawiamy parametry środowiska.
import findspark
findspark.init()
- Przygotowanie bibliotek do realizacji zadania w ramach funkcjonalności bibliotek
opracowanych dla języka python wyznaczających model drzewa decyzyjnego.
from pyspark import SparkConf
from pyspark import SparkContext
sc = SparkContext.getOrCreate(SparkConf().setMaster("local[*]"))
from pyspark.mllib.regression import LabeledPoint
- Przygotowanie danych do realizacji zadania.
outlook = {'sunny': 0.0, 'overcast': 1.0, 'rainy': 2.0}
labeledpoints = [
LabeledPoint(0.0,[outlook['sunny'],85,85,False]),
LabeledPoint(0.0,[outlook['sunny'],80,90,True]),
LabeledPoint(1.0,[outlook['overcast'],83,86,False]),
LabeledPoint(1.0,[outlook['rainy'],70,96,False]),
LabeledPoint(1.0,[outlook['rainy'],68,80,False]),
LabeledPoint(0.0,[outlook['rainy'],65,70,True]),
LabeledPoint(1.0,[outlook['overcast'],64,65,True]),
LabeledPoint(0.0,[outlook['sunny'],72,95,False]),
LabeledPoint(1.0,[outlook['sunny'],69,70,False]),
LabeledPoint(1.0,[outlook['sunny'],75,80,False]),
LabeledPoint(1.0,[outlook['sunny'],75,70,True]),
LabeledPoint(1.0,[outlook['overcast'],72,90,True]),
LabeledPoint(1.0,[outlook['overcast'],81,75,False]),
LabeledPoint(0.0,[outlook['rainy'],71,91,True])
]
data = sc.parallelize(labeledpoints).cache()
- Wyznaczenie modelu i predykcja wartości oczekiwanej z wykorzystaniem drzewa decyzyjnego (MLLib).
from pyspark.mllib.tree import DecisionTree
model = DecisionTree.trainClassifier(data=data,
numClasses=2,
categoricalFeaturesInfo={0: 3})
print(model.toDebugString())
model.predict([outlook["overcast"],85,85,True])
- Wyznaczenie modelu i predykcja z wykorzystaniem Naive Bayes Classifier (MLLib)
from pyspark.mllib.classification import NaiveBayes, NaiveBayesModel
model = NaiveBayes.train(data=data, lambda_=1.0)
model.predict([1.0,85,85,True])
- Przygotowanie bibliotek do realizacji modelu drzewa decyzyjnego
z wykorzystaniem funkcjonalności w programie Spark.
from pyspark.ml.linalg import DenseVector
from pyspark.ml.classification import DecisionTreeClassifier
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
- Przygotowanie zestawu danych.
from pyspark.sql import Row # Prepare DataFrame of labeled observations
outlook = {"sunny": 0.0, "overcast": 1.0, "rainy": 2.0}
observations = [
Row(label=0, features=DenseVector([outlook["sunny"],85,85,False])),
Row(label=0, features=DenseVector([outlook["sunny"],80,90,True])),
Row(label=1, features=DenseVector([outlook["overcast"],83,86,False])),
Row(label=1, features=DenseVector([outlook["rainy"],70,96,False])),
Row(label=1, features=DenseVector([outlook["rainy"],68,80,False])),
Row(label=0, features=DenseVector([outlook["rainy"],65,70,True])),
Row(label=1, features=DenseVector([outlook["overcast"],64,65,True])),
Row(label=0, features=DenseVector([outlook["sunny"],72,95,False])),
Row(label=1, features=DenseVector([outlook["sunny"],69,70,False])),
Row(label=1, features=DenseVector([outlook["sunny"],75,80,False])),
Row(label=1, features=DenseVector([outlook["sunny"],75,70,True])),
Row(label=1, features=DenseVector([outlook["overcast"],72,90,True])),
Row(label=1, features=DenseVector([outlook["overcast"],81,75,False])),
Row(label=0, features=DenseVector([outlook["rainy"],71,91,True]))
]
- Przygotawanie danych w strukturze DataFrame.
rdd = sc.parallelize(observations)
from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("Python Spark Data Exploration") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()
data = spark.createDataFrame(rdd)
- Wyznaczenie zbioru uczącego i testowego ( 30% danych w zbiorze testowym).
(trainingData, testData) = data.randomSplit([0.7, 0.3])
trainingData.show()
testData.show()
- Wyznaczenie modelu drzewa decyzyjnego.
dt = DecisionTreeClassifier()
model = dt.fit(trainingData)
predictions = model.transform(testData)
predictions.show()
- Sparwdzenie poprawności drzewa decyzyjnego z wykorzystaniem danych testowych.
evaluator = MulticlassClassificationEvaluator(labelCol="label", predictionCol="prediction", metricName="accuracy")
accuracy = evaluator.evaluate(predictions)
predictions = model.transform(testData)
print("Test Error = %g " % (1.0 - accuracy))