رگرسیون در Data bricks

در نوشته قبلی Data bricks را معرفی کردیم. حال در این قسمت میخواهیم یک مسئله رگرسیون را در آن حل کنیم.

دیتای این مسئله از این لینک در دسترس است. دیتا مربوط به نفراتی است که در رستوران بوده اند .

  • ستون اول مقدار هزینه خوارک آنان بوده است.
  • ستون دوم tip یعنی مقدار انعامی که داده اند.
  • ستون سوم جنسیت.
  • چهارم سیگاری بوده اند یا نه
  • روز بوده یا شب
  • تعداد نفرات

از مسیر زیر میتوان به دیتاست هایی که قبلا بارگذاری کرده ایم دسترسی داشته باشیم:

قدم اول- ایجادCluster

از روش گفته شده در آموزش قبلی آن را ایجاد میکنیم و نام آن را دلخواه و مثلا linear_regression میگذاریم.

برای استفاده از کتابخانه هایی مثل seaborn , keras, tensorflow از tab مربوط به کتابخانه استفاده میکنیم.

سپس به صفحه home میرویم و یک notebook جدید میسازیم:

کدهای زیر را وارد کرده و دیتا را نمایش میدهیم:

به دو روش میشود. 1- انتخاب گزینه سمت راست (create table in notebook) یا گزینه سمت چپ (creat table with UI)

# File location and type
file_location = "/FileStore/tables/tips.csv"
file_type = "csv"

df=spark.read.csv(file_location,header=True,inferSchema=True)
df.show()

اگر همه چیز درست پیش رفته باشد، نتیجه زیر نمایش داده میشود:

تا دقیقه 5:10

میخواهیم totall_bill را پیش بینی کنیم

با دستورزیر ستون ها را میبینیم و سپس سعس میکنیم داده های غیر عددی را به عددی تبدیل کنیم:

تبدیل categorical به numerical

تا دقیقه 9:50

با کد زیر داده categorical جنسیت را به حالت عددی در میاوریم

indexer=StringIndexer(inputCol='sex',outputCol='Sex_indexed')
df_r=indexer.fit(df).transform(df)
df_r.show()

نتیجه:

مشخص است که پارامتر جنسیت به حالت صفر و یک درآمده است:

در دستور بعدی سه ستون را یکباره به Numerical تبدیل میکنیم:

indexer=StringIndexer(inputCols=['smoker','day','time'],outputCols=['smoker_indexed','day_indexed','time_indexed'])
df_r=indexer.fit(df).transform(df)
df_r.show()

نتیجه:

vector assembler

میخواهیم فیچرهای xi را در یک ستون قرار دهیم و خروجی را در یک ستون دیگر . کلا دو ستون میخواهیم داشته باشیم.

from pyspark.ml.feature import VectorAssembler
featureassembler=VectorAssembler(inputCols=
                ['tip','size','sex_indexed',
                 'smoker_indexed','day_indexed','time_indexed',
                outputCol='Independent Features'])

حال با دستور زیر تنها دو ستون را انتخاب میکنیم:

finalized_data=output.select('Independent_Features','total_bill')
finalized_data.show()

اجرای رگرسیون خطی

در کد زیر:

  • خط اول: کتابخانه مورد نظر را ایمپورت میکنیم
  • ترین و تست را جدا میکنیم. با نسبت 75 و 25
  • خط سوم: تعیین میکنیم که فیچر مستقل و فیچر وابسته کدام باشند
  • خط چهارم: دیتا را آموزش میدهیم.
from pyspark.ml.regression import LinearRegression
##train test split
train_data,test_data=finalized_data.randomSplit([0.75,0.25])
regressor=LinearRegression(featuresCol='Independent_Features', labelCol='total_bill')
regressor=regressor.fit(train_data)

udt به معنای user defined type است.

با دستور زیر ضرایب رگرسیون را بدست می آوریم:

regressor.coefficients

همچنین با دستور زیر مقدارintercept را بر میگردانیم.

regressor.intercept

و با کد زیر میتوان انواع خطاها را بدست آورد:

pred_result.r2,pred_result.meanAbsoluteError,pred_result.meanSquaredError

نکته: با فشردن کلید tab انواع متودها برای ما نمایش داده میشود.

و با دستور زیر میتوان فایل خود را ذخیره کنیم:

save_location="/FileStore/tables/tips_predictions.csv"

regressor.save(path=save_location)

منابع:

1- ویدئو کریش

منتشر شده در
دسته‌بندی شده در spark

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد.