স্বতঃসংশ্লিষ্টকরণের জন্য আমি কীভাবে numpy.correlate ব্যবহার করতে পারি?


106

আমার একটি সংখ্যার সেটের স্বয়ংক্রিয় সম্পর্ক স্থাপন করা দরকার, যা আমি বুঝতে পেরেছি এটি কেবল নিজের সাথে সেটটির সম্পর্ক।

আমি নমপির সংযোগ ফাংশনটি ব্যবহার করে চেষ্টা করেছি, তবে ফলাফলটি আমি বিশ্বাস করি না, কারণ এটি প্রায়শই একটি ভেক্টর দেয় যেখানে প্রথম সংখ্যাটি সবচেয়ে বেশি নয় , যেমনটি হওয়া উচিত।

সুতরাং, এই প্রশ্নটি আসলে দুটি প্রশ্ন:

  1. ঠিক কী numpy.correlateকরছে?
  2. আমি কীভাবে এটি (বা অন্য কোনও কিছু) স্বতঃসংযোগ করতে ব্যবহার করতে পারি?

উত্তর:


114

আপনার প্রথম প্রশ্নের উত্তর দেওয়ার জন্য, বিপরীতটির সাথে সংশোধন numpy.correlate(a, v, mode)সম্পাদন করা aহচ্ছে vএবং নির্দিষ্ট মোড দ্বারা ক্লিপযুক্ত ফলাফলগুলি দেওয়া হচ্ছে। সংবর্তন সংজ্ঞা , সি (টি) = Σ -∞ <আমি <∞ একটি আমি বনাম টি + I যেখানে -∞ <T <∞, ফলাফল থেকে -∞ করার ∞ জন্য করতে পারবেন, কিন্তু আপনি সম্ভবত একটি অসীম দীর্ঘ সংরক্ষণ করতে পারবেন না অ্যারে। সুতরাং এটি ক্লিপ করতে হবে, এবং সেখান থেকে মোডটি আসে There এখানে তিনটি ভিন্ন মোড রয়েছে: পূর্ণ, একই এবং বৈধ:

  • "পূর্ণ" মোড tউভয়ের যেখানে ফলাফল দেয় aএবং vকিছুটা ওভারল্যাপ থাকে।
  • "একই" মোডটি সংক্ষিপ্ততর ভেক্টর ( aবা v) এর সমান দৈর্ঘ্যের সাথে ফলাফল দেয় ।
  • "বৈধ" মোড কেবল তখন aএবং vসম্পূর্ণ একে অপরকে ওভারল্যাপ করে ফলাফলগুলি প্রদান করে over এর জন্য ডকুমেন্টেশনnumpy.convolve মোডগুলিতে আরও বিশদ দেয়।

আপনার দ্বিতীয় প্রশ্নের জন্য, আমি মনে করি numpy.correlate হয় আপনি autocorrelation দান, এটা ঠিক আপনি একটি সামান্য আরো পাশাপাশি প্রদান করা হয়। স্বতঃসংশ্লিষ্ট একটি নির্দিষ্ট সময়ের ব্যবধানে নিজের সাথে সংকেত বা ফাংশনটি কতটা সাদৃশ্যপূর্ণ তা সন্ধান করতে ব্যবহৃত হয়। 0 এর এক সময়ের পার্থক্যে, অটো-সম্পর্কিত সম্পর্কটি সর্বোচ্চ হওয়া উচিত কারণ সংকেতটি নিজের মতোই, তাই আপনি প্রত্যাশা করেছিলেন যে স্বতঃসংশ্লিষ্ট ফলাফলের অ্যারেতে প্রথম উপাদানটি সবচেয়ে বড় হবে। তবে, পারস্পরিক সম্পর্ক 0-এর সময়ের পার্থক্য থেকে শুরু হচ্ছে না এটি একটি নেতিবাচক সময়ের পার্থক্য থেকে শুরু হয়, 0 এ বন্ধ হয় এবং তারপরে ধনাত্মক হয়। অর্থাৎ, আপনি প্রত্যাশা করেছিলেন:

autocorrelation (ক) = Σ -∞ <আমি <∞ একটি আমি বনাম টি + I যেখানে 0 <= T <∞

তবে আপনি যা পেয়েছেন তা হ'ল:

স্বতঃসংশোধন (ক) = ∑ -∞ <i <∞ a i v t + i যেখানে -∞ <t <

আপনাকে যা করতে হবে তা হ'ল আপনার পারস্পরিক সম্পর্কের ফলাফলের শেষ অর্ধেকটি নেওয়া এবং এটি আপনার সন্ধান করা স্বতঃসংশ্লিষ্ট হওয়া উচিত। এটি করার জন্য একটি অজগর ফাংশনটি হ'ল:

def autocorr(x):
    result = numpy.correlate(x, x, mode='full')
    return result[result.size/2:]

এটি অবশ্যই x1-ডি অ্যারে কিনা তা নিশ্চিত করার জন্য আপনার অবশ্যই ত্রুটি পরীক্ষা করতে হবে । এছাড়াও, এই ব্যাখ্যা সম্ভবত সবচেয়ে গাণিতিকভাবে কঠোর নয়। আমি অসম্পূর্ণতার আশপাশে ছোঁড়াচ্ছি কারণ সমঝোতার সংজ্ঞাটি তাদের ব্যবহার করে, তবে এটি অটোকোররিলেশনের জন্য প্রয়োজনীয় নয়। সুতরাং, এই ব্যাখ্যার তাত্ত্বিক অংশটি কিছুটা দুর্বল হতে পারে তবে আশা করি ব্যবহারিক ফলাফলগুলি সহায়ক। স্বতঃসংশোধনের এই পৃষ্ঠাগুলি বেশ সহায়ক and


6
বর্তমানের বিলাপগুলিতে, এ লেভি প্রস্তাবিত ঠিক কী অর্জন করতে মোড 'একই' নির্দিষ্ট করা যেতে পারে। ফাংশনটির বডিটি তখন পড়তে পারেreturn numpy.correlate(x, x, mode='same')
ডেভিড জুইকার

13
@ ডেভিডজুইকার কিন্তু ফলাফলগুলি ভিন্ন! np.correlate(x,x,mode='full')[len(x)//2:] != np.correlate(x,x,mode='same')। উদাহরণস্বরূপ, x = [1,2,3,1,2]; np.correlate(x,x,mode='full');{ >>> array([ 2, 5, 11, 13, 19, 13, 11, 5, 2])} np.correlate(x,x,mode='same');{ >>> array([11, 13, 19, 13, 11])}। সঠিক এগুলির মধ্যে একটি: np.correlate(x,x,mode='full')[len(x)-1:];{ >>> array([19, 13, 11, 5, 2])} দেখুন প্রথম আইটেম হল বৃহত্তম এক
বিকাশকারী

19
মনে রাখবেন যে এই উত্তরটি অস্বাভাবিকরকম স্ব-সংশোধন দেয়।
amcnabb

4
আমি মনে করি @ ডেভেলপার সঠিক টুকরা দেয়: [len(x)-1:]0-লেগ থেকে শুরু হয়। কারণ fullমোড ফলে আকার দেয় 2*len(x)-1, A.Levy এর [result.size/2:]হিসাবে একই [len(x)-1:]। এটি ভাল, যদিও এটি একটি int করা ভাল [result.size//2:]
জেসন

আমি দেখতে পেলাম এটি অবশ্যই একটি
অন্তঃসত্ত্বা

25

স্বতঃসংযোগ দুটি সংস্করণে আসে: পরিসংখ্যান এবং সমঝোতা। তারা উভয়েই একই বিশদটি বাদে একই কাজ করেছেন: পরিসংখ্যান সংস্করণটি ব্যবধানে থাকতে স্বাভাবিক করা হয়েছে [-1,1]। আপনি কীভাবে পরিসংখ্যানটি করেন তার একটি উদাহরণ এখানে দেওয়া হয়েছে:

def acf(x, length=20):
    return numpy.array([1]+[numpy.corrcoef(x[:-i], x[i:])[0,1]  \
        for i in range(1, length)])

9
আপনি numpy.corrcoef[x:-i], x[i:])[0,1]দ্বিতীয় লাইনে চান যেহেতু এর রিটার্ন মান corrcoef2x2 ম্যাট্রিক্স
লুইস্প্রেডো

পরিসংখ্যান এবং সমঝোতা সংক্রান্ত স্বতঃসংশ্লিষ্টতার মধ্যে পার্থক্য কী?
ড্যানিয়েল বলছেন

1
@ ড্যানিয়েলপেন্ডারগাস্ট: দ্বিতীয় বাক্যে জবাব দেওয়া হয়েছে যে: কিছুটা বিশদ বিবরণ ব্যতীত তারা উভয়েই একই কাজ করেছে: প্রাক্তন [পরিসংখ্যান] বিরতিতে থাকার বিষয়টি স্বাভাবিক করা হয়েছে [-1,1]
n1k31t4

21

ল্যাগ টির জন্য পরিসংখ্যানের সম্পর্ক সম্পর্কিত গণনা করার numpy.corrcoefপরিবর্তে ফাংশনটি ব্যবহার করুন numpy.correlate:

def autocorr(x, t=1):
    return numpy.corrcoef(numpy.array([x[:-t], x[t:]]))

"পারস্পরিক সম্পর্ক সহগ" কী সংকেত প্রক্রিয়াকরণে ব্যবহৃত স্বতঃসংশোধনকে উল্লেখ করে না এবং পরিসংখ্যানগুলিতে স্বতঃসংশ্লিষ্ট হয় না? en.wikedia.org/wiki/Autocorrelation#Signal_processing
ড্যানিয়েল মনিকাকে

@ ড্যানিয়েলপেন্ডারগাস্ট আমি সিগন্যাল প্রক্রিয়াজাতকরণের সাথে তেমন পরিচিত নই। অলস দস্তাবেজগুলি থেকে: "পিয়ারসন পণ্য-মুহুর্তের সম্পর্ক সম্পর্কিত গুণাগুণগুলি ফিরিয়ে দিন"। এটি কি সিগন্যাল প্রসেসিং সংস্করণ?
রামন জে রোমেরো ই ভিগিল

18

আমি মনে করি 2 টি বিষয় রয়েছে যা এই বিষয়টিতে বিভ্রান্তি যুক্ত করে:

  1. পরিসংখ্যান বনাম সিগন্যাল প্রসেসিং সংজ্ঞা: অন্যরা যেমন উল্লেখ করেছে, পরিসংখ্যানগুলিতে আমরা [-1,1] এ স্বয়ংক্রিয়-সম্পর্ককে স্বাভাবিক করি।
  2. আংশিক বনাম অ আংশিক গড় / বৈকল্পিক: যখন টাইমসারিগুলি একটি পিছনে> 0 এ পরিবর্তন হয়, তখন তাদের ওভারল্যাপের আকারটি সর্বদা <আসল দৈর্ঘ্য will আমরা কি মূল (অ-আংশিক) এর গড় এবং স্টাড ব্যবহার করি, বা সর্বদা পরিবর্তনশীল ওভারল্যাপ (আংশিক) ব্যবহার করে একটি নতুন গড় এবং স্টাডি গণনা করি কোনও তাত্পর্য তৈরি করে। (এটির জন্য সম্ভবত একটি আনুষ্ঠানিক শব্দ রয়েছে, তবে আমি আপাতত "আংশিক" ব্যবহার করব)।

আমি 5 টি ফাংশন তৈরি করেছি যা আংশিক বনাম অ আংশিক পার্থক্যের সাথে 1 ডি অ্যারের স্বতঃসংযোগ গণনা করে। কিছু পরিসংখ্যান থেকে সূত্র ব্যবহার করে, কিছু সিগন্যাল প্রক্রিয়াকরণ অর্থে ব্যবহার করে, যা এফএফটি এর মাধ্যমেও করা যেতে পারে। তবে সমস্ত ফলাফল পরিসংখ্যান সংজ্ঞাতে স্ব-সম্পর্কিত হয় , সুতরাং তারা কীভাবে একে অপরের সাথে যুক্ত রয়েছে তা চিত্রিত করে। নীচে কোড:

import numpy
import matplotlib.pyplot as plt

def autocorr1(x,lags):
    '''numpy.corrcoef, partial'''

    corr=[1. if l==0 else numpy.corrcoef(x[l:],x[:-l])[0][1] for l in lags]
    return numpy.array(corr)

def autocorr2(x,lags):
    '''manualy compute, non partial'''

    mean=numpy.mean(x)
    var=numpy.var(x)
    xp=x-mean
    corr=[1. if l==0 else numpy.sum(xp[l:]*xp[:-l])/len(x)/var for l in lags]

    return numpy.array(corr)

def autocorr3(x,lags):
    '''fft, pad 0s, non partial'''

    n=len(x)
    # pad 0s to 2n-1
    ext_size=2*n-1
    # nearest power of 2
    fsize=2**numpy.ceil(numpy.log2(ext_size)).astype('int')

    xp=x-numpy.mean(x)
    var=numpy.var(x)

    # do fft and ifft
    cf=numpy.fft.fft(xp,fsize)
    sf=cf.conjugate()*cf
    corr=numpy.fft.ifft(sf).real
    corr=corr/var/n

    return corr[:len(lags)]

def autocorr4(x,lags):
    '''fft, don't pad 0s, non partial'''
    mean=x.mean()
    var=numpy.var(x)
    xp=x-mean

    cf=numpy.fft.fft(xp)
    sf=cf.conjugate()*cf
    corr=numpy.fft.ifft(sf).real/var/len(x)

    return corr[:len(lags)]

def autocorr5(x,lags):
    '''numpy.correlate, non partial'''
    mean=x.mean()
    var=numpy.var(x)
    xp=x-mean
    corr=numpy.correlate(xp,xp,'full')[len(x)-1:]/var/len(x)

    return corr[:len(lags)]


if __name__=='__main__':

    y=[28,28,26,19,16,24,26,24,24,29,29,27,31,26,38,23,13,14,28,19,19,\
            17,22,2,4,5,7,8,14,14,23]
    y=numpy.array(y).astype('float')

    lags=range(15)
    fig,ax=plt.subplots()

    for funcii, labelii in zip([autocorr1, autocorr2, autocorr3, autocorr4,
        autocorr5], ['np.corrcoef, partial', 'manual, non-partial',
            'fft, pad 0s, non-partial', 'fft, no padding, non-partial',
            'np.correlate, non-partial']):

        cii=funcii(y,lags)
        print(labelii)
        print(cii)
        ax.plot(lags,cii,label=labelii)

    ax.set_xlabel('lag')
    ax.set_ylabel('correlation coefficient')
    ax.legend()
    plt.show()

এখানে আউটপুট চিত্র:

এখানে চিত্র বর্ণনা লিখুন

আমরা সমস্ত 5 টি লাইন দেখতে পাচ্ছি না কারণ তাদের মধ্যে 3 টি ওভারল্যাপ হয় (বেগুনি রঙে)। ওভারল্যাপগুলি সমস্ত অ আংশিক স্বয়ংক্রিয়-সম্পর্কিত lations এটি কারণ সিগন্যাল প্রক্রিয়াজাতকরণ পদ্ধতি ( np.correlate, এফএফটি) থেকে গণনা প্রতিটি ওভারল্যাপের জন্য আলাদা গড় / স্টাডি গণনা করে না।

আরও মনে রাখবেন যে fft, no padding, non-partial(লাল রেখা) ফলাফলটি আলাদা, কারণ এটি এফএফটি করার আগে 0 সেকেন্ডের সাথে টাইমসারিগুলিকে প্যাড করেনি, সুতরাং এটি বিজ্ঞপ্তি এফএফটি। আমি কোথাও কোথাও শিখেছি কেন, সে সম্পর্কে আমি বিশদভাবে ব্যাখ্যা করতে পারি না।


12

আমি যেমন একই সমস্যার মধ্যে পড়েছিলাম, আমি আপনার সাথে কয়েক লাইনের কোড শেয়ার করতে চাই। প্রকৃতপক্ষে এখনই স্ট্যাকওভারফ্লোতে স্বতঃসংশ্লিষ্ট সম্পর্কে বেশ কয়েকটি অনুরূপ পোস্ট রয়েছে। আপনি যদি a(x, L) = sum(k=0,N-L-1)((xk-xbar)*(x(k+L)-xbar))/sum(k=0,N-1)((xk-xbar)**2)স্বতঃসংশোধনকে এই হিসাবে সংজ্ঞায়িত করেন [আইডিএলের a_crerelate ফাংশনে প্রদত্ত এই সংজ্ঞা এবং এটি # 12269834 প্রশ্নের উত্তর 2 এ আমি যা দেখছি তাতে সম্মত ] তবে নীচেরগুলি সঠিক ফলাফলগুলি বলে মনে হচ্ছে:

import numpy as np
import matplotlib.pyplot as plt

# generate some data
x = np.arange(0.,6.12,0.01)
y = np.sin(x)
# y = np.random.uniform(size=300)
yunbiased = y-np.mean(y)
ynorm = np.sum(yunbiased**2)
acor = np.correlate(yunbiased, yunbiased, "same")/ynorm
# use only second half
acor = acor[len(acor)/2:]

plt.plot(acor)
plt.show()

আপনি যেমন দেখতে পাচ্ছেন আমি এটি পাপ বক্ররেখা এবং অভিন্ন র্যান্ডম বিতরণ দিয়ে পরীক্ষা করেছি এবং উভয় ফলাফলের মতো দেখে মনে হচ্ছে আমি তাদের আশা করব। মনে রাখবেন যে, আমি ব্যবহৃত mode="same"পরিবর্তে mode="full"অন্যদের করেনি।


9

আপনার প্রশ্ন 1 ইতিমধ্যে এখানে বেশ কয়েকটি দুর্দান্ত উত্তরে ব্যাপকভাবে আলোচনা করা হয়েছে।

আমি আপনার সাথে কয়েকটি লাইন কোড ভাগ করে নেওয়ার চিন্তা করেছি যা আপনাকে কেবল স্বতঃসংশোধনের গাণিতিক বৈশিষ্ট্যের ভিত্তিতে একটি সিগন্যালের স্বতঃসংশোধন গণনা করতে দেয়। অর্থাৎ স্বতঃসংশোধন নিম্নলিখিত উপায়ে গণনা করা যেতে পারে:

  1. সংকেত থেকে গড়টি বিয়োগ করুন এবং একটি পক্ষপাতহীন সংকেত প্রাপ্ত করুন

  2. নিরপেক্ষ সিগন্যালের ফুরিয়ার রূপান্তর গণনা করুন

  3. নিরপেক্ষ সিগন্যালের ফুরিয়ার রূপান্তরের প্রতিটি মানের বর্গক্ষেত্রের আদর্শ গ্রহণ করে সংকেতের পাওয়ার বর্ণালী ঘনত্ব গণনা করুন

  4. পাওয়ার বর্ণালী ঘনত্বের বিপরীত ফুরিয়ার রূপান্তর গণনা করুন

  5. নিরপেক্ষ সিগন্যালের স্কোয়ারের যোগফল দ্বারা পাওয়ার বর্ণালী ঘনত্বের বিপরীত ফুরিয়ার রূপান্তরকে স্বাভাবিক করুন এবং ফলাফল প্রাপ্ত ভেক্টরের অর্ধেক অংশ নিন

এটি করার কোডটি নিম্নলিখিত:

def autocorrelation (x) :
    """
    Compute the autocorrelation of the signal, based on the properties of the
    power spectral density of the signal.
    """
    xp = x-np.mean(x)
    f = np.fft.fft(xp)
    p = np.array([np.real(v)**2+np.imag(v)**2 for v in f])
    pi = np.fft.ifft(p)
    return np.real(pi)[:x.size/2]/np.sum(xp**2)

এটা কি সম্ভব যে এতে কিছু ভুল আছে? আমি অন্যান্য ফলাফলের সাথে এর ফলাফলগুলির সাথে মেলে না। ফাংশনটি একই রকম দেখায় তবে কিছুটা স্কুইড মনে হয়।
পিন্ডাকাস

@ পিন্ডাকাস আপনি আরও নির্দিষ্ট করতে পারেন? দয়া করে আপনি কী কী ত্রুটিগুলি খুঁজে পান তার কোন কার্যকারিতা সহ তথ্য সরবরাহ করুন।
রাগেরো

কেন ব্যবহার p = np.abs(f)করবেন না ?
dylnan

@ অল্লানান এটি চ এর উপাদানগুলির মডিউলগুলি দেবে , সেখানে আমরা এখানে চ এর উপাদানগুলির বর্গীয় মডিউলগুলি সহ একটি ভেক্টর চাই ।
রুগেরো

1
হ্যাঁ, তবে আপনি বুঝতে পেরেছেন যে তালিকার বোঝাপড়া করা সম্ভবত আরও ধীর।
জেসন

2

আমি একজন গণনামূলক জীববিজ্ঞানী এবং যখন আমাকে স্টোকাস্টিক প্রক্রিয়াগুলির সময় সিরিজের দম্পতির মধ্যে অটো / ক্রস-পারস্পরিক সম্পর্কগুলি গণনা করতে np.correlateহয়েছিল তখন আমি বুঝতে পারি যে আমার প্রয়োজনীয় কাজটি করা হচ্ছে না।

প্রকৃতপক্ষে, np.correlateযেটি অনুপস্থিত মনে হচ্ছে তা হ'ল দূরত্বের সম্ভাব্য সময় পয়েন্টগুলির সম্ভাব্য দম্পতিগুলির গড় 𝜏

এখানে আমি কীভাবে একটি ক্রিয়াকলাপ সংজ্ঞায়িত করেছি তা প্রয়োজন:

def autocross(x, y):
    c = np.correlate(x, y, "same")
    v = [c[i]/( len(x)-abs( i - (len(x)/2)  ) ) for i in range(len(c))]
    return v

এটি পূর্ববর্তী উত্তরগুলির মধ্যে আমার কাছে অটো / ক্রস-পারস্পরিক সম্পর্কের এই উদাহরণটি অন্তর্ভুক্ত নয়: আশা করি এই উত্তরটি আমার মতো স্টোকাস্টিক প্রক্রিয়াগুলিতে কাজ করা কারও পক্ষে কার্যকর হতে পারে to


1

আমি এই জাতীয় স্বতঃসংশোধনের জন্য তালিব.কোরেল ব্যবহার করি, আমার সন্দেহ হয় যে আপনি অন্যান্য প্যাকেজগুলির সাথেও এটি করতে পেরেছিলেন:

def autocorrelate(x, period):

    # x is a deep indicator array 
    # period of sample and slices of comparison

    # oldest data (period of input array) may be nan; remove it
    x = x[-np.count_nonzero(~np.isnan(x)):]
    # subtract mean to normalize indicator
    x -= np.mean(x)
    # isolate the recent sample to be autocorrelated
    sample = x[-period:]
    # create slices of indicator data
    correls = []
    for n in range((len(x)-1), period, -1):
        alpha = period + n
        slices = (x[-alpha:])[:period]
        # compare each slice to the recent sample
        correls.append(ta.CORREL(slices, sample, period)[-1])
    # fill in zeros for sample overlap period of recent correlations    
    for n in range(period,0,-1):
        correls.append(0)
    # oldest data (autocorrelation period) will be nan; remove it
    correls = np.array(correls[-np.count_nonzero(~np.isnan(correls)):])      

    return correls

# CORRELATION OF BEST FIT
# the highest value correlation    
max_value = np.max(correls)
# index of the best correlation
max_index = np.argmax(correls)

1

ফুরিয়ার ট্রান্সফর্মেশন এবং কনভলিউশন উপপাদ্য ব্যবহার করে

সময় পূর্ণতা হ'ল এন * লগ (এন)

def autocorr1(x):
    r2=np.fft.ifft(np.abs(np.fft.fft(x))**2).real
    return r2[:len(x)//2]

এখানে একটি সাধারণ এবং নিরপেক্ষ সংস্করণ, এটিও এন * লগ (এন)

def autocorr2(x):
    r2=np.fft.ifft(np.abs(np.fft.fft(x))**2).real
    c=(r2/x.shape-np.mean(x)**2)/np.std(x)**2
    return c[:len(x)//2]

এ। লেভীর দ্বারা সরবরাহিত পদ্ধতিটি কাজ করে, তবে আমি এটি আমার পিসিতে পরীক্ষা করে দেখলাম, এর সময়ের পরিপূর্ণতা এন * এন বলে মনে হচ্ছে

def autocorr(x):
    result = numpy.correlate(x, x, mode='full')
    return result[result.size/2:]

1

Numpy.correlate এর বিকল্প statsmodels.tsa.stattools.acf () এ উপলব্ধ । এটি ওপি দ্বারা বর্ণিত মত একটি ক্রমাগত হ্রাস হওয়া স্বতঃসংশোধন ফাংশন দেয়। এটি কার্যকর করা মোটামুটি সহজ:

from statsmodels.tsa import stattools
# x = 1-D array
# Yield normalized autocorrelation function of number lags
autocorr = stattools.acf( x )

# Get autocorrelation coefficient at lag = 1
autocorr_coeff = autocorr[1]

ডিফল্ট আচরণটি 40 টি এনএলএজে থামানো হয়, তবে এটি nlag=আপনার নির্দিষ্ট অ্যাপ্লিকেশনের বিকল্পের সাথে সামঞ্জস্য করা যেতে পারে । ফাংশনের পিছনের পরিসংখ্যানগুলির জন্য পৃষ্ঠার নীচে একটি উদ্ধৃতি রয়েছে


0

আমি মনে করি যে ওপি-র প্রশ্নের আসল উত্তরটি সংক্ষেপে নিম্পি.কোরলেট ডকুমেন্টেশন থেকে এই সংক্ষিপ্তসারে রয়েছে:

mode : {'valid', 'same', 'full'}, optional
    Refer to the `convolve` docstring.  Note that the default
    is `valid`, unlike `convolve`, which uses `full`.

এটি বোঝায় যে, কোনও 'মোড' সংজ্ঞা না থাকলে, Numpy.correlate ফাংশন একটি স্কেলার ফিরিয়ে দেবে, যখন তার দুটি ইনপুট আর্গুমেন্টের জন্য একই ভেক্টর দেওয়া হয় (যেমন - যখন স্বতঃসংশোধন সঞ্চালনের জন্য ব্যবহৃত হয়)।


0

পান্ডাসহ একটি সহজ সমাধান:

import numpy as np

def auto_corrcoef(x):
   return np.corrcoef(x[1:-1], x[2:])[0,1]

0

পান্ডাস ডেটাটিমে রিটার্নের সিরিজটি দিয়ে স্ট্যাটিস্টিকাল স্বতঃসংশোধন প্লট করুন:

import matplotlib.pyplot as plt

def plot_autocorr(returns, lags):
    autocorrelation = []
    for lag in range(lags+1):
        corr_lag = returns.corr(returns.shift(-lag)) 
        autocorrelation.append(corr_lag)
    plt.plot(range(lags+1), autocorrelation, '--o')
    plt.xticks(range(lags+1))
    return np.array(autocorrelation)

autocorrelation_plot()এই ক্ষেত্রে ব্যবহার করবেন না কেন ? (সিএফ। stats.stackexchange.com/ প্রশ্নগুলি / 357300/… )
কাসউদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.