機械学習/Rで機械学習する
をテンプレートにして作成
開始行:
*はじめに [#a319abfd]
この資料は、「基礎から学ぶ実践データサイエンス」の第5週「...
工学研究科情報工学専攻と生命健康科学研究科生命医科学専攻...
#html{{
<a href="https://www.amazon.co.jp/dp/4320057082?&linkCode...
}}
*準備 [#ma119aa6]
Rのインストールについては、次のページを見てください。
-[[MacでRを使う>機械学習/MacでRを使う]]
-[[WindowsでRを使う>機械学習/WindowsでRを使う]]
ここでは、標準で使用できる''irisデータセット''を使います。
#geshi(rsplus){{
> data(iris)
}}
このデータセットは、アヤメの種類 (Species) をがく片の長さ...
長さと幅は連続値、種類はsetosa, versicolor, virginicaのい...
このデータセットには、setosa, versicolor, virginicaという...
ランダムに10個のデータを選択して、見てみましょう。
#geshi(rsplus){{
> iris[sort(sample(1:150,10)),]
Sepal.Length Sepal.Width Petal.Length Petal.Width ...
4 4.6 3.1 1.5 0.2 ...
22 5.1 3.7 1.5 0.4 ...
65 5.6 2.9 3.6 1.3 ver...
97 5.7 2.9 4.2 1.3 ver...
100 5.7 2.8 4.1 1.3 ver...
108 7.3 2.9 6.3 1.8 vi...
116 6.4 3.2 5.3 2.3 vi...
122 5.6 2.8 4.9 2.0 vi...
136 7.7 3.0 6.1 2.3 vi...
146 6.7 3.0 5.2 2.3 vi...
}}
*機械学習 [#va675044]
AIにおいては、「あるタスクについて、評価尺度 [math]E[/mat...
データサイエンスにおいては、もう少し簡単に、「入力 [math]...
与えられた事例の集合 [math]D[/math] に''出力 [math]y[/mat...
上のirisデータセットの場合、Sepal.Length, Sepal.Width, Pe...
*教師なし学習 [#l50b13ac]
教師なし学習の代表的な手法は、与えられた事例をいくつかの...
クラスタリングの代表的な手法として、''階層クラスタリング'...
階層クラスタリングの代表的な方法の一つである''凝集型階層...
それから、最も近い(似ている)クラスター同士を結合してよ...
これを全てのクラスターが一つに結合されるまで繰り返します。
Rで階層クラスタリングを用いるには、''hclust''関数を用いま...
hclust関数の引数には距離行列を与えます。
距離行列は、''dist''関数で求めることができます。
そこで、まず、irisデータのSepal.Length, Sepal.Width, Peta...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
}}
この距離行列を用いて、階層クラスタリングを行います。
#geshi(rsplus){{
> hc <- hclust(d)
}}
結果を''plot''関数を用いてプロットすると''デンドログラム'...
#geshi(rsplus){{
> plot(hc, labels=iris[,5], xlab="Iris")
}}
#ref(hc.png,nolink,33%)
デンドログラムを見ると、どのクラスターが結合したのかがわ...
距離尺度とクラスターを結合する方法にはいくつかの方法があ...
距離尺度には ''ユークリッド距離'' (''Euclidean distance''...
''Ward''法は、クラスター[math]C_1, C_2[/math]を結合してク...
\[ d(C_1, C_2) = {\mathrm E}(C_1 \cup C_2) - {\mathrm E}(...
\[ {\mathrm E}(C_i) = \sum_{{\bf x} \in C_i} (d({\bf x}, ...
Ward法を用いるには、hclust関数にオプション''method="ward....
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="ward.D")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_ward.png,nolink,33%)
**教師あり学習 [#zba9a664]
出力 [math]y[/math] が与えられる教師あり学習において、''[...
**回帰分析 [#z660af16]
***単回帰分析 [#m24ab218]
説明したい値を''目的変数''といい、目的変数を説明するため...
統計の分野では、目的変数を''従属変数''、説明変数を''独立...
まず、説明変数が1つの''単回帰''(single linear regression...
つまり、モデルが次のような式で表される直線をデータから求...
\[\hat{y} = \beta_0 + \beta_1 x_1\]
ここで、[math]\hat{y}[/math]がモデルによる''予測値''、[ma...
ある観測値 [math](x_i, y_i)[/math] に対して、モデルの予測...
\[ y_i - \hat{y_i} = y_i - (\beta_0 + \beta_1 x_{i, 1}) \]
線形回帰では、''残差の二乗の和''を最小化するような係数と...
つまり、単回帰では、[math]N[/math] 個の観測データに対して...
(求め方の説明は省きます。)
\[ \sum_{i=1}^N \left(y_i - (\beta_0 + \beta_1 x_{i,1})\r...
例として、がくの長さ(Petal.Length)を横軸、花びらの長さ...
#geshi(rsplus){{
plot(iris$Sepal.Length, iris$Petal.Length)
}}
#ref(iris_single_rawdata.png,nolink,75%)
どうやら、花びらの長さとがくの長さの間には正の相関(一方...
そこで、花びらの長さ(Sepal.Length)を [math]x_1[/math](...
Rでは、モデルの式を、記号''~''を使って「目的変数 ~ 説明変...
したがって、目的変数 [math]y[/math] をがくの長さ(Petal.L...
#geshi(rsplus){{
y <- iris$Petal.Length
x1 <- iris$Sepal.Length
}}
線形回帰は、標準で用意されている''lm関数''にモデル式を入...
#geshi(rsplus){{
iris.sgl <- lm(y ~ x1)
}}
学習された結果を表示してみると、次のようになります。
#geshi(rsplus){{
iris.sgl
}}
#geshi(rsplus){{
Call:
lm(formula = y ~ x1)
Coefficients:
(Intercept) x1
-7.101 1.858
}}
Coefficientsは係数を表し、Interceptは定数項の値(切片)を...
つまり、花びらの長さを [math]x_1[/math]、がくの長さを [ma...
\[ y = -7.101 + 1.858 x_1 \]
学習された単回帰モデルを図示します。
#geshi(rsplus){{
plot(x1, y)
abline(iris.sgl)
}}
#ref(iris_single_model.png,nolink,75%)
学習されたモデルを''summary関数''に渡すと、モデルに関する...
#geshi(rsplus){{
summary(iris.sgl)
}}
#geshi(rsplus){{
Call:
lm(formula = y ~ x1)
Residuals:
Min 1Q Median 3Q Max
-2.47747 -0.59072 -0.00668 0.60484 2.49512
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -7.10144 0.50666 -14.02 <2e-16 ***
x1 1.85843 0.08586 21.65 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ...
Residual standard error: 0.8678 on 148 degrees of freedom
Multiple R-squared: 0.76, Adjusted R-squared: 0.7583
F-statistic: 468.6 on 1 and 148 DF, p-value: < 2.2e-16
}}
''Residuals''は、残差の最小値、中央値、最大値、四分位数を...
''Coefficients''は、''切片'' (Intercept) [math]\beta_0[/...
また、それぞれの推定値が 0 であるという帰無仮説に対するt...
p値が0.05を超えている場合は、その説明変数は有意水準5%で統...
''Multiple R-squared''は、''決定係数''で、このモデルがど...
単回帰では説明変数を1つしか使いませんが、説明変数を複数使...
''Adjusted R-squared''は、''自由度調整済み決定係数''で、...
説明変数の数が異なるモデルを比較するときには、自由度調整...
最後に、係数が全て 0 であるという帰無仮説に対するF検定の'...
p値が0.05を超えている場合は、このモデルは有意水準5%で統計...
次に、予測誤差を視覚化するため、それぞれのデータについて...
予測値は''predict関数''で求めることができます。
#geshi(rsplus){{
plot(y, predict(iris.sgl))
abline(a=0,b=1)
}}
#ref(iris_single_errors.png,nolink,75%)
この予測がどのくらい良いのかを表すために、''平均二乗誤差'...
\[\textit{MSE} = \frac{1}{N}\sum_{i=1}^{N} \left(y_i - (\...
#geshi(rsplus){{
mean((y - predict(iris.sgl))**2)
}}
#geshi(rsplus){{
[1] 0.743061
}}
***重回帰分析 [#id6e977a]
説明変数が複数ある線形回帰を''重回帰''(multiple linear r...
重回帰のモデルは次のような式で表されます。
\[y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta...
ここで、[math]\beta[/math]と[math]\bf{x}[/math]は、それぞ...
また、単回帰のときと同様に、次式で表される二乗誤差の総和...
\[\sum_{i=1}^N \left(y_i - (\beta_0 + \beta^\mathrm{T}\bf...
ここでは、がくの長さ(Petal.Length)を目的変数 [math]y[/m...
#geshi(rsplus){{
y <- iris$Petal.Length
x1 <- iris$Sepal.Length
x2 <- iris$Sepal.Width
x3 <- iris$Petal.Width
}}
説明変数が複数あるときは、モデルを表すときにそれぞれの変...
ここでは、「y ~ x1+x2+x3」となります。
単回帰と同じように、''lm関数''を用いてモデルを学習します。
#geshi(rsplus){{
iris.mult <- lm(y ~ x1+x2+x3)
iris.mult$coefficients
}}
#geshi(rsplus){{
(Intercept) x1 x2 x3
-0.2627112 0.7291384 -0.6460124 1.4467934
}}
単回帰と同じように、学習された式は次のように書けます。
\[ y = -0.2627112 + 0.7291384 x_1 - 0.6460124 x_2 + 1.446...
単回帰と同じように、学習されたモデルを''summary関数''に渡...
#geshi(rsplus){{
summary(iris.mult)
}}
#geshi(rsplus){{
Call:
lm(formula = y ~ x1 + x2 + x3)
Residuals:
Min 1Q Median 3Q Max
-0.99333 -0.17656 -0.01004 0.18558 1.06909
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.26271 0.29741 -0.883 0.379
x1 0.72914 0.05832 12.502 <2e-16 ***
x2 -0.64601 0.06850 -9.431 <2e-16 ***
x3 1.44679 0.06761 21.399 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ...
Residual standard error: 0.319 on 146 degrees of freedom
Multiple R-squared: 0.968, Adjusted R-squared: 0.9674
F-statistic: 1473 on 3 and 146 DF, p-value: < 2.2e-16
}}
重回帰分析の場合はモデルが視覚化しにくいので、予測誤差だ...
#geshi(rsplus){{
plot(y, predict(iris.mult))
abline(a=0,b=1)
}}
#ref(iris_multiple_errors.png,nolink,75%)
単回帰と同様に、平均二乗誤差を求めます。
\[\textit{MSE} = \frac{1}{N} \sum_{i=1}^N (y_i - (\beta_0...
#geshi(rsplus){{
mean((y - predict(iris.mult))**2)
}}
#geshi(rsplus){{
[1] 0.09901965
}}
単回帰の場合よりも誤差がかなり小さくなっていることがわか...
**カテゴリー分析 [#l8da0721]
出力 [math]y[/math] が離散値(カテゴリー)であるカテゴリ...
Rで決定木学習を行うには、''tree''パッケージ((Breiman L., ...
''install.packages''コマンドを入力すると,パッケージをダ...
#geshi(rsplus){{
install.packages("tree")
library(tree)
}}
''決定木学習''は、説明変数に対する条件を用いて事例集合を...
実物を見た方が理解しやすいので早速決定木を学習します。
まず、''tree''コマンドを用いて決定木を学習します。
#geshi(rsplus){{
iris.tree <- tree(Species ~ ., iris)
}}
ここで、第1引数の「Species ~ .」はモデル式、第2引数の「ir...
モデル式は「目的変数 ~ 説明変数」という形で表現し、説明変...
したがって、ここでは、irisデータセットのSpeciesを目的変数...
次に、学習された決定木を表示します。
#geshi(rsplus){{
iris.tree
}}
#geshi(rsplus){{
node), split, n, deviance, yval, (yprob)
* denotes terminal node
1) root 150 329.600 setosa ( 0.33333 0.33333 0.33333 )
2) Petal.Length < 2.45 50 0.000 setosa ( 1.00000 0.0...
3) Petal.Length > 2.45 100 138.600 versicolor ( 0.0000...
6) Petal.Width < 1.75 54 33.320 versicolor ( 0.0000...
12) Petal.Length < 4.95 48 9.721 versicolor ( 0.0...
24) Sepal.Length < 5.15 5 5.004 versicolor ( 0....
25) Sepal.Length > 5.15 43 0.000 versicolor ( 0...
13) Petal.Length > 4.95 6 7.638 virginica ( 0.000...
7) Petal.Width > 1.75 46 9.635 virginica ( 0.00000...
14) Petal.Length < 4.95 6 5.407 virginica ( 0.000...
15) Petal.Length > 4.95 40 0.000 virginica ( 0.00...
}}
テキストでは分かりにくいので、図にします。
#geshi(rsplus){{
plot(iris.tree)
text(iris.tree)
}}
#ref(iris_decision_tree.png,nolink,67%)
一番上が''根''(root)と呼ばれます。
根から''枝''(branch)が下へと伸び、''節''(node)で分岐...
節は''条件''に対応します。
枝の先端が''葉''(leaf)で、葉はカテゴリー(ラベル)に対...
最初に、根の条件「Petal.Lengthの値が2.45より小さいか」に...
Petal.Lengthの値が2.45よりも小さい事例は左に、そうでない...
右に振り分けられた事例は、次に、2番目の条件「Petal.Width...
Petal.Widthの値が1.75よりも小さい事例は左に、そうでない事...
ここで右に振り分けられた事例は、「Petal.Lengthの値が2.45...
このように、決定木は、''論理積''(かつ)で結合した条件を...
先に表示したテキストで見てみましょう。
最初の条件で分割する前の集合は ''1)'' です。
最初のrootのところは条件を表しますが、ここでは条件がない...
150はこの集合に含まれる事例の数、239.600はこの集合に含ま...
そしてsetosaはこの集合に振り分けられた事例に対する予測ラ...
( 0.33333 0.33333 0.33333 )は、setosa, versicolor, virgin...
最初の条件は「Petal.Length < 2.45」です。
この条件に当てはまる事例の集合が ''2)'' で、そうでない事...
このような分割が葉に至るまで続きます。
ここで、図の右下の条件を見ると、「Petal.Length < 4.95」と...
同じように、左下の条件でも左右ともversicolorになっていま...
前者の集合は 7)、後者の集合は 12) です。
そこで、この条件を決定木から取り除きます。
これを''枝刈り''といいます。
枝刈りをするには、''snip.tree''関数を使って、nodeオプショ...
#geshi(rsplus){{
iris.tree.snip <- snip.tree(iris.tree, nodes=c(7,12))
plot(iris.tree.snip)
text(iris.tree.snip)
}}
#ref(iris_decision_tree_pruned.png,nolink,67%)
#geshi(rsplus){{
iris.tree.snip
}}
#geshi(rsplus){{
node), split, n, deviance, yval, (yprob)
* denotes terminal node
1) root 150 329.600 setosa ( 0.33333 0.33333 0.33333 )
2) Petal.Length < 2.45 50 0.000 setosa ( 1.00000 0.0...
3) Petal.Length > 2.45 100 138.600 versicolor ( 0.0000...
6) Petal.Width < 1.75 54 33.320 versicolor ( 0.0000...
12) Petal.Length < 4.95 48 9.721 versicolor ( 0.0...
13) Petal.Length > 4.95 6 7.638 virginica ( 0.000...
7) Petal.Width > 1.75 46 9.635 virginica ( 0.00000...
}}
学習した決定木を使って、カテゴリー(Species)が未知のデー...
まず、''data.frame''関数を用いてデータ・フレームを作成し...
#geshi(rsplus){{
testdata <- data.frame(
Sepal.Length=c(6.2,7.0,5.0),
Sepal.Width=c(3.3,3.3,3.5),
Petal.Length=c(6.0,4.5,1.4),
Petal.Width=c(2.4,1.4,0.3)
)
testdata
}}
#geshi(rsplus){{
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 6.2 3.3 6.0 2.4
2 7.0 3.3 4.5 1.4
3 5.0 3.5 1.4 0.3
}}
次に、''predict''関数を用いてカテゴリーを予測します。
#geshi(rsplus){{
predict(iris.tree, testdata)
}}
#geshi(rsplus){{
setosa versicolor virginica
1 0 0 1
2 0 1 0
3 1 0 0
}}
1番目の事例はvirginicaに、2番目の事例はversicolorに、3番...
また、枝刈りされた決定木を用いて予測すると次のようになり...
#geshi(rsplus){{
predict(iris.tree.snip, testdata)
}}
#geshi(rsplus){{
setosa versicolor virginica
1 0 0.02173913 0.97826087
2 0 0.97916667 0.02083333
3 1 0.00000000 0.00000000
}}
1番目の事例は97.8%の確率でvirginicaに、2.2%の確率でversic...
同様に、2番目の事例は97.9%の確率でversicolorに、2.1%の確...
3番目の事例は枝刈りしなかったときと同様に100%の確率でseto...
*まとめ [#c32b9e93]
データサイエンスにおける機械学習は、出力 [math]y[/math] ...
教師なし学習の代表的な手法はクラスタリングであり、代表的...
教師あり学習のうち、出力 [math]y[/math] が連続値(数値)...
回帰分析の代表的な手法には重回帰分析があり、カテゴリー分...
自分の分析の目的に応じて適切に手法を使い分けることが重要...
*課題 [#f3707ba5]
irisデータセットを用いて、クラスター分析、重回帰分析、決...
終了行:
*はじめに [#a319abfd]
この資料は、「基礎から学ぶ実践データサイエンス」の第5週「...
工学研究科情報工学専攻と生命健康科学研究科生命医科学専攻...
#html{{
<a href="https://www.amazon.co.jp/dp/4320057082?&linkCode...
}}
*準備 [#ma119aa6]
Rのインストールについては、次のページを見てください。
-[[MacでRを使う>機械学習/MacでRを使う]]
-[[WindowsでRを使う>機械学習/WindowsでRを使う]]
ここでは、標準で使用できる''irisデータセット''を使います。
#geshi(rsplus){{
> data(iris)
}}
このデータセットは、アヤメの種類 (Species) をがく片の長さ...
長さと幅は連続値、種類はsetosa, versicolor, virginicaのい...
このデータセットには、setosa, versicolor, virginicaという...
ランダムに10個のデータを選択して、見てみましょう。
#geshi(rsplus){{
> iris[sort(sample(1:150,10)),]
Sepal.Length Sepal.Width Petal.Length Petal.Width ...
4 4.6 3.1 1.5 0.2 ...
22 5.1 3.7 1.5 0.4 ...
65 5.6 2.9 3.6 1.3 ver...
97 5.7 2.9 4.2 1.3 ver...
100 5.7 2.8 4.1 1.3 ver...
108 7.3 2.9 6.3 1.8 vi...
116 6.4 3.2 5.3 2.3 vi...
122 5.6 2.8 4.9 2.0 vi...
136 7.7 3.0 6.1 2.3 vi...
146 6.7 3.0 5.2 2.3 vi...
}}
*機械学習 [#va675044]
AIにおいては、「あるタスクについて、評価尺度 [math]E[/mat...
データサイエンスにおいては、もう少し簡単に、「入力 [math]...
与えられた事例の集合 [math]D[/math] に''出力 [math]y[/mat...
上のirisデータセットの場合、Sepal.Length, Sepal.Width, Pe...
*教師なし学習 [#l50b13ac]
教師なし学習の代表的な手法は、与えられた事例をいくつかの...
クラスタリングの代表的な手法として、''階層クラスタリング'...
階層クラスタリングの代表的な方法の一つである''凝集型階層...
それから、最も近い(似ている)クラスター同士を結合してよ...
これを全てのクラスターが一つに結合されるまで繰り返します。
Rで階層クラスタリングを用いるには、''hclust''関数を用いま...
hclust関数の引数には距離行列を与えます。
距離行列は、''dist''関数で求めることができます。
そこで、まず、irisデータのSepal.Length, Sepal.Width, Peta...
#geshi(rsplus){{
> d <- dist(iris[,1:4])
}}
この距離行列を用いて、階層クラスタリングを行います。
#geshi(rsplus){{
> hc <- hclust(d)
}}
結果を''plot''関数を用いてプロットすると''デンドログラム'...
#geshi(rsplus){{
> plot(hc, labels=iris[,5], xlab="Iris")
}}
#ref(hc.png,nolink,33%)
デンドログラムを見ると、どのクラスターが結合したのかがわ...
距離尺度とクラスターを結合する方法にはいくつかの方法があ...
距離尺度には ''ユークリッド距離'' (''Euclidean distance''...
''Ward''法は、クラスター[math]C_1, C_2[/math]を結合してク...
\[ d(C_1, C_2) = {\mathrm E}(C_1 \cup C_2) - {\mathrm E}(...
\[ {\mathrm E}(C_i) = \sum_{{\bf x} \in C_i} (d({\bf x}, ...
Ward法を用いるには、hclust関数にオプション''method="ward....
#geshi(rsplus){{
> d <- dist(iris[,1:4])
> hc <- hclust(d, method="ward.D")
> plot(hc, labels=iris[,5], xlab="Euclidean")
}}
#ref(hc_euclidean_ward.png,nolink,33%)
**教師あり学習 [#zba9a664]
出力 [math]y[/math] が与えられる教師あり学習において、''[...
**回帰分析 [#z660af16]
***単回帰分析 [#m24ab218]
説明したい値を''目的変数''といい、目的変数を説明するため...
統計の分野では、目的変数を''従属変数''、説明変数を''独立...
まず、説明変数が1つの''単回帰''(single linear regression...
つまり、モデルが次のような式で表される直線をデータから求...
\[\hat{y} = \beta_0 + \beta_1 x_1\]
ここで、[math]\hat{y}[/math]がモデルによる''予測値''、[ma...
ある観測値 [math](x_i, y_i)[/math] に対して、モデルの予測...
\[ y_i - \hat{y_i} = y_i - (\beta_0 + \beta_1 x_{i, 1}) \]
線形回帰では、''残差の二乗の和''を最小化するような係数と...
つまり、単回帰では、[math]N[/math] 個の観測データに対して...
(求め方の説明は省きます。)
\[ \sum_{i=1}^N \left(y_i - (\beta_0 + \beta_1 x_{i,1})\r...
例として、がくの長さ(Petal.Length)を横軸、花びらの長さ...
#geshi(rsplus){{
plot(iris$Sepal.Length, iris$Petal.Length)
}}
#ref(iris_single_rawdata.png,nolink,75%)
どうやら、花びらの長さとがくの長さの間には正の相関(一方...
そこで、花びらの長さ(Sepal.Length)を [math]x_1[/math](...
Rでは、モデルの式を、記号''~''を使って「目的変数 ~ 説明変...
したがって、目的変数 [math]y[/math] をがくの長さ(Petal.L...
#geshi(rsplus){{
y <- iris$Petal.Length
x1 <- iris$Sepal.Length
}}
線形回帰は、標準で用意されている''lm関数''にモデル式を入...
#geshi(rsplus){{
iris.sgl <- lm(y ~ x1)
}}
学習された結果を表示してみると、次のようになります。
#geshi(rsplus){{
iris.sgl
}}
#geshi(rsplus){{
Call:
lm(formula = y ~ x1)
Coefficients:
(Intercept) x1
-7.101 1.858
}}
Coefficientsは係数を表し、Interceptは定数項の値(切片)を...
つまり、花びらの長さを [math]x_1[/math]、がくの長さを [ma...
\[ y = -7.101 + 1.858 x_1 \]
学習された単回帰モデルを図示します。
#geshi(rsplus){{
plot(x1, y)
abline(iris.sgl)
}}
#ref(iris_single_model.png,nolink,75%)
学習されたモデルを''summary関数''に渡すと、モデルに関する...
#geshi(rsplus){{
summary(iris.sgl)
}}
#geshi(rsplus){{
Call:
lm(formula = y ~ x1)
Residuals:
Min 1Q Median 3Q Max
-2.47747 -0.59072 -0.00668 0.60484 2.49512
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -7.10144 0.50666 -14.02 <2e-16 ***
x1 1.85843 0.08586 21.65 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ...
Residual standard error: 0.8678 on 148 degrees of freedom
Multiple R-squared: 0.76, Adjusted R-squared: 0.7583
F-statistic: 468.6 on 1 and 148 DF, p-value: < 2.2e-16
}}
''Residuals''は、残差の最小値、中央値、最大値、四分位数を...
''Coefficients''は、''切片'' (Intercept) [math]\beta_0[/...
また、それぞれの推定値が 0 であるという帰無仮説に対するt...
p値が0.05を超えている場合は、その説明変数は有意水準5%で統...
''Multiple R-squared''は、''決定係数''で、このモデルがど...
単回帰では説明変数を1つしか使いませんが、説明変数を複数使...
''Adjusted R-squared''は、''自由度調整済み決定係数''で、...
説明変数の数が異なるモデルを比較するときには、自由度調整...
最後に、係数が全て 0 であるという帰無仮説に対するF検定の'...
p値が0.05を超えている場合は、このモデルは有意水準5%で統計...
次に、予測誤差を視覚化するため、それぞれのデータについて...
予測値は''predict関数''で求めることができます。
#geshi(rsplus){{
plot(y, predict(iris.sgl))
abline(a=0,b=1)
}}
#ref(iris_single_errors.png,nolink,75%)
この予測がどのくらい良いのかを表すために、''平均二乗誤差'...
\[\textit{MSE} = \frac{1}{N}\sum_{i=1}^{N} \left(y_i - (\...
#geshi(rsplus){{
mean((y - predict(iris.sgl))**2)
}}
#geshi(rsplus){{
[1] 0.743061
}}
***重回帰分析 [#id6e977a]
説明変数が複数ある線形回帰を''重回帰''(multiple linear r...
重回帰のモデルは次のような式で表されます。
\[y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta...
ここで、[math]\beta[/math]と[math]\bf{x}[/math]は、それぞ...
また、単回帰のときと同様に、次式で表される二乗誤差の総和...
\[\sum_{i=1}^N \left(y_i - (\beta_0 + \beta^\mathrm{T}\bf...
ここでは、がくの長さ(Petal.Length)を目的変数 [math]y[/m...
#geshi(rsplus){{
y <- iris$Petal.Length
x1 <- iris$Sepal.Length
x2 <- iris$Sepal.Width
x3 <- iris$Petal.Width
}}
説明変数が複数あるときは、モデルを表すときにそれぞれの変...
ここでは、「y ~ x1+x2+x3」となります。
単回帰と同じように、''lm関数''を用いてモデルを学習します。
#geshi(rsplus){{
iris.mult <- lm(y ~ x1+x2+x3)
iris.mult$coefficients
}}
#geshi(rsplus){{
(Intercept) x1 x2 x3
-0.2627112 0.7291384 -0.6460124 1.4467934
}}
単回帰と同じように、学習された式は次のように書けます。
\[ y = -0.2627112 + 0.7291384 x_1 - 0.6460124 x_2 + 1.446...
単回帰と同じように、学習されたモデルを''summary関数''に渡...
#geshi(rsplus){{
summary(iris.mult)
}}
#geshi(rsplus){{
Call:
lm(formula = y ~ x1 + x2 + x3)
Residuals:
Min 1Q Median 3Q Max
-0.99333 -0.17656 -0.01004 0.18558 1.06909
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.26271 0.29741 -0.883 0.379
x1 0.72914 0.05832 12.502 <2e-16 ***
x2 -0.64601 0.06850 -9.431 <2e-16 ***
x3 1.44679 0.06761 21.399 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ...
Residual standard error: 0.319 on 146 degrees of freedom
Multiple R-squared: 0.968, Adjusted R-squared: 0.9674
F-statistic: 1473 on 3 and 146 DF, p-value: < 2.2e-16
}}
重回帰分析の場合はモデルが視覚化しにくいので、予測誤差だ...
#geshi(rsplus){{
plot(y, predict(iris.mult))
abline(a=0,b=1)
}}
#ref(iris_multiple_errors.png,nolink,75%)
単回帰と同様に、平均二乗誤差を求めます。
\[\textit{MSE} = \frac{1}{N} \sum_{i=1}^N (y_i - (\beta_0...
#geshi(rsplus){{
mean((y - predict(iris.mult))**2)
}}
#geshi(rsplus){{
[1] 0.09901965
}}
単回帰の場合よりも誤差がかなり小さくなっていることがわか...
**カテゴリー分析 [#l8da0721]
出力 [math]y[/math] が離散値(カテゴリー)であるカテゴリ...
Rで決定木学習を行うには、''tree''パッケージ((Breiman L., ...
''install.packages''コマンドを入力すると,パッケージをダ...
#geshi(rsplus){{
install.packages("tree")
library(tree)
}}
''決定木学習''は、説明変数に対する条件を用いて事例集合を...
実物を見た方が理解しやすいので早速決定木を学習します。
まず、''tree''コマンドを用いて決定木を学習します。
#geshi(rsplus){{
iris.tree <- tree(Species ~ ., iris)
}}
ここで、第1引数の「Species ~ .」はモデル式、第2引数の「ir...
モデル式は「目的変数 ~ 説明変数」という形で表現し、説明変...
したがって、ここでは、irisデータセットのSpeciesを目的変数...
次に、学習された決定木を表示します。
#geshi(rsplus){{
iris.tree
}}
#geshi(rsplus){{
node), split, n, deviance, yval, (yprob)
* denotes terminal node
1) root 150 329.600 setosa ( 0.33333 0.33333 0.33333 )
2) Petal.Length < 2.45 50 0.000 setosa ( 1.00000 0.0...
3) Petal.Length > 2.45 100 138.600 versicolor ( 0.0000...
6) Petal.Width < 1.75 54 33.320 versicolor ( 0.0000...
12) Petal.Length < 4.95 48 9.721 versicolor ( 0.0...
24) Sepal.Length < 5.15 5 5.004 versicolor ( 0....
25) Sepal.Length > 5.15 43 0.000 versicolor ( 0...
13) Petal.Length > 4.95 6 7.638 virginica ( 0.000...
7) Petal.Width > 1.75 46 9.635 virginica ( 0.00000...
14) Petal.Length < 4.95 6 5.407 virginica ( 0.000...
15) Petal.Length > 4.95 40 0.000 virginica ( 0.00...
}}
テキストでは分かりにくいので、図にします。
#geshi(rsplus){{
plot(iris.tree)
text(iris.tree)
}}
#ref(iris_decision_tree.png,nolink,67%)
一番上が''根''(root)と呼ばれます。
根から''枝''(branch)が下へと伸び、''節''(node)で分岐...
節は''条件''に対応します。
枝の先端が''葉''(leaf)で、葉はカテゴリー(ラベル)に対...
最初に、根の条件「Petal.Lengthの値が2.45より小さいか」に...
Petal.Lengthの値が2.45よりも小さい事例は左に、そうでない...
右に振り分けられた事例は、次に、2番目の条件「Petal.Width...
Petal.Widthの値が1.75よりも小さい事例は左に、そうでない事...
ここで右に振り分けられた事例は、「Petal.Lengthの値が2.45...
このように、決定木は、''論理積''(かつ)で結合した条件を...
先に表示したテキストで見てみましょう。
最初の条件で分割する前の集合は ''1)'' です。
最初のrootのところは条件を表しますが、ここでは条件がない...
150はこの集合に含まれる事例の数、239.600はこの集合に含ま...
そしてsetosaはこの集合に振り分けられた事例に対する予測ラ...
( 0.33333 0.33333 0.33333 )は、setosa, versicolor, virgin...
最初の条件は「Petal.Length < 2.45」です。
この条件に当てはまる事例の集合が ''2)'' で、そうでない事...
このような分割が葉に至るまで続きます。
ここで、図の右下の条件を見ると、「Petal.Length < 4.95」と...
同じように、左下の条件でも左右ともversicolorになっていま...
前者の集合は 7)、後者の集合は 12) です。
そこで、この条件を決定木から取り除きます。
これを''枝刈り''といいます。
枝刈りをするには、''snip.tree''関数を使って、nodeオプショ...
#geshi(rsplus){{
iris.tree.snip <- snip.tree(iris.tree, nodes=c(7,12))
plot(iris.tree.snip)
text(iris.tree.snip)
}}
#ref(iris_decision_tree_pruned.png,nolink,67%)
#geshi(rsplus){{
iris.tree.snip
}}
#geshi(rsplus){{
node), split, n, deviance, yval, (yprob)
* denotes terminal node
1) root 150 329.600 setosa ( 0.33333 0.33333 0.33333 )
2) Petal.Length < 2.45 50 0.000 setosa ( 1.00000 0.0...
3) Petal.Length > 2.45 100 138.600 versicolor ( 0.0000...
6) Petal.Width < 1.75 54 33.320 versicolor ( 0.0000...
12) Petal.Length < 4.95 48 9.721 versicolor ( 0.0...
13) Petal.Length > 4.95 6 7.638 virginica ( 0.000...
7) Petal.Width > 1.75 46 9.635 virginica ( 0.00000...
}}
学習した決定木を使って、カテゴリー(Species)が未知のデー...
まず、''data.frame''関数を用いてデータ・フレームを作成し...
#geshi(rsplus){{
testdata <- data.frame(
Sepal.Length=c(6.2,7.0,5.0),
Sepal.Width=c(3.3,3.3,3.5),
Petal.Length=c(6.0,4.5,1.4),
Petal.Width=c(2.4,1.4,0.3)
)
testdata
}}
#geshi(rsplus){{
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 6.2 3.3 6.0 2.4
2 7.0 3.3 4.5 1.4
3 5.0 3.5 1.4 0.3
}}
次に、''predict''関数を用いてカテゴリーを予測します。
#geshi(rsplus){{
predict(iris.tree, testdata)
}}
#geshi(rsplus){{
setosa versicolor virginica
1 0 0 1
2 0 1 0
3 1 0 0
}}
1番目の事例はvirginicaに、2番目の事例はversicolorに、3番...
また、枝刈りされた決定木を用いて予測すると次のようになり...
#geshi(rsplus){{
predict(iris.tree.snip, testdata)
}}
#geshi(rsplus){{
setosa versicolor virginica
1 0 0.02173913 0.97826087
2 0 0.97916667 0.02083333
3 1 0.00000000 0.00000000
}}
1番目の事例は97.8%の確率でvirginicaに、2.2%の確率でversic...
同様に、2番目の事例は97.9%の確率でversicolorに、2.1%の確...
3番目の事例は枝刈りしなかったときと同様に100%の確率でseto...
*まとめ [#c32b9e93]
データサイエンスにおける機械学習は、出力 [math]y[/math] ...
教師なし学習の代表的な手法はクラスタリングであり、代表的...
教師あり学習のうち、出力 [math]y[/math] が連続値(数値)...
回帰分析の代表的な手法には重回帰分析があり、カテゴリー分...
自分の分析の目的に応じて適切に手法を使い分けることが重要...
*課題 [#f3707ba5]
irisデータセットを用いて、クラスター分析、重回帰分析、決...
ページ名: