توابع از دست دادن واگرایی بتا در Scikit Learn
موسسه پایاپروژه به عنوان متصدی انجام پروژه های پایتون وظیفه ی خود می داند که در راستای آموزش نرم افزار پایتون گام های موثری را بردارد. با توجه به اینکه یک دوره آموزشی پایتون مستلزم تمرین و تلاش بسیار است. اما این موسسه تلاش می کند سهم کوچکی در جهت یادگیری شما داشته باشد.
در انجام این پروژه پایتون، نحوه استفاده از Scikit Learn را برای تجسم توابع مختلف از دست دادن واگرایی بتا خواهیم آموخت. ابتدا متوجه خواهیم شد که توابع از دست دادن واگرایی بتا چیست و سپس پیاده سازی آن را در پایتون با استفاده از تابع _beta_divergence کتابخانه sklearn.decomposition._nmf در کتابخانه یادگیری scikit بررسی خواهیم کرد.
تابع از دست دادن واگرایی بتا در پروژه پایتون
توابع زیان واگرایی بتا نوعی تابع ضرر هستند که برای اندازه گیری تفاوت بین دو توزیع احتمال استفاده می شود . واگرایی با مقایسه نقاط دو توزیع اندازه گیری می شود.
از این فاصله می توان برای بهینه سازی تطابق توزیع ها و تعیین بهترین مدل برازش استفاده کرد. این برای کارهایی مانند یادگیری بدون نظارت ، که در آن توزیعهای احتمال برای نمایش دادهها استفاده میشود، مفید است. واگرایی بتا به توابع زیان دیگری مانند واگرایی کول بک-لایبلر و فاصله متغیر کل مربوط می شود.
تابع تلفات واگرایی بتا معمولاً در فاکتورسازی ماتریس غیرمنفی NMF استفاده می شود. در NMF، هدف این است که یک ماتریس غیر منفی را به دو ماتریس غیر منفی با رتبه پایین تر تبدیل کنیم، که معمولا به عنوان ماتریس پایه و ماتریس ضریب نامیده می شود.
تابع تلفات واگرایی بتا به عنوان یک تابع هدف برای بهینه سازی فرآیند فاکتورسازی با به حداقل رساندن اختلاف بین ماتریس هدف و ماتریس بازسازی شده استفاده می شود. این توابع ترجیح داده می شوند زیرا نسبت به سایر توابع از دست دادن برای NMF انعطاف پذیرتر هستند و می توان آنها را روی داده هایی استفاده کرد که کاملاً غیر منفی نیستند و دارای طیف گسترده ای از مقادیر هستند.
برخی از موارد استفاده از این توابع در پروژه های پایتون از دست دادن شامل خوشه بندی، تشخیص ناهنجاری، تقسیم بندی تصویر، پردازش زبان طبیعی، تجزیه و تحلیل سری های زمانی و سیستم های توصیه می شود.
فرمول کاهش واگرایی بتا را می توان به صورت زیر بیان کرد:
معرفی علائم:
X و Y ماتریس ها هستند.
xiو yiعناصر X و Y هستند.
β فراپارامتری است که درجه واگرایی را کنترل می کند.
واگرایی بتا تعمیم سایر معیارهای واگرایی مانند واگرایی Kullback-Leibler (KL) و فاصله کل تنوعTV است. شکل خاص واگرایی بتا به انتخاب یک پارامتر بستگی دارد که معمولاً به عنوان β نشان داده می شود. وقتی β روی 1 تنظیم می شود، با واگرایی KL مطابقت دارد، و زمانی که β به بی نهایت تمایل دارد، فاصله تلویزیون را تقریب می زند.
بر اساس مقادیر مختلف β ما می توانیم توابع از دست دادن واگرایی بتا متفاوتی را دریافت کنیم. برخی از توابع از دست دادن واگرایی بتا عبارتند از:
واگرایی Itakura-Saito: این تابع واگرایی با β=0 این به عنوان تعریف شده است.
واگرایی :Kullback-Leiblerاین تابع واگرایی با β=1 این واگرایی برای اندازه گیری تفاوت بین دو توزیع احتمال استفاده می شود.
![]()
هنجار Frobenius: این تابع واگرایی با β=2 این اساساً فاصله بین دو ماتریس ( خطای میانگین مربع ) را محاسبه می کند.
![]()
تابع تلفات واگرایی بتا که برای یک برنامه خاص است به ویژگی های داده بستگی دارد. به طور کلی، تابع از دست دادن هنجار Frobenius انتخاب خوبی برای داده هایی است که کاملاً غیر منفی هستند. واگرایی Kullback-Leibler انتخاب خوبی برای داده هایی است که کاملاً غیر منفی نیستند. واگرایی Itakura-Saito انتخاب خوبی برای داده هایی است که دارای طیف وسیعی از مقادیر هستند.
پیاده سازی کد
برای پیاده سازی و انجام این پروژه پایتون، ابتدا کتابخانه های مورد نیاز را وارد می کنیم.
Importing the libraries#
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition._nmf import _beta_divergence
مقایسه توابع:
اکنون، توابع مختلف از دست دادن واگرایی بتا را رسم و مقایسه خواهیم کرد.
Plotting and comparing the beta divergence for different values of bet#
Declaring the x and y variables#
x = np.linspace(0, 5, 100)
y = np.zeros(x.shape)
beta <= 0: Itakura-Saito divergence#
beta = 1: Kullback-Leibler divergence#
beta = 2: Frobenius norm (Euclidean distance)#
beta_loss = [‘Itakura-Saito’, ‘Kullback-Leibler’, ‘Frobenius norm’]
beta = [0.0, 1.0, 2.0]
Plotting the graph#
for j, beta in enumerate(beta):
for i, xi in enumerate(x):
Computing the beta divergence#
y[i] = _beta_divergence(1, xi, 1, beta)
Setting beta loss name with the corresponding value of beta#
name = f’beta = {beta}: {beta_loss[j]}’
Plotting the graph#
plt.plot(x, y, label=name)
Setting the graph parameters#
plt.xlabel(“x”)
plt.ylabel(“D(1, x)”)
plt.title(“Beta-Divergence(1, x)”)
plt.legend(loc=’upper center’)
plt.grid(True)
plt.axis([0, 4, 0, 3])
Displaying the graph#
()plt.show
خروجی:



