ホームページ  >  記事  >  テクノロジー周辺機器  >  PySpark ML を使用して機械学習モデルを構築する

PySpark ML を使用して機械学習モデルを構築する

PHPz
PHPz転載
2023-04-09 13:51:08948ブラウズ

Spark は、対話型クエリ、機械学習、およびリアルタイム ワークロード用に設計されたオープン ソース フレームワークであり、PySpark は Spark を使用する Python 用のライブラリです。

PySpark は、探索的データ分析を大規模に実行し、機械学習パイプラインを構築し、データ プラットフォーム用の ETL を作成するための優れた言語です。すでに Python や Pandas などのライブラリに精通している場合、PySpark は学習し、よりスケーラブルな分析やパイプラインを作成するのに最適な言語です。

この記事の目的は、PySpark を使用して機械学習モデルを構築する方法を示すことです。

Conda は Python 仮想環境を作成します

Conda は、Python や conda 自体も含め、ほとんどすべてのツールとサードパーティのパッケージをパッケージとして管理します。 Anaconda はパッケージ化されたコレクションであり、conda、特定のバージョンの Python、さまざまなパッケージなどがプリインストールされています。

1. Anaconda をインストールします。

コマンド ラインを開いて conda -V と入力し、インストールされているかどうかと現在の conda バージョンを確認します。

Anaconda を介して Python のデフォルト バージョンをインストールします。3.6 は Anaconda3 ~ 5.2 に対応し、5.3 以降は Python 3.7 です。

(https://repo.anaconda.com/archive/)

2. 一般的に使用される conda コマンド

1) どのパッケージがインストールされているかを確認する

conda list

2) 現在存在する仮想環境を確認します

conda env list <br>conda info -e

3) 現在の conda を確認して更新します

conda update conda

3. Python は仮想環境を作成します

conda create -n your_env_name python=x.x

anaconda コマンドはx.x の Python バージョン、 your_env_name という名前の仮想環境。 your_env_name ファイルは、Anaconda インストール ディレクトリの envs ファイルの下にあります。

4. 仮想環境のアクティブ化または切り替え

コマンド ラインを開いて python --version と入力し、現在の Python バージョンを確認します。

Linux:source activate your_env_nam<br>Windows: activate your_env_name

5. 仮想環境に追加のパッケージをインストールします

conda install -n your_env_name [package]

6. 仮想環境を閉じます

(つまり、現在の環境を終了し、デフォルトの Python バージョンの使用に戻ります) PATH環境内)

deactivate env_name<br># 或者`activate root`切回root环境<br>Linux下:source deactivate

7.仮想環境の削除

conda remove -n your_env_name --all

8.環境クロックのパッケージ削除

conda remove --name $your_env_name$package_name

9.国内ミラーの設定

http:/ /Anaconda.org のサーバーは海外にあるため、複数のパッケージをインストールすると、conda のダウンロード速度が非常に遅くなることがよくあります。 Tsinghua TUNA ミラー ソースには Anaconda ウェアハウスのミラーがあり、それを conda 構成に追加するだけです:

# 添加Anaconda的TUNA镜像<br>conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/<br><br># 设置搜索时显示通道地址<br>conda config --set show_channel_urls yes

10. デフォルトのミラーを復元します

conda config --remove-key channels

PySpark のインストール

PySpark のインストールプロセス 他の Python パッケージ (Pandas、Numpy、scikit-learn など) と同じくらい単純です。

重要なことの 1 つは、まず Java がマシンにインストールされていることを確認することです。その後、jupyter ノートブックで PySpark を実行できます。

PySpark ML を使用して機械学習モデルを構築する

データの探索

国立糖尿病・消化器・腎臓病研究所の糖尿病データセットを使用します。分類の目標は、患者が糖尿病であるかどうか (はい/いいえ) を予測することです。

from pyspark.sql import SparkSession<br>spark = SparkSession.builder.appName('ml-diabetes').getOrCreate()<br>df = spark.read.csv('diabetes.csv', header = True, inferSchema = True)<br>df.printSchema()

データセットは、いくつかの医療予測変数とターゲット変数「結果」で構成されます。予測変数には、患者の妊娠数、BMI、インスリンレベル、年齢などが含まれます。

  • 妊娠: 妊娠数
  • グルコース: 2 時間以内の経口ブドウ糖負荷試験中の血糖濃度
  • 血圧: 拡張期血圧 (mm Hg)
  • SkinThickness: 上腕三頭筋の皮膚のひだの厚さ (mm)
  • インスリン: 2 時間血清インスリン (μ U/ml)
  • BMI: BMI: BMI (体重単位 kg/(身長)単位 m) )²)
  • diabespedigreefunction: 糖尿病血統関数
  • Age: 年齢 (年)
  • 結果: クラス変数 (0 または 1)
  • 入力変数: グルコース、血圧、BMI、年齢、妊娠、インスリン、皮膚の厚さ、糖尿病スペクトラム関数。
  • 出力変数: 結果。

最初の 5 つの観察を見てください。 Pandas データフレームは、Spark DataFrame.show() よりも優れています。

import pandas as pd<br>pd.DataFrame(df.take(5), <br> columns=df.columns).transpose()

PySpark では、Pandas の DataFrame toPandas() を使用してデータを表示できます。

df.toPandas()

PySpark ML を使用して機械学習モデルを構築する

クラスのバランスが完全に取れていることを確認してください。

df.groupby('Outcome').count().toPandas()

PySpark ML を使用して機械学習モデルを構築する

記述統計

numeric_features = [t[0] for t in df.dtypes if t[1] == 'int']<br>df.select(numeric_features)<br>.describe()<br>.toPandas()<br>.transpose()

独立変数間の相関関係

from pandas.plotting import scatter_matrix<br>numeric_data = df.select(numeric_features).toPandas()<br><br>axs = scatter_matrix(numeric_data, figsize=(8, 8));<br><br># Rotate axis labels and remove axis ticks<br>n = len(numeric_data.columns)<br>for i in range(n):<br>v = axs[i, 0]<br>v.yaxis.label.set_rotation(0)<br>v.yaxis.label.set_ha('right')<br>v.set_yticks(())<br>h = axs[n-1, i]<br>h.xaxis.label.set_rotation(90)<br>h.set_xticks(())

PySpark ML を使用して機械学習モデルを構築する

データ準備と特徴エンジニアリング

このパートでは、不要な列を削除し、欠落している値を埋めます。最後に、機械学習モデルの特徴が選択されます。これらの機能は、トレーニングとテストの 2 つの部分に分かれています。

欠損データの処理

from pyspark.sql.functions import isnull, when, count, col<br>df.select([count(when(isnull(c), c)).alias(c)<br> for c in df.columns]).show()

このデータ セットは優れており、欠損値はありません。

PySpark ML を使用して機械学習モデルを構築する

不必要的列丢弃

dataset = dataset.drop('SkinThickness')<br>dataset = dataset.drop('Insulin')<br>dataset = dataset.drop('DiabetesPedigreeFunction')<br>dataset = dataset.drop('Pregnancies')<br><br>dataset.show()

PySpark ML を使用して機械学習モデルを構築する

特征转换为向量

VectorAssembler —— 将多列合并为向量列的特征转换器。

# 用VectorAssembler合并所有特性<br>required_features = ['Glucose',<br>'BloodPressure',<br>'BMI',<br>'Age']<br><br>from pyspark.ml.feature import VectorAssembler<br><br>assembler = VectorAssembler(<br>inputCols=required_features, <br>outputCol='features')<br><br>transformed_data = assembler.transform(dataset)<br>transformed_data.show()

现在特征转换为向量已完成。

训练和测试拆分

将数据随机分成训练集和测试集,并设置可重复性的种子。

(training_data, test_data) = transformed_data.randomSplit([0.8,0.2], seed =2020)<br>print("训练数据集总数: " + str(training_data.count()))<br>print("测试数据集总数: " + str(test_data.count()))
训练数据集总数:620<br>测试数据集数量:148

机器学习模型构建

随机森林分类器

