jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

数式は(そんなに)怖くない(2)

では,前回のイントロにつづいて具体的に2つほど数式を見ていきましょう。

まずは平均

平均値の計算は,直感的にも,計算手続きも親しみがある方が多いと思うので,これをとりかかりにしてみましょう。
まず,直感的な理解としては,あるデータの集まりの中での中間的な値,良くありそうな値という漠然とした考えがあると思います。
計算手続きとしては,データを構成する要素を全て足して,データの個数で割るという手続きは理解しやすいのではないでしょうか。
これを数式で示すと以下のようになります。

 \overline{X} = \frac{\sum_i^n{X_i}}{n}

この数式だと,一番厄介そうなのが \sum{}ですね。これはここに上がっているものを全て足し合わせる記号です。 X_iがデータの各要素なので,上で書いた計算手続きの中の「要素を全て足して」という部分に対応します。この式では,データがn個あると想定しており,分母のnが「データの個数で割る」という部分に対応しています。こうして考えてみれば,ちょっとややこしそうに見える数式でも足し算と割り算しかやっていないことがわかると思います。

つぎは分散

分散は,データの散らばりの程度を表す指標です。データの平均は,中間的な値しかわからず,平均に近いところにデータが密集しているのか,それとも平均から遠い位置にもデータが散財するのかがわかりません。分散はそれを表現してくれます。

では数式を見てみましょう。

 Var_X = \frac{\sum_i^n({X_i - \overline{X}})^2}{n}

平均に比べると複雑なので,部分に分けて見ていきます。

 (X_i - \overline{X})
ここはデータの各要素からデータの平均値を引いています。いってみればデータの各値と平均値との距離をあらわしています。計算として,平均値は上に書いたとおり,足し算と割り算でできています。そして引き算をしたことになりますね。

 (X_i - \overline{X})^2
カッコの中は上と全く同じです。2乗がついたことで,掛け算をすれば良いということになります。ここで,カッコの中がプラスの値でも,マイナスの値でも,2乗するとプラスの値になることが大事です。

 \sum_i^n{}
先程も出てきたΣ記号は,上の計算結果を全て足し合わせる記号です。

 \frac{}{n}
そして,平均と同じように最後にn(つまりデータの個数)で割り算をしています。

ここまでで足し算,引き算,掛け算,割り算すべて出てきましたね。そして,それ以上の計算は出てきませんでした。分散は平均ほどなじみのない指標かもしれませんが,計算としては四則演算ができれば,簡単に計算できることがこれでわかります。

平均と分散には共通の手続きがある

上で書いた平均と分散の計算手続きについてもう一度見てみると,2つの指標はどちらも「計算結果を全て足し合わせ」て,「データの個数で割る」としていました。計算手続きが同じということは,その計算が意味するところも似たようなものかもしれません。計算結果を全て足して,データの個数で割るという手続きは,計算結果の中間的な答えを示しています。平均の場合には,データ要素の中間的な値でした。では,分散ではどうでしょう。計算結果は,データの要素からデータの平均を引いたもの2乗したものです。これは,各データが平均の値からどれくらい離れているかを示しています。なので,分散が示す散らばりとは平均からの距離の中間的な値を示していると理解できます。

以上のように,計算手続きを分解しながら詳しく見てみたことで,分散がどんな指標なのかを確認することができました。次回は,別の指標を数式をもとに考えてみたいと思います。

数式は(そんなに)怖くない(1)

今回は,統計学やデータ解析の教科書に出てくる数式が苦手という人に向けた応援的内容です。

数式でものを考えるということ

統計学やデータ解析の教科書では,しばしば数式が出てきます。例えば,以下のような式は平均の計算手続きを示しています。
 \overline{X} = \frac{\sum_i^n{X_i}}{n}
こんな式(おそらく \sumですよね)が出てくると「ああ」と悲しい気持ちになる人がいるかもしれません。でも大丈夫。
このくらいの数式は,小学校で習った四則演算(+,ー,✕,÷)ができればたいてい計算できます。
ある行動や現象を数式で考えられるというのはすごいことで,実は,現象のシンプルな説明模型になっています。だから数式のことを「モデル」と呼ぶことがあるんです。
モデルと呼ぶからには,うまい仕組みや意味のようなものが数式の中に含まれていることもあります。今回は,ゆっくりゆっくり数式を眺めながら考えてみましょう。

