
ゆうき( @BASEBALLY15 )です^^
Pythonで,データ分析の勉強をし始めて,『カーネル密度推定』というのが出てきたのですが,よく分からないです・・・
『 カーネル密度推定 』は,データ分析を行う上で,重要なキーワードになります.
今回は,データ分析を行ったことがない人のために,基礎的な内容をご紹介します.
よろしくお願いします・・・
(Udemy 『実践Pythonデータサイエンス』を参考,Jupiternotebookを使用)

カーネル密度推定とは?
簡単に言うと,『ガタガタのグラフ』を『滑らかなグラフ』に変換することです.滑らかなグラフに変換することで,x軸の値が分かれば,y軸の値も求めることが出来ます^^
以下の図を見てください.


1つ目のグラフは,ヒストグラフで,2つ目のグラフがカーネル密度推定を行ったグラフです.
グラフを見てわかるように,ヒストグラフの場合,x軸が分かったところでy軸を求めることが出来ませんが,カーネル密度推定を行ったグラフでは,x軸が分かれば,y軸も求めることが出来ます.
Pythonでカーネル密度推定を行ってみよう
ライブラリ
import numpy as np
from numpy.random import randn
import pandas as pd
from scipy import stats
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
今回は,カーネル密度推定を行うために,seabornをインポートします.
そして,ランダムに25個のデータを持ってきて,ヒストグラムを描きます.
それでは,コードを見てみましょう^^
コード
dataset = randn(30)plt.hist(dataset,alpha=0.3)
sns.rugplot(dataset)
plt.savefig("hist_rug_mix")
このコードを実行すると,以下のグラフが表示されます.

次に,このグラフをカーネル密度推定によるグラフで表してみます.
#カーネル密度関数を用いて描写する
sns.kdeplot(dataset)
sns.kdeplot()はカーネル密度推定を行うための関数です.
この1文を打つだけで,簡単にカーネル密度推定を行うことが出来ます.
このコードを実行すると,

このように,滑らかなグラフを描くことが出来ました.
ヒストグラムとカーネル密度関数を重ねてみると,以下の通りになります.
推定を行っているので,完璧に重なりませんが,概ね近い形となっているのではないでしょうか.
sns.rugplot(dataset)
sns.distplot(dataset)

カーネル密度関数にはいくつか種類がある
カーネル密度関数には,いくつか種類があり,上で示したグラフは,ガウス分布が使われています.
それでは,種類ごとのグラフを表示してみましょう.
#カーネル関数を変更してみる
kernel_selection = ["biw","cos","epa","gau","tri","triw"]
for kernel_change in kernel_selection:
sns.kdeplot(dataset,kernel=kernel_change,label=kernel_change)

このようになり,トップページで表示ているグラフになります.
このように,どのカーネル密度関数をつかうかによって,グラフが異なるので,
データ数や対象としているデータによって使い分けることが重要です.
おわりに
今回は,Pythonを使って,カーネル密度推定の基本的な使い方について勉強しました.
この説明で,分からないところがあれば,ホーム画面の『Q &A』で質問していただくと,
回答します.
それでは・・・
Q &A
y 様
【質問内容】
カーネル密度関数に従う乱数生成は可能ですか?
【回答】
以下のサイトが参考になるのではないかと思います.
↓
https://teratail.com/questions/172412
もし,上記のサイトでは解決できない場合は,再度,質問して頂けると幸いです.