プログラミング演習tohhiro/Programming...Kaggle...

68
プログラミング演習 第一回

Transcript of プログラミング演習tohhiro/Programming...Kaggle...

Page 1: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

プログラミング演習第一回

Page 2: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

• Rとは?

• Rの基本操作

本日の講義内容

Page 3: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

Rとは?

統計解析のためにデザインされたプログラミング言語

オープンソースのフリーソフトウェア (無料)

マルチプラットフォーム(Windows, Mac, LinuxなどのOSで同一の作業ができる)

世界各地のRユーザが開発したプログラム(パッケージ)がCRAN (The Comprehensive R Archive Network)を介して配信されている。 (最新の手法が無料で利用可能)

生物系、特にゲノムワイドなデータの解析のパッケージも充実している (Bioconductor)

Page 4: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

2015年7月20日IEEE Spectrum 2019年 プログラミング言語人気ランキング

(出典:IEEE Spectrum)

Page 5: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

KaggleKaggleとは機械学習エンジニア同士を繋げるプラットフォーム世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い合ったりしている

Kaggleのサイト上ではさまざまな言語で書かれたコードが公開されているが、コンペで上位に入賞する質の高いコードは、R言語で書かれていることが多い

グラフはkaggleのカーネル(公開コード)でPythonとR言語が使われた頻度を示したものKaggleによると2016年以前はデータサイエンティストの中で最も使われていたのはR言語だったが、2016年を境にPythonが急激に伸びている

グラフで注目するべきは「R言語は使われ続けている」という点予測精度が優れている手法やデータ分析で役に立つコードの多くがR言語で公開されている。

https://www.codexa.net/what-is-r/

Page 6: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

R言語とPythonを比較

習得の難易度を比較Pythonは、初心者でも覚えやすい言語R言語は習得の難易度が高め

給料による比較アメリカでのPythonプログラマーの平均給料は93,139ドルに対してR言語プログラマーの平均給料は115,531ドルR言語は専門性が高い言語ですので、給料も他言語と比べて高くなる傾向にある

データの可視化・グラフ作成データの可視化ではR言語がPythonよりも優れている

https://www.codexa.net/what-is-r/

Page 7: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

Rとは

統計解析のためにデザインされたプログラミング言語

オープンソースのフリーソフトウェア (無料)

マルチプラットフォーム(Windows, Mac, UNIXなどのOSで同一の作業ができる)

世界各地のRユーザが開発したプログラム(パッケージ)がCRAN (The Comprehensive R Archive Network)を介して配信されている。 (最新の手法が無料で利用可能)

生物系、特にゲノムワイドなデータの解析のパッケージも充実している (Bioconductor)

Page 8: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

PubMedで、”R”、”package”, “Bioinformatics”, “2019”で検索340 件 検出 (2019年9月17日)

Rは生命科学の分野でも広く利用されている

Page 9: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

◎ 実験の研究室に配属されたとしても実験結果の統計解析は必要

Rが使えれば、得られた実験データの解析を容易に行える。

◎ データサイエンティストが求められる現在、Rの習得は就職に有利(かも?)

◎ プログラミングは手を動かして、実際に操作しながら覚えるのが一番

R:統計やデータ分析の専門家なら、R言語だ。グーグルはR言語の大ファンだと公言している。数字を扱う専門家たちが活用しているからだ。

Page 10: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

藤 担当 最初の5回 (講義4回+試験)Rの処理とRによるプログラミングの基本を学びます。5回目に試験を行います。

試験は、藤、三浦、吉野それぞれの担当の最後の回で行われ、その合計で成績の評価を行います。

テキストは「Rで学ぶデータ・プログラミング入門」ただし、藤が担当する前半部分については、初心者向きに書かれていないので資料を配布する

Page 11: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

• Rとは?

• Rの基本操作

本日の講義内容

Page 12: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

(1) セッションの開始(2)四則演算、変数への代入(3)数学関数(4)整数、実数の処理に関する関数(5) グラフィクス(6) ベクトルと行列(7) help関数その他(8)終了処理

Rの基本操作

Page 13: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

(1) セッションの開始(2)四則演算、変数への代入(3)数学関数(4)整数、実数の処理に関する関数(5) グラフィクス(6) ベクトルと行列(7) help関数その他(8)終了処理

