امیرعباس
امیرعباس
خواندن ۵ دقیقه·۵ سال پیش

تنسورفلو ۷ : بررسی داده ها

در این قسمت قراره درباره آماده سازی دیتا صحبت کنیم

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

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

انتخاب ویژگی های درست در موفقیت مدل موثر هست

راه دیگه برای بهبود مدل یافتن همبستگی بین متغیر های مستقل هست. مثلا تخمین درآمد افراد به متغیر های میزان تحصیلات و وضع اشتغال وابسته هست، در حالی که وضع اشتغال به میزان تحصیلات هم میتونه وابسته باشه. این وابستگی رو تحت عنوان interaction یا اثر متقابل می شناسیم

اثر متقابل تحصیلات و موقعیت شغلی
اثر متقابل تحصیلات و موقعیت شغلی

در این قسمت قراره بررسی کنیم که با استفاده از اثر متقابل متغییرها میشه تخمین رو بهتر کرد یا نه

خلاصه آمار

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

ابتدا به وسیله pandas دیتاست برای مجموعه های آموزش و ارزیابی وارد کنید.

به لایبرری های matplotlib و seaborn نیاز داریم.
! pip install seaborn

برای رسم گراف: Matplotlib

برای تجسم آماری: Seaborn

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

import pandas as pd from sklearn import datasets import tensorflow as tf from sklearn.datasets import load_boston import numpy as np

کتابخانه sklearn دیتاست بوستون رو داره و می تونید از طریق زیر بهش دسترسی داشته باشید:

boston = load_boston() df = pd.DataFrame(boston.data)

برای مشاهده نام ویژگی ها:

boston.feature_names

برای تغییر نام ویژگی ها:

df.columns = boston.feature_names df['PRICE'] = boston.target df.head(2)

شما می تونید متغیر CHAS به متن تبدیل کنید وقتی که ۱ هست yes و وقتی که ۰ هست no :

df['CHAS'] = df['CHAS'].map({1:'yes', 0:'no'}) df['CHAS'].head(2)

و برای تقسیم دیتاست به مجموعه های آموزش و ارزیابی به این صورت که ۸۰٪ در مجموعه آموزش و مابقی در مجموعه تعلیم باشند:

df_train=df.sample(frac=0.8,random_state=200) df_test=df.drop(df_train.index) print(df_train.shape, df_test.shape)


df_test.head(5)

خب در اصل دیتا تمیز نیست و برای تمیز کردن باید اول بفهمیم چی نیاز به تمیز کردن داره. این کار یک مقدار نیاز به مهارت داره مخصوصا برای اینکه قابل تعمیم باشه.

محققین گوگل یک ابزاری توسعه دادن به اسم Facets که کمک می کنه داده ها رو مجسم کنید و به ترتیب های مختلف تقسیم بندی کنید. این نقطه خوبی برای شروع بررسی داده هاست.Facets به شما اجازه می ده ببینید کجا اطلاعات به شیوه ای که شما فکر می کنید نیست.




Facets Overview

یک بررسی اجمالی از مجموعه داده رو انجام میده. به این صورت که اطلاعات زیر هر ستون رو نمایش میده:

  1. درصد اطلاعات گم شده
  2. کمینه و بیشینه
  3. آمار هایی از قبیل میانه، میانگین، انحراف معیار
  4. تعداد اطلاعات صفر
  5. مشاهده نحوه توزیع اطلاعات در داده های آموزش و ارزیابی

Facets Deep Dive

این ابزار کمک می کنه وضوح بیشتری بر روی اطلاعات دیتاست داشته باشید. همچنین می تونید برای هر ستون و سطر ویژگی های دیتاست رو مشاهده کنید.




نصب Facet

ابتدا خط زیر رو وارد ترمینال کنید

pip install jupyter_contrib_nbextensions

سپس پروژه رو کلون کنید

git clone https://github.com/PAIR-code/facets

سپس نصبش کنید

jupyter nbextension install facets-dist/


Overview

import sys sys.path.append('~/facets/facets_overview/python') from generic_feature_statistics_generator import GenericFeatureStatisticsGenerator


