Pyspark – رگرسیون خطی با استفاده از آپاچی MLlib

بفرست برای دوستت
Telegram
WhatsApp
Pyspark - رگرسیون خطی با استفاده از آپاچی MLlib

فهرست مطالب

شرح مسئله:

ایجاد یک مدل پیشبینی برای یک شرکت کشتیرانی جهت تخمین تعداد خدمه مورد نیاز یک کشتی.

 

دیتاست:

دیتاست مورد نظر، شامل ۱۵۹ نمونه با ۹ ویژگی است. توضیحات دیتاست به شرح زیر است:

پای اسپارک

 

برای دانلود دیتاست روی این لینک کلیک کنید: دیتاست

 

بیایید مدل رگرسیون خطی را برای پیشبینی تعداد خدمه ایجاد کنیم.

import pyspark 
from pyspark.sql import SparkSession 
#SparkSession is now the entry point of Spark 
#SparkSession can also be construed as gateway to spark libraries 

#create instance of spark class 
spark=SparkSession.builder.appName('housing_price_model').getOrCreate() 

#create spark dataframe of input csv file 
df=spark.read.csv('D:\python coding\pyspark_tutorial\Linear regression\cruise_ship_info.csv'
				,inferSchema=True,header=True) 
df.show(10) 

 

خروجی:

+-----------+-----------+---+------------------+----------+------+------+-----------------+----+
|  Ship_name|Cruise_line|Age|           Tonnage|passengers|length|cabins|passenger_density|crew|
+-----------+-----------+---+------------------+----------+------+------+-----------------+----+
|    Journey|    Azamara|  6|30.276999999999997|      6.94|  5.94|  3.55|            42.64|3.55|
|      Quest|    Azamara|  6|30.276999999999997|      6.94|  5.94|  3.55|            42.64|3.55|
|Celebration|   Carnival| 26|            47.262|     14.86|  7.22|  7.43|             31.8| 6.7|
|   Conquest|   Carnival| 11|             110.0|     29.74|  9.53| 14.88|            36.99|19.1|
|    Destiny|   Carnival| 17|           101.353|     26.42|  8.92| 13.21|            38.36|10.0|
|    Ecstasy|   Carnival| 22|            70.367|     20.52|  8.55|  10.2|            34.29| 9.2|
|    Elation|   Carnival| 15|            70.367|     20.52|  8.55|  10.2|            34.29| 9.2|
|    Fantasy|   Carnival| 23|            70.367|     20.56|  8.55| 10.22|            34.23| 9.2|
|Fascination|   Carnival| 19|            70.367|     20.52|  8.55|  10.2|            34.29| 9.2|
|    Freedom|   Carnival|  6|110.23899999999999|      37.0|  9.51| 14.87|            29.79|11.5|
+-----------+-----------+---+------------------+----------+------+------+-----------------+----+

 

#prints structure of dataframe along with datatype 
df.printSchema() 

 

  الگوریتم مکمل بیز ساده (CNB)

 

#In our predictive model, below are the columns 
df.columns 

 

 

#columns identified as features are as below: 
#['Cruise_line','Age','Tonnage','passengers','length','cabins','passenger_density'] 
#to work on the features, spark MLlib expects every value to be in numeric form 
#feature 'Cruise_line is string datatype 
#using StringIndexer, string type will be typecast to numeric datatype 
#import library strinindexer for typecasting 

from pyspark.ml.feature import StringIndexer 
indexer=StringIndexer(inputCol='Cruise_line',outputCol='cruise_cat') 
indexed=indexer.fit(df).transform(df) 

#above code will convert string to numeric feature and create a new dataframe 
#new dataframe contains a new feature 'cruise_cat' and can be used further 
#feature cruise_cat is now vectorized and can be used to fed to model 
for item in indexed.head(5): 
	print(item) 
	print('\n') 

 

خروجی:

Row(Ship_name='Journey', Cruise_line='Azamara', Age=6, 
Tonnage=30.276999999999997, passengers=6.94, length=5.94, 
cabins=3.55, passenger_density=42.64, crew=3.55, cruise_cat=16.0)

Row(Ship_name='Quest', Cruise_line='Azamara', Age=6, 
Tonnage=30.276999999999997, passengers=6.94, length=5.94, 
cabins=3.55, passenger_density=42.64, crew=3.55, cruise_cat=16.0)

Row(Ship_name='Celebration', Cruise_line='Carnival', Age=26, 
Tonnage=47.262, passengers=14.86, length=7.22, 
cabins=7.43, passenger_density=31.8, crew=6.7, cruise_cat=1.0)

Row(Ship_name='Conquest', Cruise_line='Carnival', Age=11, 
Tonnage=110.0, passengers=29.74, length=9.53,
 cabins=14.88, passenger_density=36.99, crew=19.1, cruise_cat=1.0)

Row(Ship_name='Destiny', Cruise_line='Carnival', Age=17, 
Tonnage=101.353, passengers=26.42, length=8.92, 
cabins=13.21, passenger_density=38.36, crew=10.0, cruise_cat=1.0)

 

from pyspark.ml.linalg import Vectors 
from pyspark.ml.feature import VectorAssembler 
#creating vectors from features 
#Apache MLlib takes input if vector form 
assembler=VectorAssembler(inputCols=['Age', 
'Tonnage', 
'passengers', 
'length', 
'cabins', 
'passenger_density', 
'cruise_cat'],outputCol='features') 
output=assembler.transform(indexed) 
output.select('features','crew').show(5) 
#output as below 

 

  درک پردازش داده (Data Processing)

 

#final data consist of features and label which is crew. 
final_data=output.select('features','crew') 
#splitting data into train and test 
train_data,test_data=final_data.randomSplit([0.7,0.3]) 
train_data.describe().show() 

 

test_data.describe().show() 

 

 

#import LinearRegression library 
from pyspark.ml.regression import LinearRegression 
#creating an object of class LinearRegression 
#object takes features and label as input arguments 
ship_lr=LinearRegression(featuresCol='features',labelCol='crew') 
#pass train_data to train model 
trained_ship_model=ship_lr.fit(train_data) 
#evaluating model trained for Rsquared error 
ship_results=trained_ship_model.evaluate(train_data) 

print('Rsquared Error :',ship_results.r2) 
#R2 value shows accuracy of model is 92% 
#model accuracy is very good and can be use for predictive analysis 

 

خروجی:

Rsquared Error : 0.9279239421964878

 

#testing Model on unlabeled data 
#create unlabeled data from test_data 
#testing model on unlabeled data 
unlabeled_data=test_data.select('features') 
unlabeled_data.show(5) 

 

 

predictions=trained_ship_model.transform(unlabeled_data) 
predictions.show() 
#below are the results of output from test data 

 

 

لینک به Colab برای مشاهده کامل کد

Rating 5.00 from 2 votes

لیست دروس دوره

آموزش پیشنهادی و مکمل

اگر سوالی در مورد این درس دارید، در کادر زیر بنویسید.

اشتراک در
اطلاع از
guest
0 نظرات
قدیمی‌ترین
تازه‌ترین بیشترین رأی
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
سبد خرید

تخفیف دوره متخصص علم داده (مدت محدود)

برای دیدن نوشته هایی که دنبال آن هستید تایپ کنید.
×