Rの基本操作

Page 14: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

アイコンをクリック

Page 15: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

コンソール画面が立ち上がる

プロンプト(>)の後に入力

Page 16: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

(1) セッションの開始(2)四則演算、変数への代入(3)数学関数(4)整数、実数の処理に関する関数(5) グラフィクス(6) ベクトルと行列(7) help関数その他(8)終了処理

Rの基本操作

Page 17: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> 3 + 4[1] 7> 2.3-2.1[1] 0.2> 3.14*2.0[1] 6.28> 3/4[1] 0.75> 1.5^3[1] 3.375> 3.2%%3[1] 0.2> 9%/%4[1] 2

プロンプトの後ろにコマンドを入力してEnterを押すと実行加

剰余

切り捨て

Page 18: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

変数への値の代入と演算

> a <- 2> a[1] 2> print(a)[1] 2> b <- 9.7> b^a[1] 94.09> c <- b^a + b/a> c[1] 98.94> b/a[1] 4.85

変数名は、Rの関数名などとして予約されているものでなければ、半角英数字を使って自由に指定できるただし、変数名を数字ではじめてはいけない大文字、小文字は区別される

> a <- 2> A <- 3> print(a)[1] 2> print(A)[1] 3> ips <- 5> a.Boss <- 3> ips <- ips + a.Boss> ips[1] 8

Page 19: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

変数には、数字だけでなく文字列も代入できる

> a <- "atgcttgacccgtaat"> aaseq <- "MLKPAQWELLTGRS"> a[1] "atgcttgacccgtaat"> aaseq[1] "MLKPAQWELLTGRS"> greeting <- "Hello World!"> print(greeting)[1] "Hello World!"

Page 20: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

(1) セッションの開始(2)四則演算、変数への代入(3)数学関数(4)整数、実数の処理に関する関数(5) グラフィクス(6) ベクトルと行列(7)簡単な統計処理(8) help関数その他(9)終了処理

Rの基本操作

Page 21: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> sqrt(2)[1] 1.414214> exp(2)[1] 7.389056> exp(1)[1] 2.718282> 2.718282^2[1] 7.389057> sqrt(exp(2))[1] 2.718282

sqrt 平方根

exp 指数関数

関数の引数に関数をいれることもできる

Page 22: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> log10(100)[1] 2> log(exp(20))[1] 20> log2(2^10)[1] 10

log10 常用対数 底が10

log 自然対数 底がe

log2 対数 底が2

Rでは円周率がpiとして定義されている

> pi[1] 3.141593

Page 23: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> sin(pi/2)[1] 1> cos(pi/2)[1] 6.123234e-17> sin(pi)[1] 1.224647e-16> cos(pi)[1] -1> tan(0)[1] 0> tan(pi/2)[1] 1.633124e+16> sin(pi/2)/cos(pi/2)[1] 1.633124e+16

数値的に計算されるので正確には0であるが、非常に小さな値として表示

三角関数sin, cos, tan

本来、無限大になるはずだが、数値的に計算されているので大きな値として表示

6.123234e-17=6.123234×10-17

Page 24: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

Rには、その他に逆三角関数、双曲線関数なども準備されている

また、実数や整数だけでなく、複素数も取り扱うことができる

Page 25: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

(1) セッションの開始(2)四則演算、変数への代入(3)数学関数(4)整数、実数の処理に関する関数(5) グラフィクス(6) ベクトルと行列(7) help関数その他(8)終了処理

Rの基本操作

Page 26: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

絶対値の計算

> abs(-3.456)[1] 3.456> abs(4.556)[1] 4.556

符号の計算> sign(-3.456)[1] -1> sign(3.456)[1] 1> sign(abs(-4.557))[1] 1> sign(-4.557)[1] -1

Page 27: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

四捨五入

> pi[1] 3.141593> round(pi)[1] 3> round(pi,4)[1] 3.1416> round(pi,3)[1] 3.142> round(pi,2)[1] 3.14

Page 28: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> round(13115, 3)[1] 13115> round(13115, -3)[1] 13000> round(13115, -2)[1] 13100> round(13115, -1)[1] 13120

Page 29: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

切り捨て trunc最大整数 floor切り上げ ceiling