随机森林是一种监督学习算法,用于分类和回归。但是,它主要用于分类问题。众所周知,森林是由树木组成的,树木越多,森林越茂盛。类似地,随机森林算法在数据样本上创建决策树,然后从每个样本中获取预测,最后通过投票选择最佳解决方案。这是一种比单个决策树更好的集成方法,因为它通过对结果进行平均来减少过拟合。

from pyspark.ml.classification import RandomForestClassifier<br><br>rf = RandomForestClassifier(labelCol='Outcome', <br>featuresCol='features',<br>maxDepth=5)<br>model = rf.fit(training_data)<br>rf_predictions = model.transform(test_data)

评估随机森林分类器模型

from pyspark.ml.evaluation import MulticlassClassificationEvaluator<br><br>multi_evaluator = MulticlassClassificationEvaluator(<br>labelCol = 'Outcome', metricName = 'accuracy')<br>print('Random Forest classifier Accuracy:', multi_evaluator.evaluate(rf_predictions))
Random Forest classifier Accuracy:0.79452

决策树分类器

决策树被广泛使用,因为它们易于解释、处理分类特征、扩展到多类分类设置、不需要特征缩放,并且能够捕获非线性和特征交互。

from pyspark.ml.classification import DecisionTreeClassifier<br><br>dt = DecisionTreeClassifier(featuresCol = 'features',<br>labelCol = 'Outcome',<br>maxDepth = 3)<br>dtModel = dt.fit(training_data)<br>dt_predictions = dtModel.transform(test_data)<br>dt_predictions.select('Glucose', 'BloodPressure', <br>'BMI', 'Age', 'Outcome').show(10)

评估决策树模型

from pyspark.ml.evaluation import MulticlassClassificationEvaluator<br><br>multi_evaluator = MulticlassClassificationEvaluator(<br>labelCol = 'Outcome', <br>metricName = 'accuracy')<br>print('Decision Tree Accuracy:', <br>multi_evaluator.evaluate(dt_predictions))
Decision Tree Accuracy: 0.78767

逻辑回归模型

逻辑回归是在因变量是二分(二元)时进行的适当回归分析。与所有回归分析一样,逻辑回归是一种预测分析。逻辑回归用于描述数据并解释一个因二元变量与一个或多个名义、序数、区间或比率水平自变量之间的关系。当因变量(目标)是分类时,使用逻辑回归。

from pyspark.ml.classification import LogisticRegression<br><br>lr = LogisticRegression(featuresCol = 'features', <br>labelCol = 'Outcome', <br>maxIter=10)<br>lrModel = lr.fit(training_data)<br>lr_predictions = lrModel.transform(test_data)

评估我们的逻辑回归模型。

from pyspark.ml.evaluation import MulticlassClassificationEvaluator<br><br>multi_evaluator = MulticlassClassificationEvaluator(<br>labelCol = 'Outcome',<br>metricName = 'accuracy')<br>print('Logistic Regression Accuracy:', <br>multi_evaluator.evaluate(lr_predictions))
Logistic Regression Accuracy:0.78767

梯度提升树分类器模型

梯度提升是一种用于回归和分类问题的机器学习技术,它以弱预测模型(通常是决策树)的集合形式生成预测模型。

from pyspark.ml.classification import GBTClassifier<br>gb = GBTClassifier(<br>labelCol = 'Outcome', <br>featuresCol = 'features')<br>gbModel = gb.fit(training_data)<br>gb_predictions = gbModel.transform(test_data)

评估我们的梯度提升树分类器。

from pyspark.ml.evaluation import MulticlassClassificationEvaluator<br>multi_evaluator = MulticlassClassificationEvaluator(<br>labelCol = 'Outcome',<br>metricName = 'accuracy')<br>print('Gradient-boosted Trees Accuracy:',<br>multi_evaluator.evaluate(gb_predictions))
Gradient-boosted Trees Accuracy:0.80137

结论

PySpark 是一种非常适合数据科学家学习的语言,因为它支持可扩展的分析和 ML 管道。如果您已经熟悉 Python 和 Pandas,那么您的大部分知识都可以应用于 Spark。总而言之,我们已经学习了如何使用 PySpark 构建机器学习应用程序。我们尝试了三种算法,梯度提升在我们的数据集上表现最好。

以上がPySpark ML を使用して機械学習モデルを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。