import base64 gfsg = GenericFeatureStatisticsGenerator() proto = gfsg.ProtoFromDataFrames([{'name': 'train', 'table': df_train}, {'name': 'test', 'table': df_test}]) protostr = base64.b64encode(proto.SerializeToString()).decode("utf-8")


from IPython.core.display import display, HTML
HTML_TEMPLATE = """<link rel="import" href="/nbextensions/facets-dist/facets-jupyter.html" >
<facets-overview id="elem"></facets-overview>
document.querySelector("#elem").protoInput = "{protostr}";
"""
html = HTML_TEMPLATE.format(protostr=protostr)
display(HTML(html))

Graph

پس از بررسی داده ها و توزیعشون می تونید یک ماتریس کوواریانست رسم کنید که ضریب پیئرسون رو حساب می کنه.این ضریب یک عدد بین -۱ و ۱ هست که مثبت بودن به معنی همبستگی مثبت هست و بالعکس.

این کار برای پیدا کردن وابستگی بین متغیر ها هست.

%matplotlib inline import matplotlib.pyplot as plt import seaborn as sns sns.set(style="ticks") # Compute the correlation matrix corr = df.corr('pearson') # Generate a mask for the upper triangle mask = np.zeros_like(corr, dtype=np.bool) mask[np.triu_indices_from(mask)] = True # Set up the matplotlib figure f, ax = plt.subplots(figsize=(11, 9)) # Generate a custom diverging colormap cmap = sns.diverging_palette(220, 10, as_cmap=True) # Draw the heatmap with the mask and correct aspect ratio sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,annot=True, square=True, linewidths=.5, cbar_kws={"shrink": .5})

از ماتریس مشاهده میشه که متغیر های LSTAT و RM بیشترین همبستگی را با قیمت دارند یا مثلا NOX و INDUS همبستگی مثبت قویی با همدیگه دارند برای همین مثلا مناسب هستند برای متغیر های وابسته


یک نوع دیگه هم Pair grid هست .

attributes = ["PRICE", "INDUS", "NOX", "RM", "LSTAT"] g = sns.PairGrid(df[attributes]) g = g.map_upper(sns.regplot, color="g") g = g.map_lower(sns.kdeplot,cmap="Reds", shade=True, shade_lowest=False) g = g.map_diag(sns.kdeplot)

خروجی

از قسمت سبز متوجه میشیم که :

  • قیمت با INDUS NOX LSTAT همبستگی منفی داره و با RM همبستگی مثبت.
  • قیمت و LSTAT ارتباط خطی ندارند.
  • وقتی قیمت ۵۰ هست یک خط صاف مشاهده میشه که طبق توضیحات دیتاست قیمت truncate شده هست.

قطر نمودار:

  • به نظر می رسد NOX دو خوشه داره یکی حدود ۰.۵ یکی حدود ۰.۸۵

از قسمت پایین هم تراکم برداشت میشه. برای مثال وقتی منطقه صنعتی تر میشه غلظت اکسید نیتریک بیشتر از ۰.۶ میشه

برای بررسی اینکه دو متغیر مرتبط چه ارتباطی با قیمت دارند نیاز به نمودار سه بعدی هست و بخاطر محدودیت نیاز به راه حل دیگه ای هست مثلا:

## Check non linearity with important features df['Q_PRICE'] = pd.qcut(df['PRICE'], 4, labels=["Lowest", "Low", "Upper", "upper_plus"]) ## Show non linearity between RM and LSTAT ax = sns.lmplot(x="DIS", y="INDUS", hue="Q_PRICE", data=df, fit_reg = False,palette="Set3")

Facets Deep Dive

برای اینکه ارتباط چند متغیر با هم و قیمت رو مشاهده کنید می تونید از این امکان استفاده کنید ولی بخاطر کوتاهی و اختصار از این بخش گذر می کنم...

هوش مصنوعیتنسورفلوtensorflowیادگیری عمیقdeep learning
https://amirabbas.me
شاید از این پست‌ها خوشتان بیاید