> trunc(-5.678)[1] -5> trunc(5.678)[1] 5> floor(-5.678)[1] -6> floor(5.678)[1] 5> ceiling(-5.678)[1] -5> ceiling(5.678)[1] 6

Page 30: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

Rではベクトルはc()で作成

> y <- c(9.02, 20.124, -0.998, 4.787)> y[1] 9.020 20.124 -0.998 4.787

最大、最小 max, min

> min(y)[1] -0.998> max(y)[1] 20.124

Page 31: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

(1) セッションの開始(2)四則演算、変数への代入(3)数学関数(4)整数、実数の処理に関する関数(5) グラフィクス(6) ベクトルと行列(7) help関数その他(8)終了処理

Rの基本操作

Page 32: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

plotを使い散布図を作成する。まず、plotするデータを作成する。

ここで、Rの便利な性質を利用する。

Rの関数は定数や変数だけではなく、ベクトルも引数にとれる

> x <-c(-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5)> y <- abs(x)> y[1] 5 4 3 2 1 0 1 2 3 4 5

abs(x)は、xの要素一つ一つにabsを適用したのと同じ> c(abs(-5), abs(-4), abs(-3), abs(-2), abs(-1), abs(0), abs(1),abs(2), abs(3), abs(4), abs(5))[1] 5 4 3 2 1 0 1 2 3 4 5

Page 33: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> plot(x, y)

Page 34: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> x <- c(-pi, -pi*0.75, -pi*0.5, -pi*0.25, 0, pi*0.25, pi*0.5, pi*0.75, pi)> y <- sin(x)> y[1] -1.224647e-16 -7.071068e-01 -1.000000e+00 -7.071068e-01 0.000000e+00 7.071068e-01 1.000000e+00 7.071068e-01[9] 1.224647e-16> plot(x, y)

次ページ図

もっと、間隔を細かくとって、より滑らかな曲線を描きたい。しかし、手作業で x 座標を書くのはめんどうくさい。

次の方法で解決seq ある区間を、等しい間隔で区切ったベクトルを発生させる

