Membuat saluran pembelajaran mesin Apache Spark
Pustaka pembelajaran mesin Apache Spark yang dapat diskalakan (MLlib) menghadirkan kemampuan pemodelan ke lingkungan yang terdistribusi. Paket Spark spark.ml
adalah sekumpulan API tingkat tinggi yang dibangun di DataFrame. API ini membantu Anda membuat dan menyelaraskan saluran pembelajaran mesin praktis.
Pembelajaran mesin Spark mengacu pada API berbasis MLlib DataFrame ini, bukan alur API berbasis RDD yang lama.
Alur pembelajaran mesin (ML) adalah alur kerja lengkap yang menggabungkan beberapa algoritme pembelajaran mesin bersama-sama. Ada banyak langkah yang diperlukan untuk memproses dan belajar dari data yang membutuhkan urutan algoritma. Alur mendefinisikan tahapan dan urutan proses pembelajaran mesin. Di MLlib, tahapan alur diwakili oleh urutan PipelineStages tertentu, di mana Transformer dan Estimator masing-masing menjalankan tugas.
Transformer adalah algoritme yang mengubah satu DataFrame ke DataFrame lainnya dengan menggunakan metode transform()
. Misalnya, transformator fitur dapat membaca satu kolom DataFrame, memetakannya ke kolom lain, dan menghasilkan DataFrame baru dengan kolom yang dipetakan ditambahkan ke kolom tersebut.
Estimator adalah abstraksi algoritme pembelajaran, dan bertanggung jawab untuk memasang atau melatih set data untuk menghasilkan Transformer. Estimator mengimplementasikan metode bernama fit()
, yang menerima DataFrame dan menghasilkan DataFrame, yang merupakan Transformer.
Setiap instans tanpa status dari Transformer atau Estimator memiliki pengidentifikasi uniknya sendiri, yang digunakan saat menentukan parameter. Keduanya menggunakan seragam API untuk menentukan parameter ini.
Contoh alur
Untuk menunjukkan penggunaan praktis alur ML, contoh ini menggunakan file data sampel HVAC.csv
yang dimuat sebelumnya pada penyimpanan default untuk kluster HDInsight Anda, baik Microsoft Azure Storage atau Data Lake Storage. Untuk melihat konten file, arahkan ke /HdiSamples/HdiSamples/SensorSampleData/hvac
direktori.
HVAC.csv
berisi serangkaian waktu dengan sistem suhu target dan suhu aktual untuk HVAC (pemanasan, ventilasi, dan AC) di berbagai bangunan. Tujuannya adalah untuk melatih model pada data, dan menghasilkan suhu perkiraan untuk bangunan tertentu.
Kode berikut:
- Mendefinisikan
LabeledDocument
, yang menyimpanBuildingID
,SystemInfo
(pengidentifikasi dan usia sistem), danlabel
(1,0 jika bangunan terlalu panas, 0,0 sebaliknya). - Membuat fungsi pengurai kustom
parseDocument
yang mengambil garis (baris) data dan menentukan apakah penyusun "panas" dengan membandingkan suhu target dengan suhu aktual. - Menerapkan parser saat mengekstrak data sumber.
- Membuat data pelatihan.
from pyspark.ml import Pipeline
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.feature import HashingTF, Tokenizer
from pyspark.sql import Row
# The data structure (column meanings) of the data array:
# 0 Date
# 1 Time
# 2 TargetTemp
# 3 ActualTemp
# 4 System
# 5 SystemAge
# 6 BuildingID
LabeledDocument = Row("BuildingID", "SystemInfo", "label")
# Define a function that parses the raw CSV file and returns an object of type LabeledDocument
def parseDocument(line):
values = [str(x) for x in line.split(',')]
if (values[3] > values[2]):
hot = 1.0
else:
hot = 0.0
textValue = str(values[4]) + " " + str(values[5])
return LabeledDocument((values[6]), textValue, hot)
# Load the raw HVAC.csv file, parse it using the function
data = sc.textFile(
"wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
documents = data.filter(lambda s: "Date" not in s).map(parseDocument)
training = documents.toDF()
Contoh alur ini memiliki tiga tahap: Tokenizer
dan HashingTF
(kedua Transformers), Logistic Regression
dan (Estimator). Data yang diekstrak dan diurai training
dalam DataFrame mengalir melalui alur pipeline.fit(training)
ketika dipanggil.
- Tahap pertama,
Tokenizer
, membagi kolom inputSystemInfo
(terdiri dari pengidentifikasi sistem dan nilai usia) menjadi kolom outputwords
. Kolomwords
baru ini ditambahkan ke DataFrame. - Tahap kedua,
HashingTF
, mengubah kolomwords
baru menjadi vektor fitur. Kolomfeatures
baru ini ditambahkan ke DataFrame. Dua tahap pertama ini adalah Transformers. - Tahap ketiga,
LogisticRegression
, adalah Estimator, dan jadi alur memanggil metodeLogisticRegression.fit()
untuk menghasilkanLogisticRegressionModel
.
tokenizer = Tokenizer(inputCol="SystemInfo", outputCol="words")
hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol="features")
lr = LogisticRegression(maxIter=10, regParam=0.01)
# Build the pipeline with our tokenizer, hashingTF, and logistic regression stages
pipeline = Pipeline(stages=[tokenizer, hashingTF, lr])
model = pipeline.fit(training)
Untuk melihat kolom baru words
dan features
yang ditambahkan oleh Tokenizer
dan HashingTF
transformers, dan sampel estimator LogisticRegression
, jalankan metode PipelineModel.transform()
pada DataFrame asli. Dalam kode produksi, langkah selanjutnya adalah lulus dalam uji DataFrame untuk memvalidasi pelatihan.
peek = model.transform(training)
peek.show()
# Outputs the following:
+----------+----------+-----+--------+--------------------+--------------------+--------------------+----------+
|BuildingID|SystemInfo|label| words| features| rawPrediction| probability|prediction|
+----------+----------+-----+--------+--------------------+--------------------+--------------------+----------+
| 4| 13 20| 0.0|[13, 20]|(262144,[250802,2...|[0.11943986671420...|[0.52982451901740...| 0.0|
| 17| 3 20| 0.0| [3, 20]|(262144,[89074,25...|[0.17511205617446...|[0.54366648775222...| 0.0|
| 18| 17 20| 1.0|[17, 20]|(262144,[64358,25...|[0.14620993833623...|[0.53648750722548...| 0.0|
| 15| 2 23| 0.0| [2, 23]|(262144,[31351,21...|[-0.0361327091023...|[0.49096780538523...| 1.0|
| 3| 16 9| 1.0| [16, 9]|(262144,[153779,1...|[-0.0853679939336...|[0.47867095324139...| 1.0|
| 4| 13 28| 0.0|[13, 28]|(262144,[69821,25...|[0.14630166986618...|[0.53651031790592...| 0.0|
| 2| 12 24| 0.0|[12, 24]|(262144,[187043,2...|[-0.0509556393066...|[0.48726384581522...| 1.0|
| 16| 20 26| 1.0|[20, 26]|(262144,[128319,2...|[0.33829638728900...|[0.58377663577684...| 0.0|
| 9| 16 9| 1.0| [16, 9]|(262144,[153779,1...|[-0.0853679939336...|[0.47867095324139...| 1.0|
| 12| 6 5| 0.0| [6, 5]|(262144,[18659,89...|[0.07513008136562...|[0.51877369045183...| 0.0|
| 15| 10 17| 1.0|[10, 17]|(262144,[64358,25...|[-0.0291988646553...|[0.49270080242078...| 1.0|
| 7| 2 11| 0.0| [2, 11]|(262144,[212053,2...|[0.03678030020834...|[0.50919403860812...| 0.0|
| 15| 14 2| 1.0| [14, 2]|(262144,[109681,2...|[0.06216423725633...|[0.51553605651806...| 0.0|
| 6| 3 2| 0.0| [3, 2]|(262144,[89074,21...|[0.00565582077537...|[0.50141395142468...| 0.0|
| 20| 19 22| 0.0|[19, 22]|(262144,[139093,2...|[-0.0769288695989...|[0.48077726176073...| 1.0|
| 8| 19 11| 0.0|[19, 11]|(262144,[139093,2...|[0.04988910033929...|[0.51246968885151...| 0.0|
| 6| 15 7| 0.0| [15, 7]|(262144,[77099,20...|[0.14854929135994...|[0.53706918109610...| 0.0|
| 13| 12 5| 0.0| [12, 5]|(262144,[89689,25...|[-0.0519932532562...|[0.48700461408785...| 1.0|
| 4| 8 22| 0.0| [8, 22]|(262144,[98962,21...|[-0.0120753606650...|[0.49698119651572...| 1.0|
| 7| 17 5| 0.0| [17, 5]|(262144,[64358,89...|[-0.0721054054871...|[0.48198145477106...| 1.0|
+----------+----------+-----+--------+--------------------+--------------------+--------------------+----------+
only showing top 20 rows
Objek model
kini dapat digunakan untuk membuat prediksi. Untuk sampel lengkap aplikasi pembelajaran mesin ini, dan instruksi langkah demi langkah untuk menjalankannya, lihat Membangun aplikasi pembelajaran mesin Apache Spark di Azure HDInsight.