日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用PySpark搭建机器学习模型

發(fā)布時間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用PySpark搭建机器学习模型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用PySpark搭建機器學(xué)習(xí)模型

文章目錄

  • 使用PySpark搭建機器學(xué)習(xí)模型
    • 前言
    • 搭建回歸模型
      • 1.加載數(shù)據(jù)集
      • 2.拆分數(shù)據(jù)集
      • 3.創(chuàng)建模型
      • 4&5 模型訓(xùn)練與預(yù)測
      • 6.模型評估
    • 繪制折線圖
    • 參考文章

前言

因為現(xiàn)階段的實驗需要用到 PySpark ,所以安裝了 PySpark 來搭建機器學(xué)習(xí)模型來進行訓(xùn)練。

還沒有配置好 PySpark 環(huán)境的,請參考這篇博客進行配置 Windows下搭建PySpark環(huán)境

實驗環(huán)境:

  • PyCharm 2019
  • Python 3.6
  • Spark 2.3.4

這是我用的是阿里天池的工業(yè)蒸汽量數(shù)據(jù)集,做的是一個回歸預(yù)測,數(shù)據(jù)集和最終的代碼我都放在了鏈接里。

鏈接:https://pan.baidu.com/s/1os9gK3T8wpDdF0sI_c31Kg
提取碼:q73f

PySpark 的機器學(xué)習(xí)的知識這里我就不介紹了,想了解的自行查看參考文章第一個。

搭建回歸模型

搭建一個簡單的機器學(xué)習(xí)模型一共是六個步驟:

  • 加載數(shù)據(jù)集
  • 拆分數(shù)據(jù)集
  • 創(chuàng)建模型
  • 訓(xùn)練模型
  • 模型預(yù)測
  • 模型評估
  • 我們按照這六個步驟一步一步搭建起機器學(xué)習(xí)模型

    1.加載數(shù)據(jù)集

    Apache Spark 2.x 引入了 SparkSession,其為用戶提供了一個統(tǒng)一的切入點來使用 Spark 的各項功能,并且允許用戶通過它調(diào)用 DataFrame 和 Dataset 相關(guān) API 來編寫 Spark 程序。

    from pyspark.sql import SparkSession # 創(chuàng)建 Spark 實例 spark = SparkSession.builder.appName('RandomForestRegressor').master('local').getOrCreate()# 1. 數(shù)據(jù)導(dǎo)入 data = spark.read.csv('zhengqi_train.csv', header=True, inferSchema=True, encoding='utf-8')

    因為我搭建的是單機版的Spark,所以 master 隨便指定就行,appName一般寫的是模型的名字。

    zhengqi_train.csv 放在代碼的同級目錄下,通過相對路徑直接可以讀取。如果你使用其他的 IDE,請記得轉(zhuǎn)換路徑。

    2.拆分數(shù)據(jù)集

    蒸汽數(shù)據(jù)集一共有38個特征屬性,分別是 V0—V37,分別對應(yīng)各個訓(xùn)練屬性,有一個 target 目標屬性,是預(yù)測值。

    拆分數(shù)據(jù)集之前,我們將所有的訓(xùn)練屬性合并為一個向量,然后再進行劃分,這樣會比較方便。

    from pyspark.ml.feature import VectorAssembler# 特征處理 df_assember = VectorAssembler(inputCols=data.columns[:-1], outputCol='features') df = df_assember.transform(data)# 劃分數(shù)據(jù)集 model_df = df.select(['features', 'target']) train_df, test_df = model_df.randomSplit([0.75, 0.25], seed=10)

    這里我們將 V0—V37合并為一個 features 向量。通過特征向量和目標屬性進行數(shù)據(jù)集的劃分,seed是隨機種子。

    3.創(chuàng)建模型

    pyspark.ml.regression.RandomForestRegressor(featuresCol=‘features’, labelCol=‘label’, predictionCol=‘prediction’, maxDepth=5, maxBins=32, minInstancesPerNode=1, minInfoGain=0.0, maxMemoryInMB=256, cacheNodeIds=False, checkpointInterval=10, impurity=‘variance’, subsamplingRate=1.0, seed=None, numTrees=20, featureSubsetStrategy=‘a(chǎn)uto’)

    from pyspark.ml.regression import RandomForestRegressor# 構(gòu)建模型 rf = RandomForestRegressor(featuresCol='features', labelCol='target')

    featuresCol指定的是訓(xùn)練屬性,我們剛才把它合并成向量的優(yōu)勢這里就體現(xiàn)出來了。labelCol指定的是目標屬性。predictionCol指定的是預(yù)測屬性,在之后的模型評估中我們會用到,如果不指定 predictionCol,之后就使用默認值“prediction”。

    這里我沒有進行參數(shù)設(shè)置,都是采用的默認參數(shù)。

    4&5 模型訓(xùn)練與預(yù)測

    # 訓(xùn)練 rf_model = rf.fit(train_df) # 預(yù)測 rf_prediction = rf_model.transform(test_df)

    fit方法用來訓(xùn)練和擬合數(shù)據(jù),transform方法是轉(zhuǎn)換為 spark的 dataframe,這里是進行模型預(yù)測。

    6.模型評估

    from pyspark.ml.evaluation import RegressionEvaluator# 創(chuàng)建評估器 evaluator = RegressionEvaluator(labelCol='target', predictionCol='prediction') # 用 MSE 和 R2 進行評估 mse = evaluator.evaluate(rf_prediction, {evaluator.metricName: 'mse'}) r2 = evaluator.evaluate(rf_prediction, {evaluator.metricName: 'r2'}) print("MSE為:", mse) print("R2得分:", r2)

    評估器的 predictionCol 要和 模型的 predictionCol 保持一致。

    這樣六個步驟下來,一個簡單的機器學(xué)習(xí)回歸模型就構(gòu)建好了。

    繪制折線圖

    模型搭建好之后,我們可以繪制一個預(yù)測值與真實值之間的折線圖來進行展示。

    import matplotlib.pyplot as plt import numpy as np# 轉(zhuǎn)換數(shù)據(jù)類型并排序 true_test = sorted(test_df.select('target').collect()) perdiction_test = sorted(rf_prediction.select('target').collect())# 使用plt繪圖 plt.figure() plt.rcParams['font.sans-serif'] = 'SimHei' plt.rcParams['axes.unicode_minus'] = False plt.rcParams['savefig.dpi'] = 1080 plt.rcParams['figure.dpi'] = 1080 plt.title('RandomForestRegressor') x_label = np.linspace(1, 2*len(true_test), len(true_test)) plt.plot(x_label, true_test) plt.plot(x_label, perdiction_test, linestyle='--') plt.legend(['真實值', '預(yù)測值']) # 保存圖片 plt.savefig('RandomForestRegressor.png') plt.show()

    在 spark 中處理的數(shù)據(jù)都是 sql.dataframe 類型的,無法直接使用 plt 進行繪圖,我們需要使用 collect 方法進行類型轉(zhuǎn)換。

    參考文章

    pySpark 機器學(xué)習(xí)庫ml入門

    使用pyspark.ml.regression模塊預(yù)測波士頓房價

    pyspark與機器學(xué)習(xí)

    總結(jié)

    以上是生活随笔為你收集整理的使用PySpark搭建机器学习模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。