Page 35: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い
Page 36: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> seq(1,5,0.5)[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0> seq(3,5,1)[1] 3 4 5

seq(start, end, 間隔)

> x <- seq(-pi,pi,0.01)> x[1] -3.141592654 -3.131592654 -3.121592654 -3.111592654

…[628] 3.128407346 3.138407346

> y <- sin(x)> plot(x,y)図は次ページ

なめらかになったが、ドットで表示するのは見栄えがよくない。点を打って線でつなぎたい。

Page 37: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い
Page 38: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> plot(x,y,ty='l')

x軸のラベルをday、y軸のラベルをvariation, 全体のタイトルをSINE CURVEとする。

Page 39: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> plot(x, y, ty='l',xlab="day", ylab="variation", main="SINE CURVE")

Page 40: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

滑らかなカーブを描く別の方法 curve

curve(expr, start, stop)exprは関数を表す式

> curve(sin, -pi, pi)

Page 41: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> curve(abs, -5, 5)

> curve(5*x^2+x^3,-5,5) 式を直接書き込むこともできる

Page 42: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

生成されたグラフィクスの保存

画像ファイルの形式を、pngあるいはepsで保存したい場合グラフィクスコマンドを実行する前にpng(ファイル名)、あるいはpostscript(ファイル名)を実行

グラフィクスコマンド(plotやcurve)を実行した後に

dev.off()を実行Rを実行している作業ディレクトリ(後述)内に、画像ファイルが作成される。

Page 43: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> png("test.png")> plot(x, y, pch=23)> dev.off()quartz

2

スクリーン上にはグラフィクスは表示されない

test.pngをクリックすると図が表示される。

Page 44: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

問題3

x, yを次のように作成し、以下のプロットを実行して、出力の違いを検討しなさい

> x <- seq(-pi,pi,0.1)> y <- sin(x)> plot(x,y)> plot(x, y, pch=22)> plot(x, y, pch=23)> plot(x, y, pch=23, xlim=c(-2,1), ylim=c(-1.0, 0.5))

Page 45: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

(1) セッションの開始(2)四則演算、変数への代入(3)数学関数(4)整数、実数の処理に関する関数(5) グラフィクス(6) ベクトルと行列(7) help関数その他(8)終了処理

Rの基本操作

Page 46: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

ベクトル(vector)

> 1:50[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24[25] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48[49] 49 50> > rep(3, 12) # 3を12回繰り返す[1] 3 3 3 3 3 3 3 3 3 3 3 3> > rep(c(5,7), 2) # 5と7を2回繰り返す[1] 5 7 5 7>> rep(3:5, 1:3) # 3を1回、4を2回、5を3回繰り返す[1] 3 4 4 5 5 5> > x <- 1:50> x[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41[42] 42 43 44 45 46 47 48 49 50> x <- seq(1,50)> x[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41[42] 42 43 44 45 46 47 48 49 50

c(),seq以外の方法

Page 47: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> x <- c(2,4.5,1.9,1.1,3.3)> x[1] 2.0 4.5 1.9 1.1 3.3> y <- c(4.1,5.5, 1,2.1,2.2)> y[1] 4.1 5.5 1.0 2.1 2.2> length(x) ベクトルのサイズ[1] 5> length(y)[1] 5> z <- 5*x ベクトルの実数倍> z[1] 10.0 22.5 9.5 5.5 16.5> x %*% y ベクトルの内積

[,1][1,] 44.42

Page 48: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> x[1] ベクトルxの要素1を参照[1] 2> y[2] ベクトルyの要素1を参照[1] 5.5> x[1]*y[1]+x[2]*y[2]+x[3]*y[3]+x[4]*y[4]+x[5]*y[5][1] 44.42> w <- x*y ベクトルの積> w[1] 8.20 24.75 1.90 2.31 7.26> x[1]*y[1][1] 8.2> x[5]*y[5][1] 7.26> sum(x*y) ベクトルの和[1] 44.42> sum(x)[1] 12.8> sum(y)[1] 14.9

Page 49: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> x <- c(2,9,1,4,3,6,7,8,4,5,2)> length(x)[1] 11> rev(x) ベクトルの反転[1] 2 5 4 8 7 6 3 4 1 9 2

> x[c(3:5)] ベクトルの要素3から要素5を取り出したベクトル[1] 1 4 3> x[c(2,5,10)] ベクトルの要素2,5,10を取り出したベクトル[1] 9 3 5> x[-c(2,5,10)] ベクトルの要素2,5,10を除いたベクトル[1] 2 1 4 6 7 8 4 2> x[x<4] ベクトル中、4より小さい要素のみを取り出す[1] 2 1 3 2

Page 50: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

行列(matrix)> matrix(1:6)

[,1][1,] 1[2,] 2[3,] 3[4,] 4[5,] 5[6,] 6>> matrix(1:6, ncol=3)

[,1] [,2] [,3][1,] 1 3 5[2,] 2 4 6>> matrix(1:6, ncol=3, byrow=TRUE)

[,1] [,2] [,3][1,] 1 2 3[2,] 4 5 6> > matrix(1:6, nrow=2, byrow=TRUE)

[,1] [,2] [,3][1,] 1 2 3[2,] 4 5 6

行列は関数matrixを用い、ベクトルをおりたたんで生成

Page 51: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> x <- matrix(c(1,9,2,8,3,7,4,6), ncol=4)> x

[,1] [,2] [,3] [,4][1,] 1 2 3 4[2,] 9 8 7 6> x <- matrix(c(1,9,2,8,3,7,4,6), ncol=4, byrow=TRUE)> x

[,1] [,2] [,3] [,4][1,] 1 9 2 8[2,] 3 7 4 6

Page 52: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> Z <- matrix(1:6, ncol=3)>> dim(Z) # 行列のサイズ[1] 2 3>> ncol(Z) # 列の数[1] 3>> nrow(Z) # 行の数[1] 2>> Z[1,2] # 要素の取り出し[1] 3>> Z[1,] # 行の取り出し[1] 1 3 5>> Z[,2] # 列の取り出し[1] 3 4> > length(Z) # 全要素の数[1] 6

1 3 52 4 6

Page 53: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> x <- matrix(c(1,2,3,2,4,5,3,5,6),ncol=3)> x

[,1] [,2] [,3][1,] 1 2 3[2,] 2 4 5[3,] 3 5 6> y <- matrix(1:9,ncol=3)> y

[,1] [,2] [,3][1,] 1 4 7[2,] 2 5 8[3,] 3 6 9> x %*% y ベクトルの内積

[,1] [,2] [,3][1,] 14 32 50[2,] 25 58 91[3,] 31 73 115

Page 54: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> x <- matrix(c(1,2,3,2,4,5,3,5,6),ncol=3)> x

[,1] [,2] [,3][1,] 1 2 3[2,] 2 4 5[3,] 3 5 6> y <- matrix(1:9,ncol=3)> y

[,1] [,2] [,3][1,] 1 4 7[2,] 2 5 8[3,] 3 6 9> x %*% y

[,1] [,2] [,3][1,] 14 32 50[2,] 25 58 91[3,] 31 73 115> det(x)[1] -1> det(y)[1] 0

行列の積

行列式

Page 55: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> a <- solve(x)> b <- solve(y)以下にエラー solve.default(y) : Lapack routine dgesv: システムは正確に特異です: U[3,3] = 0

> a %*% x[,1] [,2] [,3]

[1,] 1 0 0.000000e+00[2,] 0 1 -8.881784e-16[3,] 0 0 1.000000e+00> x %*% a

[,1] [,2] [,3][1,] 1 -4.440892e-16 2.220446e-16[2,] 0 1.000000e+00 4.440892e-16[3,] 0 0.000000e+00 1.000000e+00

行列式の計算

※ yの行列式は0なので、逆行列が求められずエラー※ x と aの積は単位行列になるはずだが、数値的に求められるために小さな値がはいる

Page 56: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> t(x)[,1] [,2] [,3]

[1,] 1 2 3[2,] 2 4 5[3,] 3 5 6> t(y)

[,1] [,2] [,3][1,] 1 2 3[2,] 4 5 6[3,] 7 8 9> eigen(x)$values[1] 11.3448143 0.1709152 -0.5157295

$vectors[,1] [,2] [,3]

[1,] -0.3279853 0.5910090 0.7369762[2,] -0.5910090 -0.7369762 0.3279853[3,] -0.7369762 0.3279853 -0.5910090

転置行列

固有値と固有ベクトル

※ yの行列式は0なので固有値問題は解けない

Page 57: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

(1) セッションの開始(2)四則演算、変数への代入(3)数学関数(4)整数、実数の処理に関する関数(5) グラフィクス(6) ベクトルと行列(7) help関数その他(8)終了処理

Rの基本操作

Page 58: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

help関数

Rの関数の使い方やオプションを知りたい時にはhelp関数が使える。

help(関数名)

-piからpiまでの区間に対するサイン曲線をcurveで描きたい。その際、xの表示区間を-pi/2からpi/3までに限定し、X軸にはラベルとしてRegion, Y軸にはラベルとしてy=sin(x)とつけたい。どのようにオプションをつけたら良いか?

> help(curve)

を実行

Page 59: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

新しいウィンドウが開き、curveの使い方の説明が表示される

ここが関係ありそう

Page 60: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

> curve(sin,-pi,pi,xlim=c(-pi/2,pi/3),xlab="Region",ylab="y=sin(x)")

Page 61: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

親切な人がRの使い方をweb上にあげてくれています。helpよりもググった方が早い

curve R ラベル で検索

Page 62: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

いくつかのサイトを見ると、このページにたどりついた

Page 63: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

あるいは最初からこのサイトを調べる

Page 64: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

(1) セッションの開始(2)四則演算、変数への代入(3)数学関数(4)整数、実数の処理に関する関数(5) グラフィクス(6) ベクトルと行列(7)簡単な統計処理(8) help関数その他(9)終了処理

Rの基本操作

Page 65: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

関数quit()で終了

“保存しない”を押して終了してから、再度Rを起動

Page 66: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

①前のセッションでAには数字、aには文字列が代入されていたが記憶されていない

② 改めてAとbに数字を代入してから終了

③今回は「保存」を選択して終了その後にRを再起動

Page 67: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

Aとbという変数が存在し、代入された値が記憶されている。

Page 68: プログラミング演習tohhiro/Programming...Kaggle Kaggleとは機械学習エンジニア同士を繋げるプラットフォーム 世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い

Rを独習したい人 (有料サイトも含まれているので注意)http://paiza.hatenablog.com/entry/2015/06/04/初心者でもほぼ無料でR言語を勉強できるコンテン