回答編集履歴
3
コード修正と図を追加
answer
CHANGED
@@ -15,11 +15,14 @@
|
|
15
15
|
import seaborn as sns
|
16
16
|
import numpy as np
|
17
17
|
|
18
|
+
print(sns.__version__) # 0.9.0
|
19
|
+
|
18
20
|
fig, (ax1, ax2) = plt.subplots(1,2)
|
19
21
|
sns.distplot([0.1,0.1,0.1,0.2], ax=ax1)
|
20
22
|
sns.distplot([1,1,1,2], ax=ax2)
|
21
23
|
plt.show()
|
22
24
|
```
|
25
|
+

|
23
26
|
|
24
27
|
曲線の意味
|
25
28
|
-----
|
2
全面的に回答修正
answer
CHANGED
@@ -2,28 +2,35 @@
|
|
2
2
|
|
3
3
|
正直「確率密度」とは何かなどが~~いまいち~~ほぼほぼ理解できていないのですが、`Prasann Barot`さんの回答をgoogle翻訳した結果を引用します。
|
4
4
|
|
5
|
-
> ANS->密度プロットのy軸は、カーネル密度推定の確率密度関数です。ただし、これは確率ではなく確率密度であると指定するように注意する必要があります。違いは、確率密度とは、x軸上の単位あたりの確率です。実際の確率に変換するには、x軸上の特定の間隔の曲線の下の領域を見つける必要があります。やや紛らわしいことに、これは確率ではなく確率密度であるため、y軸は1より大きい値を取ることができます。
|
5
|
+
> ANS->密度プロットのy軸は、カーネル密度推定の確率密度関数です。ただし、これは確率ではなく確率密度であると指定するように注意する必要があります。違いは、確率密度とは、x軸上の単位あたりの確率です。実際の確率に変換するには、x軸上の特定の間隔の曲線の下の領域を見つける必要があります。やや紛らわしいことに、これは確率ではなく確率密度であるため、y軸は1より大きい値を取ることができます。
|
6
6
|
|
7
|
-
つまり`y`軸は確率密度を示す値ですが、描かれた曲線と`x`軸とを囲む領域の**面積が`
|
7
|
+
つまり`y`軸は確率密度を示す値ですが、描かれた曲線と`x`軸とを囲む領域の**面積が`データ値の出現個数の総数`になるように補正、正規化された値**だということのようです。
|
8
8
|
これは以下のようなコードにて簡単な図を描くことで確かめられます。
|
9
9
|
|
10
10
|
以下の図において右側は`x`値が左側の`10`倍であるため`y`軸の値は`1/10`になっています。
|
11
|
-
またざっと目視で
|
11
|
+
またざっと目視で曲線とx軸で囲まれた領域の面積を求めてみます。
|
12
|
+
どちらも約`1.25`となり、実際の出現個数の総数`4`と、少し離れた値になっていますが、これは推定の仕方、`distplot`でデフォルトで使用している確率密度関数の性質に起因するものです。
|
12
13
|
```python
|
13
14
|
import matplotlib.pyplot as plt
|
14
15
|
import seaborn as sns
|
16
|
+
import numpy as np
|
15
17
|
|
16
|
-
fig, (ax1, ax2) = plt.subplots(1,
|
18
|
+
fig, (ax1, ax2) = plt.subplots(1,2)
|
19
|
+
sns.distplot([0.1,0.1,0.1,0.2], ax=ax1)
|
17
|
-
sns.distplot([
|
20
|
+
sns.distplot([1,1,1,2], ax=ax2)
|
18
|
-
sns.distplot([1,2], ax=ax2) # x値が↑の10倍
|
19
21
|
plt.show()
|
20
22
|
```
|
21
|
-

|
22
23
|
|
23
24
|
曲線の意味
|
24
25
|
-----
|
25
|
-
この図の曲線([確率密度関数](https://ja.wikipedia.org/wiki/%E7%A2%BA%E7%8E%87%E5%AF%86%E5%BA%A6%E9%96%A2%E6%95%B0))を用いると、与えられたデータ群
|
26
|
+
この図の曲線([確率密度関数](https://ja.wikipedia.org/wiki/%E7%A2%BA%E7%8E%87%E5%AF%86%E5%BA%A6%E9%96%A2%E6%95%B0))を用いると、与えられたデータ群以外のデータ値の出現確率(個数)を推定することができます。
|
26
|
-
たとえば左側の図において`x=0.
|
27
|
+
たとえば左側の図において`x=0.075`というデータ値の出現確率(個数)は以下によって求めることができます。
|
27
28
|
|
28
|
-
今`x`値から上に直線を伸ばして曲線とそれに交わった点の`y`軸の値を見ます。この場合は約`
|
29
|
+
今`x`値から上に直線を伸ばして曲線とそれに交わった点の`y`軸の値を見ます。この場合は約`10`になります。
|
29
|
-
これに`x=0.
|
30
|
+
これに`x=0.075`を掛けて`0.75`個という値が`x=0.075`の出現確率(個数)となります。
|
31
|
+
ただ、直感的にはもう少し大きな値になるのが自然そうで、あまり当てにならない感じもします。
|
32
|
+
|
33
|
+
ということで`Prasann Barot`さんの回答の続き
|
34
|
+
> 密度プロットの唯一の要件は、曲線下の総面積が1つに統合されることです。私は一般に、密度プロットのy軸を、異なるカテゴリ間の相対的な比較の値としてのみ考える傾向があります。
|
35
|
+
|
36
|
+
という回答になっているのかと思います。
|
1
追記
answer
CHANGED
@@ -18,4 +18,12 @@
|
|
18
18
|
sns.distplot([1,2], ax=ax2) # x値が↑の10倍
|
19
19
|
plt.show()
|
20
20
|
```
|
21
|
-

|
21
|
+

|
22
|
+
|
23
|
+
曲線の意味
|
24
|
+
-----
|
25
|
+
この図の曲線([確率密度関数](https://ja.wikipedia.org/wiki/%E7%A2%BA%E7%8E%87%E5%AF%86%E5%BA%A6%E9%96%A2%E6%95%B0))を用いると、与えられたデータ群`[0.1,0.2]`以外のデータ値の出現確率を推定することができます。
|
26
|
+
たとえば左側の図において`x=0.05`というデータ値の出現確率は以下によって求めることができます。
|
27
|
+
|
28
|
+
今`x`値から上に直線を伸ばして曲線とそれに交わった点の`y`軸の値を見ます。この場合は約`2`になります。
|
29
|
+
これに`x=0.05`を掛けて`0.1=10%`という値が`x=0.05`の出現確率となります。
|