Spark 是一種專門用於互動式查詢、機器學習和即時工作負載的開源框架,而 PySpark 是 Python 使用 Spark 的函式庫。
PySpark 是一種用於大規模執行探索性資料分析、建立機器學習管道以及為資料平台創建 ETL 的出色語言。如果你已經熟悉 Python 和 Pandas 等函式庫,那麼 PySpark 是一種很好的學習語言,可以創造更具可擴展性的分析和管道。
這篇文章的目的是展示如何使用 PySpark 建立機器學習模型。
Conda 創建 python 虛擬環境
conda將幾乎所有的工具、第三方套件都當作package進行管理,甚至包括python 和conda本身。 Anaconda是一個打包的集合,裡面預先安裝了conda、某個版本的python、各種packages等。
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指令建立python版本為x.x ,名字為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.關閉虛擬環境
(即從目前環境退出返回使用PATH環境中的預設python版本)
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 的伺服器在國外,安裝多個packages時,conda下載的速度經常很慢。清華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)。
一件重要的事情是,首先確保你的機器上已經安裝了java。然後你可以在你的 jupyter notebook 上執行 PySpark。
探索資料
我們使用糖尿病資料集,它與美國國家糖尿病、消化和腎臟疾病研究所的糖尿病疾病有關。分類目標是預測患者是否患有糖尿病(是/否)。
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()
資料集由幾個醫學預測變數和一個目標變數 Outcome 組成。預測變數包括患者的懷孕次數、BMI、胰島素水平、年齡等。
- Pregnancies:懷孕次數
- Glucose:2小時內口服葡萄糖耐受試驗的血糖濃度
- BloodPressure:舒張壓(mm Hg)
- SkinThickness:三頭肌皮膚皺褶厚度(mm)
- Insulin:2小時血清胰島素(mu U/ml)
- BMI:身體質量指數(體重單位kg/(身高單位m )²)
- diabespedigreefunction:糖尿病譜系功能
- Age:年齡(年)
- Outcome:類別變數(0或1)
- #輸入變數:葡萄糖、血壓、BMI、年齡、懷孕、胰島素、皮膚厚度、糖尿病譜系函數。
- 輸出變數: 結果。
看看前五個觀察結果。 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()
檢查類別是完全平衡的!
df.groupby('Outcome').count().toPandas()
描述性統計
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(())
數據準備和特徵工程
在這一部分中,我們將刪除不必要的列並填入缺失值。最後,為機器學習模型選擇特徵。這些功能將分為訓練和測試兩部分。
缺失資料處理
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()
這個資料集很棒,沒有任何缺失值。
不必要的列丢弃
dataset = dataset.drop('SkinThickness')<br>dataset = dataset.drop('Insulin')<br>dataset = dataset.drop('DiabetesPedigreeFunction')<br>dataset = dataset.drop('Pregnancies')<br><br>dataset.show()
特征转换为向量
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中文網其他相關文章!

軟AI(被定義為AI系統,旨在使用近似推理,模式識別和靈活的決策執行特定的狹窄任務 - 試圖通過擁抱歧義來模仿類似人類的思維。 但是這對業務意味著什麼

答案很明確 - 只是雲計算需要向雲本地安全工具轉變,AI需要專門為AI獨特需求而設計的新型安全解決方案。 雲計算和安全課程的興起 在

企業家,並使用AI和Generative AI來改善其業務。同時,重要的是要記住生成的AI,就像所有技術一樣,都是一個放大器 - 使得偉大和平庸,更糟。嚴格的2024研究O

解鎖嵌入模型的力量:深入研究安德魯·NG的新課程 想像一個未來,機器可以完全準確地理解和回答您的問題。 這不是科幻小說;多虧了AI的進步,它已成為R

大型語言模型(LLM)和不可避免的幻覺問題 您可能使用了諸如Chatgpt,Claude和Gemini之類的AI模型。 這些都是大型語言模型(LLM)的示例,在大規模文本數據集上訓練的功能強大的AI系統

最近的研究表明,根據行業和搜索類型,AI概述可能導致有機交通下降15-64%。這種根本性的變化導致營銷人員重新考慮其在數字可見性方面的整個策略。 新的

埃隆大學(Elon University)想像的數字未來中心的最新報告對近300名全球技術專家進行了調查。由此產生的報告“ 2035年成為人類”,得出的結論是,大多數人擔心AI系統加深的採用


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具