本当に四則演算だけで充分なの?

本当に四則演算だけで十分かと聞かれれば,1つ部品が足りないことに気づきます。それは,平方根 \sqrt{}です。二乗してその数になる数というのは,掛け算・割り算の応用範疇かもしれませんが,
いちおう平方根まで計算できれば,初学者が見る数式の殆どを理解できるはずです。*1

次回から具体的な数式で考えていきます。

*1:難しい専門用語を使うなら最小二乗法の適用範囲くらいは,四則演算と平方根でなんとかなるというイメージです。 これはあくまでも個人的な主観に基づいています

ロボットがヒト区別つかなくなる世界

今日も,最近思っていることを書きたいと思います。最近,人工知能の話題がとても盛り上がっています。この勢いが続けば,人間に寄り添うパートナーロボットが作られる日が来るかもしれません。今日は,そんなときにどんなことが起きるのかをちょっと想像してみます。
ロボットが人間にとってどんな存在なのかをきちんと書いたものに「ロボット3原則」があります。

ロボット3原則

アイザック・アシモフがまとめたロボットの行動規範です。

  • 第一条 ロボットは人間に危害を加えてはならない。また、その危険を看過することによって、人間に危害を及ぼしてはならない。
  • 第二条 ロボットは人間にあたえられた命令に服従しなければならない。ただし、あたえられた命令が、第一条に反する場合は、この限りでない。
  • 第三条 ロボットは、前掲第一条および第二条に反するおそれのないかぎり、自己をまもらなければならない。

ロボット工学三原則 - Wikipedia

この3つのルールには優先順位がついているところがポイントだと思います。例えば,ロボットは基本的に命令に従うが,それによって人間に害が加える場合は,従わなくて良いわけです。また,命令に従うことが優先された上で,自己の身を守るということは,場合によっては自分の身の破滅を招く行動も可能なわけです。第一条と第二条は、人間が基準になっていることも大事なポイントです。

では,ロボットが社会的に今よりも浸透し,また,見た目にもヒトと区別がつかなくなるとどんなことがおきるのでしょう。
アニメーション作品の中にそのヒントがあるように感じています。

鉄腕アトムの「嵐の中を突っ走れ!」

1980年から放送されていた鉄腕アトムの話の中に「嵐の中を突っ走れ!」というのがあります。この話の中で,孫を育てているおじいさんが実はロボットなのですが,孫は人間だと思いこんでいます。実は,おじいさんロボットは,今は走らなくなった機関車のメインコンピュータを改造してできています。話の後半,嵐でダムが決壊して,アトムのクラスメートが機関車にのって逃げなければならなくなるのですが,メインコンピュータが抜かれている機関車は走りません。ここで,孫娘は,おじいさんに「機関車を走らせて!お願い!」とせまります。おじいさんからすれば,孫娘の行く末を見守るという命令を守らなければならないので,機関車に戻るわけには行きません。しかし、悩んだ後におじいさんは、再び機関車のメインコンピュータとなることを選びます。ロボット3原則に立って考えれば,第2条が第3条に優先されるという解釈が成り立ちます。ただし,孫娘は人間だと思っているおじいさんに「お願い」したのであって,ロボットに「命令」したのではありません。第1条,第2条の規制がないのに,すすんで危険に立ち向かうというところが,ロボットしてではなく,人間としての判断に立っているようにも見えます。 

イブの時間

最近見た映画「イブの時間」では,アンドロイドが社会に浸透した世界が描かれています。その社会全体では、人間とロボットは、絶対的な主従関係にあります。しかし、イブの時間という名前のカフェでは,ロボットと人間を区別しないというルールがあり,誰がロボットで誰が人間なのかがわからないまま話が進んでいきます。
https://www.amazon.co.jp/%E3%80%8C%E3%82%A4%E3%83%B4%E3%81%AE%E6%99%82%E9%96%93-%E5%8A%87%E5%A0%B4%E7%89%88%E3%80%8D-DVD-%E7%A6%8F%E5%B1%B1%E6%BD%A4/dp/B003JERTC6

ストーリーの詳細をここには書きませんが,ここでも人間はロボットに対する愛着を見せています。それがロボットであるとはっきり分かっていてもです。そして興味深いのは,ロボットが人間をもっと理解したいという感情らしきものを見せるところにあります。

ロボットの倫理の必要性

上記2作品を解釈すると,「ロボット3原則」ではカバーできないことに気づきます。おそらく,人間にとって人間の倫理が大事で,人間を基準としたロボットの倫理だけでなく,ロボットにとってのロボットの倫理やロボットにとっての人間の倫理が存在することになっていくのだと感じます。

 

大きなマウスパッドのすすめ

今回は,最近購入したマウスパッドの良いところを紹介します。

なぜマウスパッドが欲しかったのか?

私は,マウスが苦手です。普段は,ラップトップPCで作業することが多いので,主にタッチパネルを使っているからです。最近,デスクトップPCを入手したのですが,これに付属のmagic mouseがまったく上手く使えません。しかも,マウスを使っている時にガチャガチャとうるさく周りにも迷惑をかけてしまっている気がします。なので,マウスパッドを購入することにしました。

どんなマウスパッドを買ったの?

以下の写真のような特大マウスパッドを購入しました。

f:id:jnobuyuki:20180316135817j:plain

どんなところが良い?

まず表面がポリエステルで,マウスがよく滑ります。一方,裏面は天然ラバーなので,マウスパッド自体は全く動きません。また,サイズが幅60cm,奥行き29.7cmなので,私のようにマウス操作が下手な人でも,まずマウスパッドの端までいってしまうということがありません。これだけの大きさがあるので,小さめのキーボードであれば,キーボードとマウスを一緒に乗せても十分にマウス操作スペースがあります。
例えば,サブディスプレイの右端にカーソルがあるときの手の位置が以下のようであれば。

f:id:jnobuyuki:20180315142117j:plain

メインディスプレイの左端までカーソルを動かしても,まだ以下のようにマウスパッドに余裕があります。

f:id:jnobuyuki:20180315142112j:plain

そんなにいいの?思い込みでは?

マウスパッドって,おまけで付いていたり,100円均一でも購入できるものです。でも,あえてそれなりの金額をはらって入手したからには,思い込みではなく,本当に作業効率に役立つものであってほしいです。そこでちょっとした実験をしてみることにしました。

マウスパッドの使用有無で騒音の大きさは違う?

GoogleのSciece Journalというアプリを使うと,音の大きさや高さや加速度などスマホに搭載されているセンサを気軽に記録できます。今回は,このアプリを机の上に置いた状態で,マウスパッドを使用したときと使用しないときの作業10分間の騒音を記録してみました。

結果はどうだった?

こちらがマウスパッドなしのときの騒音の大きさです。
f:id:jnobuyuki:20180321154913j:plain
そしてこちらがマウスパッドを使用した場合の騒音の大きさです。
f:id:jnobuyuki:20180321154935j:plain

結果として,マウスパッドを使用したほうが平均値の上でも,分布の上でも騒音が少ないとわかりました。マウスパッドなしだと60dBに達する時間がかなりあるのですが,どうやら60dBより音が大きくなると「うるさい」と感じやすいようなので,自分の直観とよく合っています。

というわけでおすすめ

スペックや実験の結果を考えても,このマウスパッドはデスクトップユーザーにおすすめできます。

教育に新しい技術を導入することのメリット・デメリット

今回は,最近考えていることを書きたいと思います。教育に新しいICTを取り入れるときに気をつけたほうが良いことについてです。

新しい技術はどんどん取り入れれば良いのか?

私は新しいものが大好きです。これまでにできなかったこと,難しかったことが新技術の導入によって,簡単に出来るようになる。しかもそれに自分が関われることは何よりうれしいことです。ただ最近,新しい技術が作られるスピードがどんどん増しているように感じます。こうなってくると,追いつかないのは人間のほうです。新しい技術がどんなものであるのか?そしてどのように使うとその技術の効果を最大にできるのかを考えて,実践し始めたと思ったら,またさらに新しい技術が出てきている。こうなると,実践して,その技術による便益を受けられるというメリットと学習や導入にコストがかかるというデメリットのバランスを考える必要が出てくるでしょう。今の社会はまさにそんな時代になっていると感じます。また,技術として新しいものが出ていなくても,企業間の買収などによって,サポートが受けられなくなったり,利用自体が難しくなるようなことがあります。こんなことを考えれば,新しい技術は,安易に導入するのではなく,一歩引いて動向を伺うくらいの気持ちが必要かもしれません。

