خانه > مقالات آموزشی > یادگیری TensorFlow به روشی ساده (بخش چهارم)

یادگیری TensorFlow به روشی ساده (بخش چهارم)

این مقاله قسمت چهارم از سری مقاله های آموزش TensorFlow به روشی ساده است که در این قسمت به بررسی یک مثال کاربردی در تنسور فلو با عنوان “اجرای یک مثال از طبقه بندی در Tensorflow” خواهیم پرداخت.

طبقه بندی در تنسور فلو
مثالی از طبقه بندی داده ها در تنسور فلو

 حل مشکلات و مسائل مربوط به طبقه بندی اطلاعات با استفاده از تکنیک های یادگیری ماشین و یادگیری عمیق، بسیار هیجان انگیز می باشند. موارد مختلفی از استفاده مشاغل از الگوریتم های طبقه بندی وجود دارد – از تکنیک پیش بینی کروی (churn prediction)  گرفته تاتشخیص متن های اسپم و هرزنامه.

در این بخش، ما یک مثال طبقه بندی از نوع خطی در Tensorflow را کدنویسی می کنیم، پیش بینی های خود را تجزیه و تحلیل کرده و آن ها را تأیید می کنیم که مدل ما نسبت به داده هایی که هنوز به وجود نیامده اند چقدر دقیق عمل می کند. تمام عملگر ها و توابع   tensorflow که در قسمت های قبل به آن ها پرداخته شده اند در این قسمت اشاره ای به آن ها نخواهد شد. اگر با مفاهیم و متغیرهای موجود در tensorflow آشنایی ندارید میتوانید به قسمت های قبلی این مجموعه از مقالات آموزشی مراجعه کنید.

عنوان مسئله:

با توجه به ویژگی های مختلف یک فرد، پیش بینی اینکه به کدام طبقه درآمدی تعلق خواهد داشت، بالای ۵۰ هزار دلار یا زیر ۵۰ هزا دلار، مسئله ای هست که به دنبال حل آن هستیم .

در زیر مروری بر ستون های داده های این مسئله شده است

داده اولیه
داده های اولیه طبقه بندی

ابتدا کارمان را بارگیری مجموعه داده های خود با استفاده از دستور pandas آغاز میکنیم.

import pandas as pd
import tensorflow as tf

مجموعه داده ی بارگیری شده از دانشگاه UCI معمولاً فرمت استاندارد csv را ندارد. بنابراین، اجازه دهید نام ستون ها را از اطلاعات ارائه شده در صفحه داده تغییر دهیم.

 

census = pd.read_csv("adult.csv", header=None)
census.columns = ['age', 'workclass','fnlwgt', 'education', 'education_num', 'marital_status',
'occupation', 'relationship', 'race', 'gender', 'capital_gain',
'capital_loss', 'hours_per_week', 'native_country', 'income_bracket']

برای دیدن نام dataframe جدول، هدر را بررسی کنید.

داده های طبقه بندی 2
داده های طبقخ بندی

متغیر هدف ما در این مورد یک رشته است. برای مثال۵۰K>, <=50K

متأسفانه ، TensorFlow نمی تواند رشته ها را به عنوان برچسب بشناسد، برای استفاده از یک تابع معمول که آنها را به ۰ و ۱ تبدیل می کند ، باید از دستور pandas استفاده کنیم.

def label_fix(label):
if label==' <=50K':
return 0
else:
return 1
census['income_bracket'] = census['income_bracket'].apply(label_fix)
census['income_bracket'].unique()
کد تنسور فلو
کد تنسور فلو

خروجی باید ۰ یا ۱ باشد. اکنون ، ما قرار است جریان tensorflow را با کدگذاری داده های خود به مجموعه های train و test  کد گزاری کنیم.

from sklearn.model_selection import train_test_splitx_data = 

census.drop('income_bracket',axis=1)

y_labels = census['income_bracket']
X_train, X_test, y_train, y_test =

train_test_split(x_data,y_labels,test_size=0.3,random_state=101)

اگر مقاله های قسمت های قبلی را دنبال کرده باشید، باید توجه داشته باشید که قبلاً از هیچ نوع رشته ای به عنوان ویژگی  (feature)استفاده نکرده ایم. به نظر شما چگونه می توانیم ویژگیهای مرتبط با طبقه بندی را به یک مدل tensorflow منتقل کنیم؟ در واقع برای این کار دو روش وجود دارد.

۱-لیست واژگان (Vocabulary List)

۲-سطل هش (Hash Bucket)

لیست واژگان

در روش لیست واژگان ، باید نام ستون و تمام برچسب های منحصر به فرد موجود برای آن ستون را منتقل کنیم. این کار برای رمزگذاری ستون ها با ۲ تا ۴ مقدار منحصر به فرد امکان پذیر است.

Hash Bucket

در این روش هش تمام مقادیر منحصر به فرد با برچسب ها محاسبه و جایگزین می شود. داشتن ستونهای بزرگ که در آن نمی توانید لیستی از تمام متغیر های منحصر به فرد را منتقل کنید برای شما راحت تر است.

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

gender = tf.feature_column.categorical_column_with_vocabulary_list("gender", ["Female", "Male"])

