💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ محسن حاجیلو
خروجی inf برای دیتای قد مردان
جامعه هوش مصنوعی ایجاد شده در ۱۸ آذر ۱۴۰۱

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

این کار رو با تابع scipy.special.kl_div(xyout=None) مجدد انجام دادم تا نتیجه رو مقایسه کنم اما این تابع inf میده. چرا؟

سلام

هر کدام از نمونه‌ها در x و y باید تقسیم بر جمع کل بشوند تا به حالت احتمالی تبدیل شوند

احتمالا این کار رو نکردید برای این تابع

مسعود کاویانی ۲۲ آذر ۱۴۰۱، ۲۱:۴۹

استاد متوجه نشدم. این کد رو نوشتم. ممنون میشم روی کد راهنمایی بفرمایید:

import numpy as np

import pandas as pd

from scipy.stats import norm

from scipy.special import kl_div

def kl(p,q):

    result= np.sum(np.where(np.logical_and(p!=0,q!=0),p*np.log(p/q),0))

    return result

data= pd.read_csv('E:\\\\Python\\\\DataSets\\\\weight-height.csv')

males= data[data['Gender']=='Male']['Height']

m_mean= males.describe()['mean']

m_std= males.describe()['std']

count, division= np.histogram(males, bins=100)

count= count/len(males)

idata= norm.rvs(size=len(males),loc=m_mean,scale=m_std)

icount, idivision= np.histogram(idata, bins=100)

icount= icount/len(idata)

print(kl(count, icount))

print(kl_div(count, icount))


محسن حاجیلو ۲۴ آذر ۱۴۰۱، ۱۹:۲۸

اهان بعضی از عناصر توی این تابع inf میشن

بعد از اجرای خط کدهای بالا خط کدهای زیر را اجرا کنید

from numpy import inf
klx = kl_div(count, icount)
klx[klx == inf] = 0
print(sum(klx))

با این کار به جای Inf مقادیر صفر قرار می‌گیرد و سپس با جمع تمامی kl_divها عدد حدود ۰/۰۹ به دست می‌آید که نزدیک به همان قبلی است

بهترین پاسخ
مسعود کاویانی ۲۵ آذر ۱۴۰۱، ۰۹:۳۶