MENU

MATLABのグラフィック関数

はじめに

MATLABはグラフィック関数を用いてデータの可視化をすることができます。 いろいろあるのでお勉強のためにドキュメンテーションからグラフィック関数とその使い方をまとめます。

MATLABのグラフィックの詳細は次のページに詳細が載っています。

jp.mathworks.com

ラインプロット

線形2次元プロット

$x$を$[-2\pi, 2pi]$の間に線形に等間隔な100個の点として、sin関数、cos関数を描画します。 等間隔に100個の点を用意するためにはlinspace関数を使います。点の数を変更したい場合には、linspace(-2\pi, 2pi, 150)のように第3引数に用意したい点数を渡します。

x = linspace(-2*pi,2*pi);
y1 = sin(x);
y2 = cos(x);

figure
plot(x,y1,x,y2)

グラフの詳しい指定方法についてはここの内容を見てください。

異なるY軸を使用した2つのデータのプロット

plotyy(X1, Y1, X2, Y2)を用いてY1をX1をy軸の左側にラベリングして、Y2をX2をy軸の右側にラベリングしてプロットします。

x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);

[hAx,hLine1,hLine2] = plotyy(x,y1,x,y2);
hLine1.LineStyle = '--';
hLine2.LineStyle = ':';

plotyyでxとyを指定した後に、使用するグラフを指定することができます。次の例では(x,y1)についてはplot関数を使用し、(x,y2)についてはstem関数を使用しています。

x = 0:0.1:10;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);

figure
plotyy(x,y1,x,y2,'plot','stem')

離散データのプロット

離散データ列

stem(X, Y)はXで指定した値に、データ列Yをプロットします。そのため、XとYのベクトルまたは行列のサイズは同じでなければなりません。Xは行ベクトルまたは列ベクトルで、Yはlength(X)行の行列でなければなりません。

X = linspace(0,2*pi,50)';
Y = [cos(X), 0.5*sin(X)];
stem(Y)

階段状プロット

stem関数と同様の形式で階段状のグラフをプロットします。

X = linspace(0,4*pi,50)';
Y = [0.5*cos(X), 2*cos(X)];

figure
stairs(X,Y)

散布図

scatter(x, y)で、ベクトルx, yで指定された位置に散布図を作成することができます。

x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);
a = 25;
c = linspace(1,10,length(x));
scatter(x,y,a,c,'filled')

plotmatrix(X)でYの列に対するXの列の散布図を含む散布図プロット行列を作成できます。 行列の(i,j)成分のサブプロットはj列目に対するi列目の散布図です。体格成分には各列のヒストグラムプロットが配置されます。

X = randn(50,3);
plotmatrix(X)

plotmatrix(X, Y)でYの列に対する X の列の散布図を含む小座標軸の行列を作成できます。

X = randn(50,3);
Y = reshape(1:150,50,3);
plotmatrix(X,Y)

等高線図とベクトル場

等高線

等高線はcontour関数を用いて描画します。

x = linspace(-2*pi,2*pi);
y = linspace(0,4*pi);
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);

contour(X,Y,Z)

ベクトル場

速度ベクトルをfeather(U,V)で描画できます。フェザープロットは、横軸に沿った等間隔の点を原点とするベクトルを描画します。それぞれのベクトルの原点を基準としたベクトル成分を表します。 UとVで指定されるベクトルを表示し、Uは相対的な座標としてのx成分、Vは相対的な座標としてのy成分を含んでいます。

thetaの方向を表すフェザープロットを作成します。featherは直交座標を使用するためpol2cartを使用してthetaとrを直交座標に変換します。

theta = -pi/2:pi/16:pi/2;
r = 2*ones(size(theta));

[u,v] = pol2cart(theta,r);
feather(u,v)

また、quiver(x, y, u, v)でx,yの各要素と矢印を組み合わせることができます。

[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;

quiver(x,y,u,v)

等高線図とベクトル場の表示

$ z = x \exp( -x^{2} -y^{2} ) $の等高線と勾配ベクトルを描画します。勾配ベクトルはgradient関数によって得ることができます。

$$ \nabla \boldsymbol{F} = \frac{\partial \boldsymbol{F}}{\partial x} \boldsymbol{i} + \frac{\partial \boldsymbol{F}}{\partial y} \boldsymbol{j} $$

% z = x exp( -x^2 - y^2)の等高線を描画
[X,Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);
contour(X,Y,Z,10)

% 勾配計算
[U, V] = gradient(Z, 0.2, 0.2);
hold on
quiver(X, Y, U, V);
hold off

図解・ベイズ統計「超」入門

はじめに

 本の表紙から「マンガでわかる〜」シリーズ感がありますが、文章中心の構成です。 確率の話から始まり、ベイズの定理、ナイーブベイズベイズ統計学と進んで行く構成になっています。

  1. ベイズ統計学」ってなんだろう?
  2. 確率の「4つの基本」を押さえよう
  3. ベイズの定理」を理解しよう
  4. ベイズの定理」を応用しよう
  5. 「理由不十分の原則」と「ベイズ更新」を理解しよう
  6. ベイズ統計学を理解しよう
  7. 正規分布データをベイズ統計で分析しよう

ベイズ統計学とは?

 頻度主義の統計学では、確率の話がほとんど出てこないが、ベイズ理論では、ベイズの定理を出発点として確率を応用する。
ベイズの定理は200年以上も前の理論だが、ベイズの定理を応用する際に人の裁量が加わるため厳密性を求める数学において馴染まなかったらしい。その非厳密性が意思決定、過去と現在のデータの関係付けなどができるということ、また計算機による複雑な計算が可能になったことによって近年、着目されている。

ベイズ統計学で用いる確率の基本

ベイズ統計を理解するためには、同時確率、条件付き確率、乗法定理、加法定理の4つの基本が必要となる。 (それぞれの詳細はとりあえずあとでまとめるかも?)

ベイズの定理とは?

ベイズの定理は次の式で表される。

$$ p(H|D) = \frac{p(D|H)p(H)}{p(D)} $$

$H$を仮説(Hypothesis)、$D$をデータ(Data)と解釈すると、各確率は次のような解釈となる。

  • $p(H|D)$: データ$D$が得られたときに、仮説$H$が成り立つ確率
  • $p(D|H)$: 仮説$H$が成り立つときに、データ$D$が得られる確率
  • $p(H)$: 仮説$H$が成り立つ確率
  • $p(D)$: データ$D$が得られる確率

それぞれ、$p(H|D)$を事後確率、$p(D|H)$を尤度、$p(H)$を事前確率とよぶ。 事後確率はデータが得られた後の確率、事前確率はデータが得られる前の確率という意味で、尤度は仮説$H$のもとでもっともらしく起こる確率という意味で実用上は、仮説が成り立つ場合にデータが得られる確率である。

ベイズの定理を用いた有名な例題としてモンティホール問題、難病の検査の問題がある。 (あとで書くかも?)

理由不十分の原則

理由不十分の原則とは、不確かな事前確率には、とりあえず適当なものを使うというもの。この事前確率に対して融通が利く点が経験を活かせるということにつながる。経験に応じて、事前確率の設定を変えてやることができる。

ベイズ更新

ベイズ更新は、過去のデータを新しいデータの分析に活用する手段を与える。つまり、以前のデータで得られた事後確率を次のデータ解析における事前分布として採用するという技法である。この技法によって過去のデータと現在のデータをスムーズに融合することができる。

ベイズ統計学とは?

ベイズ統計学では、従来の統計学で用いられていた母数を確率分布とみなす。従来の統計学では母数は固定パラメータであったが、ベイズ統計学では、母数も確率分布として考えて議論をする。例えばコインの表か裏が出る問題を考える時、従来の統計学では表が出る確率と裏が出る確率はそれぞれ$0.5$としていたが、ベイズ統計学ではコイン自体が確率的に表と裏が出るとみなす。つまり、表が出る確率が$\theta$のコインを使っているものとする。

ベイズ統計学の応用分野

ベイズ統計学は次のような分野に応用することができる。

社会科学やビジネスの分野に幅広く応用することができる。

読んだ感想

 ベイズ統計自体はそこそろ勉強していたので、本自体はサクサク読めた。 従来の統計学との大きな違いは、事前分布に経験といった知識を盛り込めることだと思う。 ベイズの定理の式は知っているが、何に使えるのかいまいちピンときていない人が読むと幸せになれる本だと思う。 まあ、ビジネスの世界でこんなベイズ統計を駆使したデータ解析をするのかって言われるとちょっとよく分からないですが。

こんにちは世界

 今までMarkdown形式でローカルにいろいろためていたので、まあいい機会なので適当に書いておこうかなと思いました。 はてなブログにした理由は、Markdownが使えるのとそこそこ使われているからですかね?

 とりあえずMarkdownで記事を書くにあたって、設定しておきたいのがMathJaxで、これがないと数式を書くのがツライです。 MathJaxはMarkdown中でほぼLaTeX記法で数式を記述できるJavascriptの何かです。中身までは知りません。 はてなブログでMathJaxを楽に使うためには次のような設定を書く加える必要があります。

[デザイン] - [カスタマイズ] - [サイドバー] - [モジュールの追加]の中にあるHTMLを選択して次のスクリプトを書き込めばOKです。

<script type="text/javascript"
  src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
  });
</script>

以上の設定を変更するとMathJaxで数式を記述できます。 ドル記号1つの場合は$x,y$のようにインライン表記をしてくれます。 ドル記号を2つ付けると,新しい行に表示することができます。

$$ e ^ {j \pi} + 1 = 0 $$

思いついたことや今まで書き連ねていたことを適当に書いていく予定です。