「枯れた技術」の導入

では古い技術はどうでしょう。もちろん,古い技術のままでは,できないことが出てくると思います。その一方で,古い技術をトラブルに対応の済んだ「安定した技術」と考えることもできます。そのような技術のことを「枯れた技術」というそうです。*1教育では,生徒さんや学生さんが安心して,技術を利用することが大事です。そして,教える立場にとっても,トラブルへの対処は少ないほど良いはずです。その意味では,「枯れた技術」を利用するほうが安全かもしれません。

*1:これと対比されるのがレガシー技術です。この場合は,古くてできないことが多いというようなネガティブな意味で使われることがあるようです。

R言語でデータを保存する

今回もR言語のちょっとした使用上のヒントを投稿します。

save関数でデータを保存

R言語を利用してデータ解析をする際,解析が長くなると一時的に保存したファイルを永続的に保存,または他の人と共有したことがあります。そのような場合に,データオブジェクトとして保存されているものをファイル形式に変換して保存する方法があります。R言語での使用だけで良ければ.rdaファイルというバイナリ形式のファイルがあります*1

使用方法はとても単純で,保存したいオブジェクトとファイル名を引数に取るだけです。

data <- seq(1:10)

save(data, file = "data.rda")

load関数でファイルを読み込み

save関数で保存した.rdaファイルはload関数で読み込めます。

load("data.rda")

注意:データフレームオブジェクト名とファイル名は揃えたほうが良い

save関数はとても便利です。しかし,注意したい点が1つあります。それは,データオブジェクト名とファイル名が必ずしも一致しないことです。例えばdatasetというデータフレームオブジェクトをdataset.rdaファイルとして保存すれば良いのですが,data.rdaという名前で保存することもできます。この場合,load関数の引数はファイル名にする必要があるので,data.rdaを利用します。しかし,実際に読み込まれたデータオブジェクトはdatasetという名前です。ここで読み込んだはずのデータオブジェクトがないと思うかもしれないのですが,それは,ファイル名で検索しているからで,保存したデータオブジェクトの名前で探さなければ見つかりません。なので,データフレームオブジェクトを保存する場合にはファイル名とデータオブジェクト名を揃えておいたほうが良いでしょう。

*1:他のアプリケーションで使用したければwrite.table関数でテキストファイルとして保存する方法もあります

R言語での計算の繰り返しのバリエーション

R言語は,統計解析に用いられるプログラミング言語です。プログラミング言語なので,他のプログラミング言語にあるような繰り返し計算や条件分岐などを行えます。今回は,R言語における繰り返し計算の方法をまとめます。

for関数による繰り返し

for関数では,繰り返しの回数を()の中で指定し,{}の計算を繰り返し行います。()内は 添字をその範囲を次のように指定します。

for (添字 in 開始番号:終了番号)

例えば1から10までの数をすべて足し合わせるなら(通常はsum関数を使えば良いです)次のように繰り返し計算で求められます。

res <- 0 #結果を示すためのオブジェクト
for (i in 1:10){
    res <- res + i #累積した和にi番目の数を加える
}
print(res)

while関数による繰り返し

while関数では()内に計算の繰り返しを終了する条件を記入します。この条件が満たされるまで{}内の計算が繰り返されます。先程の1から10までの数をすべて足し合わせる計算をwhile関数では次のようにかけます。

res <- 0 #結果を示すためのオブジェクト
x <- 1 #条件判定の基準となるオブジェクト

while (x <= 10) {
    res <- res + x
    x <- x + 1
}
print(res)

repeatによる繰り返し

repeatを用いる方法もあります。repeatには()がつかないので,関数と呼んでいいのかわからないのですが,とにかく条件を満たすまで計算を繰り返します。繰り返し終了の条件判定も{}内で行う点がwhile関数と異なります。

res <- 0 #結果を表示するためのオブジェクト
x <- 1 #条件判定の基準となるオブジェクト
repeat{
 res <- res + x
   x <- x + 1
   if (x > 10) break
}
print(res)

今回repeatによる方法を初めて知ったのですが,これを使うといろいろな条件で繰り返し計算を終了できるので便利ですね。