Machine learning com PySpark
Andrew Collier
Data Scientist, Fathom Data
Classifique carros pelo país de fabricação.
+---+----+------+------+----+-----------+----------------------------------+-----+
|cyl|size|mass |length|rpm |consumption|features |label|
+---+----+------+------+----+-----------+----------------------------------+-----+
|6 |3.0 |1451.0|4.775 |5200|9.05 |[6.0,3.0,1451.0,4.775,5200.0,9.05]|1.0 |
|4 |2.2 |1129.0|4.623 |5200|6.53 |[4.0,2.2,1129.0,4.623,5200.0,6.53]|0.0 |
|4 |2.2 |1399.0|4.547 |5600|7.84 |[4.0,2.2,1399.0,4.547,5600.0,7.84]|1.0 |
|4 |1.8 |1147.0|4.343 |6500|7.84 |[4.0,1.8,1147.0,4.343,6500.0,7.84]|0.0 |
|4 |1.6 |1111.0|4.216 |5750|9.05 |[4.0,1.6,1111.0,4.216,5750.0,9.05]|0.0 |
+---+----+------+------+----+-----------+----------------------------------+-----+
label = 0 -> fabricado nos EUA
= 1 -> fabricado em outro lugar
Divida os dados em treino e teste.
# Specify a seed for reproducibility
cars_train, cars_test = cars.randomSplit([0.8, 0.2], seed=23)
Dois DataFrames: cars_train e cars_test.
[cars_train.count(), cars_test.count()]
[79, 13]
from pyspark.ml.classification import DecisionTreeClassifier
Crie um classificador de Árvore de Decisão.
tree = DecisionTreeClassifier()
Aprenda com os dados de treino.
tree_model = tree.fit(cars_train)
Faça previsões no conjunto de teste e compare com os valores conhecidos.
prediction = tree_model.transform(cars_test)
+-----+----------+---------------------------------------+
|label|prediction|probability |
+-----+----------+---------------------------------------+
|1.0 |0.0 |[0.9615384615384616,0.0384615384615385]|
|1.0 |1.0 |[0.2222222222222222,0.7777777777777778]|
|1.0 |1.0 |[0.2222222222222222,0.7777777777777778]|
|0.0 |0.0 |[0.9615384615384616,0.0384615384615385]|
|1.0 |1.0 |[0.2222222222222222,0.7777777777777778]|
+-----+----------+---------------------------------------+
Uma matriz de confusão é uma tabela que descreve o desempenho de um modelo nos dados de teste.
prediction.groupBy("label", "prediction").count().show()
+-----+----------+-----+
|label|prediction|count|
+-----+----------+-----+
| 1.0| 1.0| 8| <- Verdadeiro positivo (TP)
| 0.0| 1.0| 2| <- Falso positivo (FP)
| 1.0| 0.0| 3| <- Falso negativo (FN)
| 0.0| 0.0| 6| <- Verdadeiro negativo (TN)
+-----+----------+-----+
Acurácia = (TN + TP) / (TN + TP + FN + FP) — proporção de previsões corretas.
Machine learning com PySpark