ЛЕГКИЙ ПУТЬ
Пока я пропускаю любые философские рассуждения о правильности использования плотности ядра в таких настройках.Об этом позже.
Простой способ сделать это - использовать scikit-learn KernelDensity
:
import numpy as np
import pandas as pd
from sklearn.neighbors import KernelDensity
from sklearn import preprocessing
ds=pd.read_csv('data-by-State.csv')
Y=ds.loc[:,'State'].values # State is AL, AK, AZ, etc...
# With categorical data we need some label encoding here...
le = preprocessing.LabelEncoder()
le.fit(Y) # le.classes_ would be ['AL', 'AK', 'AZ',...
y=le.transform(Y) # y would be [0, 2, 3, ..., 6, 7, 9]
y=y[:, np.newaxis] # preparing for kde
kde = KernelDensity(kernel='gaussian', bandwidth=0.75).fit(y)
# You can control the bandwidth so the KDE function performs better
# To find the optimum bandwidth for your data you can try Crossvalidation
x=np.linspace(0,5,100)[:, np.newaxis] # let's get some x values to plot on
log_dens=kde.score_samples(x)
dens=np.exp(log_dens) # these are the density function values
array([0.06625658, 0.06661817, 0.06676005, 0.06669403, 0.06643584,
0.06600488, 0.0654239 , 0.06471854, 0.06391682, 0.06304861,
0.06214499, 0.06123764, 0.06035818, 0.05953754, 0.05880534,
0.05818931, 0.05771472, 0.05740393, 0.057276 , 0.05734634,
0.05762648, 0.05812393, 0.05884214, 0.05978051, 0.06093455,
..............
0.11885574, 0.11883695, 0.11881434, 0.11878766, 0.11875657,
0.11872066, 0.11867943, 0.11863229, 0.11857859, 0.1185176 ,
0.11844852, 0.11837051, 0.11828267, 0.11818407, 0.11807377])
И эти значения - все, что вам нужнонанесите на карту вашу плотность ядра по гистограмме.Capito?
Теперь, с теоретической стороны, если X является категориальной (*), неупорядоченной переменной с c возможными значениями, то для 0 ≤ h <1 </p>
является допустимым ядром.Для упорядоченного X,
, где |x1-x2|
следует понимать как количество уровней друг от друга x1 и x2.Поскольку h стремится к нулю, оба они становятся индикаторами и возвращают относительный подсчет частоты. h часто упоминается как полоса пропускания .
(*) В переменном пространстве не требуется определять расстояние.Не должно быть метрического пространства.
Devroye, Luc and Gábor Lugosi (2001). Combinatorial Methods in Density Estimation. Berlin: Springer-Verlag.