و برای ستونهای اصلی از Hsh Bucket استفاده کنیم.

occupation = tf.feature_column.categorical_column_with_hash_bucket("occupation", hash_bucket_size=1000)
marital_status = tf.feature_column.categorical_column_with_hash_bucket("marital_status", hash_bucket_size=1000)
relationship = tf.feature_column.categorical_column_with_hash_bucket("relationship", hash_bucket_size=1000)
education = tf.feature_column.categorical_column_with_hash_bucket("education", hash_bucket_size=1000)
workclass = tf.feature_column.categorical_column_with_hash_bucket("workclass", hash_bucket_size=1000)
native_country = tf.feature_column.categorical_column_with_hash_bucket("native_country", hash_bucket_size=1000)

ستونهای عددی پیوسته، آسان و شبیه موارد فوق هستند.

tf.feature_columns.numeric_column

age = tf.feature_column.numeric_column("age")
education_num = tf.feature_column.numeric_column("education_num")
capital_gain = tf.feature_column.numeric_column("capital_gain")
capital_loss = tf.feature_column.numeric_column("capital_loss")
hours_per_week = tf.feature_column.numeric_column("hours_per_week")

کار ما در این جا تقریبا تمام است. اکنون ، فقط با استفاده از خط کد زیر، تمام این ویژگی ها را در یک لیست اشیاء قرار دهید

feat_cols = [gender,occupation,marital_status,relationship,education,workclass,native_country, age,education_num,capital_gain,capital_loss,hours_per_week]input_func=tf.estimator.inputs.pandas_input_fn(x=X_train,y=y_train,batch_size=100,num_epochs=None,shuffle=True)

اکنون که با تقسیم داده ها و همچنین ویژگی هایی که برای استفاده از آن مورد نیاز است آشنا شده ایم، باید مدل را طراحی کنیم.

input_func=tf.estimator.inputs.pandas_input_fn(x=X_train,y=y_train,batch_size=100,num_epochs=None,shuffle=True)model = tf.estimator.LinearClassifier(feature_columns=feat_cols)
model.train(input_fn=input_func,steps=5000)

در یک طراحی موفق شما باید برای هر مرحله / دوره زمان از دست رفته و امتیاز بدست آمده برای هر مرحله/گام را بدست آورید

طراحی مدل
طراحی مدل

بگذارید دستور pred_fn را اجرا کنیم که مجموعه داده های آزمون ما را برای ایجاد پیش بینی ها با استفاده از دستور shuffle=False ظبط میکند.

نکته مهم: در حین طراحی مدل ، استفاده از دستور shuffle = True بر عهده شماست. معمولاً خوب است که مدل ها را با استفاده از دستور shuffle طراحی کنید. اما ، در حالی که پیش بینی های خود را انجام می دهید اطمینان حاصل کنید که دستور shuffle=False را اجرا کرده اید. چرا که هرگز نمی توانید نتایج خود را اعتبار یا اندازه گیری کنید.

 
pred_fn = tf.estimator.inputs.pandas_input_fn(x=X_test,batch_size=len(X_test),shuffle=False)predictions = list(model.predict(input_fn=pred_fn))
final_preds = []
for pred in predictions:
final_preds.append(pred['class_ids'][0])

پیش بینی ها آماده است. قدم بعدی این است که ببینیم مدل Tensorflow ما چگونه عمل کرده است.

from sklearn.metrics import classification_report
print(classification_report(y_test,final_preds))
نتایج مدل
نتایج مدل

همان طور که میبینید یک امتیاز عالی برای مدل بدست آمد. حال ، اجازه دهید نگاهی به متریک AUC برای مدل خود بیندازیم.

from sklearn.metrics import roc_curve, auc
fpr, tpr, thresholds = roc_curve(y_test,final_preds)
roc_auc = auc(fpr, tpr)
print("ROC AUC Score: {}".format(roc_auc))
plt.figure()
plt.plot(fpr, tpr, color='green', lw=1, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right")
plt.show()
نتیجه مدل 2
نتیجه مدل

مدل ما نمره AUC قابل قبول ۰٫۷۳۸ را کسب کرد. برای بهینه سازی امتیاز، می توانیم طول انجام دوره را افزایش دهیم یا مهندسی ویژگی ها را به صورت زیر انجام دهیم.

۱-دسته ها را با استفاده از ستون سن ایجاد کنید

۲-ساعات متوسط برای شغل را محاسبه کنید

۳-متوسط افزایش سرمایه برای آموزش و غیره

بقیه کار را به شما واگذار می کنیم. مجموعه آموزشی مقالات ما برای یادگیری تنسور فلو در این جا پایان می یابد.

بیشتر بخوانید:

منبع medium.com
0/5 ( 0 نظر )

درباره‌ی علی قلی زاده

همچنین ببینید

مصاحبه با آزالیا میرحسینی یادگیری تقویتی عمیق

دانشمند ایرانی گوگل به هوش مصنوعی می‌آموزد که هوش مصنوعی بهتری ایجاد کند

سایت Towards Data Science با نظریه پرداز هوش مصنوعی بر روی تحقیقات مهم او در …

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *