मेरे पास पुस्तक नहीं है, इसलिए मुझे यकीन नहीं है कि क्रुस्च विधि का उपयोग करने में क्या सहजता है, लेकिन अंतर्ज्ञान के लिए एक सामान्य मानक से 100 नमूनों की इस साजिश पर विचार करें, साथ ही गाऊसी कर्नेल घनत्व का अनुमान है कि 0.1 से 1.0 तक विभिन्न बैंडविथ का उपयोग किया जाता है। (संक्षेप में, गाऊसी केडीई एक प्रकार का चिकना हिस्टोग्राम है: वे प्रत्येक डेटा बिंदु के लिए गॉसियन जोड़कर घनत्व का अनुमान लगाते हैं, साथ में देखे गए मूल्य पर।
आप देख सकते हैं कि एक बार भी स्मूथी एक अनिमॉडल वितरण बनाता है, मोड आम तौर पर 0 के ज्ञात मूल्य से नीचे है।
अधिक, यहाँ एक ही नमूने का उपयोग करके घनत्व का अनुमान लगाने के लिए उपयोग किए जाने वाले कर्नेल बैंडविड्थ द्वारा अनुमानित मोड (y- अक्ष) का एक प्लॉट है। उम्मीद है कि यह कुछ अंतर्ज्ञान को उधार देता है कि अनुमान चौरसाई मापदंडों के साथ कैसे भिन्न होता है।
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 1 09:35:51 2017
@author: seaneaster
"""
import numpy as np
from matplotlib import pylab as plt
from sklearn.neighbors import KernelDensity
REAL_MODE = 0
np.random.seed(123)
def estimate_mode(X, bandwidth = 0.75):
kde = KernelDensity(kernel = 'gaussian', bandwidth = bandwidth).fit(X)
u = np.linspace(-3,3,num=1000)[:, np.newaxis]
log_density = kde.score_samples(u)
return u[np.argmax(log_density)]
X = np.random.normal(REAL_MODE, size = 100)[:, np.newaxis] # keeping to standard normal
bandwidths = np.linspace(0.1, 1., num = 8)
plt.figure(0)
plt.hist(X, bins = 100, normed = True, alpha = 0.25)
for bandwidth in bandwidths:
kde = KernelDensity(kernel = 'gaussian', bandwidth = bandwidth).fit(X)
u = np.linspace(-3,3,num=1000)[:, np.newaxis]
log_density = kde.score_samples(u)
plt.plot(u, np.exp(log_density))
bandwidths = np.linspace(0.1, 3., num = 100)
modes = [estimate_mode(X, bandwidth) for bandwidth in bandwidths]
plt.figure(1)
plt.plot(bandwidths, np.array(modes))