SlideShare a Scribd company logo
1 of 20
Download to read offline
データアーティスト株式会社
Rを用いたデータマイニング概論 第5回
判別分析
社内研修
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page2Page2Page2Page2
アジェンダ
①判別分析の概要
②線形判別・樹木モデル・
SVM・ランダムフォレストを動かしてみよう!
③様々なデータでの比較
各手法の概念の理解と、
どのような特徴があるかを体感しよう!!
判別分析の概要
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page4Page4Page4Page4
データマイニング
解析(微積)・線形代数・統計・プログラミング
土台
正解が
無い
ある
正解が
数値
クラス
regression
回帰分析
判別分析
クラスター
分析
classification
clustering
最大・最小を
調べる。
多変量を
あつかう。
不確かな
事象を扱う。
マーケティング
次元圧縮
メタヒューリスティクス
時系列データ
テキストデータ
ネットワークデータ
※”Rによるデータサイエンス 森北出版”で理論的解説が割愛されているところは、本講義でも割愛。
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page5Page5Page5Page5
判別分析概要
※ちなみにt検定は100年以上も前に開発されました。
時代19951930 1960 2001
性能
線形分離 分類木 SVM ランダムフォレスト
分類機能 低 中 高 高
計算速度 高 中 低 中
可読性 中 高 低 中
知名度 高 高 高 低
線形判別
理解のため大切
1本の直線 2本以上の直線 曲線
樹木モデル
SVM
+
カーネル
トリック
ランダム
フォレスト
(集団学習)
良く使う
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page6Page6Page6Page6
判別分析の流れ
データの取得・生成
埼玉・金融
東京・金融
神奈川・保険
大阪・保険
購入したクリエイティブA,B,C
訓練学習 テスト
Feature Generation
→ユーザーの特徴を造る。県、
会社、デモグラフィック、etc。
Feature Selection
→造った特徴の中から重要なもの
を選択する。
Dimensional Compression
→属性を掛け合わせて新しい重要な
属性を作る。人口/面積=人口密度
データの一部で訓練を行う。
どんな学習方法が良いか??
データの種類、目的に応じて。
LC TM
RFSVM
残りのデータでテストを行う。
RF
答え合わせ
データから学習するだけでなく
そのモデルが、未知のデータを
どれほど説明できるかを調べる。
動かしてみよう!
#今回必要なパッケージ、事前に実行してください
required.packages=c("mvpart","kernlab","randomForest","scatterplot3d")
install.packages(required.packages)
#irisデータを学習用とテスト用に分けましょう
sample.v=sort(sample(150,75))
train.iris=iris[sample.v,]
test.iris=iris[-sample.v,]
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page8Page8Page8Page8
フィッシャーの線形判別
クラス間の重心が最も離れるように
軸をとり、垂線で区切る。
クラス内の分散が最小化される
ように軸をとる。
でクラス判別。0,0
22110


dd
nnd
ff
xaxaxaaf
fd
fd
fdはデータが二次元なら直線、三次元なら平面、4次元以上なら超平面。
変数の線形結合
うんちく:irisのデータは、フィッシャーが判別分析を行うために用意したデータだそうです。
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page9Page9Page9Page9
線形判別を使ってみよう!!
#線形判別
library(MASS) #まずは分類
iris.lda=lda(Species~.,data=train.iris)
result.tab=table(test.iris[,"Species"],
predict(iris.lda,test.iris[,-5])$class)
sum(diag(result.tab))/sum(result.tab)
library(scatterplot3d) #描画(不便)
col.pallet=c("#f79646", "#9bbb59", "#4bacc6")
col.v=col.pallet[test.iris[,5]]
s3d=scatterplot3d(test.iris[,1:3],color=col.v,type="h",
cex.symbols=1,angle=55, scale.y=0.7, pch=16,
main="scatterplot3d")
coef.mat=iris.lda[[4]][1:2,]
coef.mat=rbind(coef.mat,
-apply(iris.lda$means%*%iris.lda$scaling,2,mean))
coef.mat[,1]=coef.mat[,1]/iris.lda[[4]][3,1]
coef.mat[,2]=coef.mat[,2]/iris.lda[[4]][3,2]
coef.mat=-coef.mat
s3d$plane3d(Intercept=coef.mat[3,1], x.coef =coef.mat[1,1],
y.coef =coef.mat[2,1],lty = "dashed",
lty.box = NULL,col="#93cddd")
s3d$plane3d(Intercept=coef.mat[3,2], x.coef =coef.mat[1,2],
y.coef=coef.mat[2,2],lty = "dashed",
lty.box = NULL,col="#c3bb59")
●Linear Discriminant Analysis
3次元プロット
境界面
予測
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page10Page10Page10Page10
樹木モデル(CART)の理論概要
 

c
i
tipGI
1
2
)|(1
No. 風 気温 海水浴
1 弱 高 行く
2 弱 低 行かない
3 弱 高 行く
4 弱 中 行く
5 弱 低 行かない
6 弱 高 行かない
7 強 高 行かない
8 強 低 行かない
9 強 中 行かない
10 強 高 行く
08.0)(
10
4
)(
10
6
)()(
375.0
4
3
4
1
1)(
5.0
6
3
6
3
1)(
22
22













































強風弱風分岐前風で分類
強風
弱風
GIGIGIGI
GI
GI
起きる確率に偏りがある場合に、
値が小さくなる!
気温で分けた方がうまくいく!!
“風の弱or強”で分けるのと”気温の低or高中”で分けるのでどちらが良いか?
48.0
10
6
10
4
1)(
22





















分岐前GI
137.0)(
10
4
)(
10
6
)()(
490.0
4
3
4
1
1)(
0
2
0
3
3
1)(
22
22













































強風弱風分岐前気温で分類
高低気温
低気温
GIGIGIGI
GI
GI
tmp=c
wnd=a
tmp=ab
wnd=b
行かない
6/4
行かない
3/0
行く
3/4
行かない
2/1
行く
1/3
ジニ係数
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page11Page11Page11Page11
樹木モデルを使ってみよう!!
#分類木
library(mvpart)
iris.rp=rpart(Species~.,data=train.iris)
predict(iris.rp,test.iris[,-5])
result.tab=table(test.iris[,"Species"],
predict(iris.rp,test.iris[,-5],type="class"))
sum(diag(result.tab))/sum(result.tab)
クラスの予測
確率の予測
Petal.Length< 2.35
Petal.Length< 4.95
Petal.Length>=2.35
Petal.Length>=4.95
versicolor
23/27/25
setosa
23/0/0
versicolor
0/27/25
versicolor
0/26/1
virginica
0/1/24
plot(iris.rp,uniform=T,branch=0.6,margin=0.05)
text(iris.rp,use.n=T,all=T)
●Tree Model
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page12Page12Page12Page12
SVM+カーネルトリックの理論概要
直線で分けれない
平面で分けれない
z=xy
考える。
平面で分けれる
平面で分けれる
カーネル法を使うと、空間の変換が低計算コストで行える。
次元数が増えても平気!!
“[連載]フリーソフトによるデータ解析・マイニング第31 回”より抜粋
D
サポートベクターとの距離=マージンを
最大化して、新規データへの分類性能が、
非常に高いマシンを造る。
カーネルトリックSVM(Support Vector Machine)
log(D)∝確率
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page13Page13Page13Page13
SVM+カーネル法を使ってみよう!!
-1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
2.0 2.5 3.0 3.5 4.0
4.5
5.0
5.5
6.0
6.5
7.0
SVM classification plot
Sepal.Width
Sepal.Length
#SVM
library(kernlab)
iris.svm=ksvm(Species~.,data=train.iris)
result.tab=table(test.iris[,"Species"],
predict(iris.svm,test.iris[,-5]))
sum(diag(result.tab))/sum(result.tab)
iris.sepal=iris[1:100,-c(3,4)]
iris.sepal.svm=ksvm(Species~.,data=iris.sepal)
plot(iris.sepal.svm,data=iris.sepal[,-3])
iris.p.svm=ksvm(Species~.,data=train.iris,prob.mod
el=T)
predict(iris.p.svm,test.iris[,-5], type="probabilities")
●Support Vector Machine
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page14Page14Page14Page14
ランダムフォレストの理論概要
変数1 変数2 変数3 変数4 変数5 クラス
個体1 1 5 5 9 5 A
個体2 2 1 8 8 6 B
個体3 5 2 5 5 2 A
個体4 1 1 4 6 1 B
個体5 3 1 2 7 4 B
個体6 8 8 7 4 7 A
個体7 4 4 9 1 5 A
個体8 7 3 6 6 6 B
個体9 8 9 5 2 9 A
個体10 5 4 8 3 8 B
個体11 2 2 7 6 7 B
個体12 2 6 4 4 4 A
個体13 3 7 2 8 5 B
個体14 6 6 3 5 6 A
変数を選択
変数を選択
データを
選択
データを
選択
……
B
個体X
変数(1,3,4,2,1)
A A
個体X
クラス:A!!
木がいっぱいで森になる!!→意見が偏らず未知データへの対応力が高くなる!
多数決
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page15Page15Page15Page15
ランダムフォレストを使ってみよう!!
Sepal.Width
Sepal.Length
Petal.Width
Petal.Length
0 5 10 15 20
iris.rf
MeanDecreaseGini
library(randomForest)
iris.rf=randomForest(Species~.,data=train.iris)
varImpPlot(iris.rf)
getTree(iris.rf,k=5)
result.tab=table(test.iris[,"Species"],
predict(iris.rf,test.iris[,-5]))
sum(diag(result.tab))/sum(result.tab)
重要情報の抽出
●Random Forrest
様々なデータでの比較
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page17Page17Page17Page17
相互作用のあるデータ
x.v=rnorm(3000)
y.v=rnorm(3000)
class.v=as.factor(as.numeric((x.v*y.v)>0)+1)
non.lin.data=data.frame(x.v,y.v,class.v)
plot(non.lin.data[,1:2],col=c("#4bacc6","#f79646")[non.lin.data[,3]],pch=20)
correct.ratio.lda.v1=c();correct.ratio.rp.v1=c()
correct.ratio.svm.v1=c();correct.ratio.rf.v1=c()
for(i in 1:5){
sample.v=sample(3000,1500)
train.data=non.lin.data[sample.v,]
test.data=non.lin.data[-sample.v,]
#LDA
learn=lda(class.v~.,data=train.data)
result.tab=table(test.data[,3],
predict(learn,test.data[,-3])$class)
correct.ratio.lda.v1[i]=sum(diag(result.tab))/sum(result.tab)
#TREE
learn=rpart(class.v~.,data=train.data)
result.tab=table(test.data[,3],predict(learn,test.data[,-3],type="class"))
correct.ratio.rp.v1[i]=sum(diag(result.tab))/sum(result.tab)
#SVM
learn=ksvm(class.v~.,data=train.data)
result.tab=table(test.data[,3],predict(learn,test.data[,-3]))
correct.ratio.svm.v1[i]=sum(diag(result.tab))/sum(result.tab)
#RF
learn=randomForest(class.v~.,data=train.data)
result.tab=table(test.data[,3],predict(learn,test.data[,-3]))
correct.ratio.rf.v1[i]=sum(diag(result.tab))/sum(result.tab)
}
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page18Page18Page18Page18
高次元のデータ(spam)
data(spam) #kernlabに入ってる
SPAM=spam
colnames(SPAM)[ncol(SPAM)]="class.v"
correct.ratio.lda.v2=c()
correct.ratio.rp.v2=c()
correct.ratio.svm.v2=c()
correct.ratio.rf.v2=c()
for(i in 1:5){
sample.v=sample(4601,2300)
train.data=SPAM[sample.v,]
test.data=SPAM[-sample.v,]
#LDA
learn=lda(class.v~.,data=train.data)
result.tab=table(test.data[,ncol(train.data)],
predict(learn,test.data[,-ncol(train.data)])$class)
correct.ratio.lda.v2[i]=sum(diag(result.tab))/sum(result.tab)
#TREE
learn=rpart(class.v~.,data=train.data)
result.tab=table(test.data[,ncol(train.data)],predict(learn,test.data[,-ncol(train.data)],type="class"))
correct.ratio.rp.v2[i]=sum(diag(result.tab))/sum(result.tab)
#SVM
learn=ksvm(class.v~.,data=train.data)
result.tab=table(test.data[,ncol(train.data)],predict(learn,test.data[,-ncol(train.data)]))
correct.ratio.svm.v2[i]=sum(diag(result.tab))/sum(result.tab)
#RF
learn=randomForest(class.v~.,data=train.data)
result.tab=table(test.data[,ncol(train.data)],predict(learn,test.data[,-ncol(train.data)]))
correct.ratio.rf.v2[i]=sum(diag(result.tab))/sum(result.tab)
}
メールにどんな単語が含まれているかと、
スパムかスパムじゃないかのデータ。
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page19Page19Page19Page19
high.dim.mat=matrix(rnorm(30000),ncol=10)
class.v=as.factor(as.numeric(apply(high.dim.mat[,1:3],1,prod)>0)+1)
high.dim.mat=data.frame(high.dim.mat,class.v)
names(high.dim.mat)=c(letters[1:(ncol(high.dim.mat)-1)],"class.v")
scatterplot3d(high.dim.mat[,1:3],color=c("#4bacc6","#f79646")[class.v],cex.symbols=0.5,
angle=55, scale.y=0.7, pch=16, main="scatterplot3d")
correct.ratio.lda.v3=c();correct.ratio.rp.v3=c()
correct.ratio.svm.v3=c();correct.ratio.rf.v3=c()
for(i in 1:5){
sample.v=sample(3000,1500)
train.data=high.dim.mat[sample.v,]
test.data=high.dim.mat[-sample.v,]
learn=lda(class.v~.,data=train.data) #LDA
result.tab=table(test.data[,ncol(high.dim.mat)],
predict(learn,test.data[,-ncol(high.dim.mat)])$class)
correct.ratio.lda.v3[i]=sum(diag(result.tab))/sum(result.tab)
learn=rpart(class.v~.,data=train.data) #TREE
result.tab=table(test.data[,ncol(high.dim.mat)],
predict(learn,test.data[,-ncol(high.dim.mat)],type="class"))
correct.ratio.rp.v3[i]=sum(diag(result.tab))/sum(result.tab)
learn=ksvm(class.v~.,data=train.data) #SVM
result.tab=table(test.data[,ncol(high.dim.mat)],predict(learn,test.data[,-ncol(high.dim.mat)]))
correct.ratio.svm.v3[i]=sum(diag(result.tab))/sum(result.tab)
learn=randomForest(class.v~.,data=train.data) #RF
result.tab=table(test.data[,ncol(high.dim.mat)],predict(learn,test.data[,-ncol(high.dim.mat)]))
correct.ratio.rf.v3[i]=sum(diag(result.tab))/sum(result.tab)
}
高次元(10次元)の相互作用のあるデータ
Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page20Page20Page20Page20
correct.ratio.lda.v1 correct.ratio.rp.v1 correct.ratio.svm.v1 correct.ratio.rf.v1
0.40.60.81.0
Intr
correct.ratio.lda.v2 correct.ratio.rp.v2 correct.ratio.svm.v2 correct.ratio.rf.v2
0.890.910.930.95
Spam
correct.ratio.lda.v3 correct.ratio.rp.v3 correct.ratio.svm.v3 correct.ratio.rf.v3
0.500.600.700.80
High.D.intr
各データの比較
#3種のデータの比較
par(mfrow=c(3,1))
boxplot(data.frame(correct.ratio.lda.v1,
correct.ratio.rp.v1,correct.ratio.svm.v1,
correct.ratio.rf.v1),main="Intr")
boxplot(data.frame(correct.ratio.lda.v2,
correct.ratio.rp.v2,correct.ratio.svm.v2,
correct.ratio.rf.v2),main="Spam")
boxplot(data.frame(correct.ratio.lda.v3,
correct.ratio.rp.v3,correct.ratio.svm.v3,
correct.ratio.rf.v3),main="High.D.intr")
#重要な属性のみを取り出す
learn=randomForest(class.v~.,data=train.data)
learn$importance
高次元なデータ
にはRFが強い。
正答率 2次の相互作用
スパムデータ
10次の相互作用
線形判別 < 樹木モデル < SVM < ランダムフォレスト
の順に高い正答率を示しています。
どのアルゴリズムを使うかは、ベンダーによりけりです
が、DSPの○○拡張は基本これまで学んできた判別分析
の技術を使います。
CV拡張の場合は、CVしたかどうかを正解不正解、どん
なページを見ているかを属性データとして拡張(学習)を
していきます。

More Related Content

What's hot

巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
Haruka Ozaki
 
PRML上巻勉強会 at 東京大学 資料 第5章5.1 〜 5.3.1
PRML上巻勉強会 at 東京大学 資料 第5章5.1 〜 5.3.1PRML上巻勉強会 at 東京大学 資料 第5章5.1 〜 5.3.1
PRML上巻勉強会 at 東京大学 資料 第5章5.1 〜 5.3.1
Len Matsuyama
 
はじめてのパターン認識 第8章 サポートベクトルマシン
はじめてのパターン認識 第8章 サポートベクトルマシンはじめてのパターン認識 第8章 サポートベクトルマシン
はじめてのパターン認識 第8章 サポートベクトルマシン
Motoya Wakiyama
 
PRML勉強会@長岡 第4章線形識別モデル
PRML勉強会@長岡 第4章線形識別モデルPRML勉強会@長岡 第4章線形識別モデル
PRML勉強会@長岡 第4章線形識別モデル
Shohei Okada
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
Kazuya Wada
 
data.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理するdata.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理する
Shintaro Fukushima
 
Uplift Modelling 入門(1)
Uplift Modelling 入門(1)Uplift Modelling 入門(1)
Uplift Modelling 入門(1)
Yohei Sato
 
PRML上巻勉強会 at 東京大学 資料 第2章2.3.3 〜 2.5.2
PRML上巻勉強会 at 東京大学 資料 第2章2.3.3 〜 2.5.2PRML上巻勉強会 at 東京大学 資料 第2章2.3.3 〜 2.5.2
PRML上巻勉強会 at 東京大学 資料 第2章2.3.3 〜 2.5.2
Hiroyuki Kato
 

What's hot (20)

巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について巨大な表を高速に扱うData.table について
巨大な表を高速に扱うData.table について
 
PRML6.4
PRML6.4PRML6.4
PRML6.4
 
PRML上巻勉強会 at 東京大学 資料 第5章5.1 〜 5.3.1
PRML上巻勉強会 at 東京大学 資料 第5章5.1 〜 5.3.1PRML上巻勉強会 at 東京大学 資料 第5章5.1 〜 5.3.1
PRML上巻勉強会 at 東京大学 資料 第5章5.1 〜 5.3.1
 
GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論GEE(一般化推定方程式)の理論
GEE(一般化推定方程式)の理論
 
Rで実験計画法 後編
Rで実験計画法 後編Rで実験計画法 後編
Rで実験計画法 後編
 
みどりぼん3章前半
みどりぼん3章前半みどりぼん3章前半
みどりぼん3章前半
 
SVMについて
SVMについてSVMについて
SVMについて
 
距離と分類の話
距離と分類の話距離と分類の話
距離と分類の話
 
はじめてのパターン認識 第8章 サポートベクトルマシン
はじめてのパターン認識 第8章 サポートベクトルマシンはじめてのパターン認識 第8章 サポートベクトルマシン
はじめてのパターン認識 第8章 サポートベクトルマシン
 
PRML勉強会@長岡 第4章線形識別モデル
PRML勉強会@長岡 第4章線形識別モデルPRML勉強会@長岡 第4章線形識別モデル
PRML勉強会@長岡 第4章線形識別モデル
 
RのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみたRのffとbigmemoryとRevoScaleRとを比較してみた
RのffとbigmemoryとRevoScaleRとを比較してみた
 
Hough forestを用いた物体検出
Hough forestを用いた物体検出Hough forestを用いた物体検出
Hough forestを用いた物体検出
 
data.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理するdata.tableパッケージで大規模データをサクッと処理する
data.tableパッケージで大規模データをサクッと処理する
 
PRML輪読#3
PRML輪読#3PRML輪読#3
PRML輪読#3
 
Uplift Modelling 入門(1)
Uplift Modelling 入門(1)Uplift Modelling 入門(1)
Uplift Modelling 入門(1)
 
lsh
lshlsh
lsh
 
基礎からのベイズ統計学第5章
基礎からのベイズ統計学第5章基礎からのベイズ統計学第5章
基礎からのベイズ統計学第5章
 
異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知異常検知と変化検知 9章 部分空間法による変化点検知
異常検知と変化検知 9章 部分空間法による変化点検知
 
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしないPyMCがあれば,ベイズ推定でもう泣いたりなんかしない
PyMCがあれば,ベイズ推定でもう泣いたりなんかしない
 
PRML上巻勉強会 at 東京大学 資料 第2章2.3.3 〜 2.5.2
PRML上巻勉強会 at 東京大学 資料 第2章2.3.3 〜 2.5.2PRML上巻勉強会 at 東京大学 資料 第2章2.3.3 〜 2.5.2
PRML上巻勉強会 at 東京大学 資料 第2章2.3.3 〜 2.5.2
 

Viewers also liked

R言語で統計分類基本
R言語で統計分類基本R言語で統計分類基本
R言語で統計分類基本
Paweł Rusin
 
パターン認識と機械学習入門
パターン認識と機械学習入門パターン認識と機械学習入門
パターン認識と機械学習入門
Momoko Hayamizu
 

Viewers also liked (6)

R言語で統計分類基本
R言語で統計分類基本R言語で統計分類基本
R言語で統計分類基本
 
マハラノビス距離とユークリッド距離の違い
マハラノビス距離とユークリッド距離の違いマハラノビス距離とユークリッド距離の違い
マハラノビス距離とユークリッド距離の違い
 
SVM実践ガイド (A Practical Guide to Support Vector Classification)
SVM実践ガイド (A Practical Guide to Support Vector Classification)SVM実践ガイド (A Practical Guide to Support Vector Classification)
SVM実践ガイド (A Practical Guide to Support Vector Classification)
 
カルマンフィルタについて
カルマンフィルタについてカルマンフィルタについて
カルマンフィルタについて
 
Fisher線形判別分析とFisher Weight Maps
Fisher線形判別分析とFisher Weight MapsFisher線形判別分析とFisher Weight Maps
Fisher線形判別分析とFisher Weight Maps
 
パターン認識と機械学習入門
パターン認識と機械学習入門パターン認識と機械学習入門
パターン認識と機械学習入門
 

Similar to 判別分析

データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用までデータサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで
Shunsuke Nakamura
 
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jlWhy dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
Shintaro Fukushima
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類
Shintaro Fukushima
 
131101 foss4 g_tokyo_r_presentation
131101 foss4 g_tokyo_r_presentation131101 foss4 g_tokyo_r_presentation
131101 foss4 g_tokyo_r_presentation
Takayuki Nuimura
 
ビジネス活用事例で学ぶデータサイエンス入門 #2
ビジネス活用事例で学ぶデータサイエンス入門 #2ビジネス活用事例で学ぶデータサイエンス入門 #2
ビジネス活用事例で学ぶデータサイエンス入門 #2
you shimajiro
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
Shintaro Fukushima
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門
Yuichiro Kobayashi
 

Similar to 判別分析 (20)

エンジニアのための機械学習の基礎
エンジニアのための機械学習の基礎エンジニアのための機械学習の基礎
エンジニアのための機械学習の基礎
 
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用までデータサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで
 
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jlWhy dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
 
nlpaper.challenge NLP/CV交流勉強会 画像認識 7章
nlpaper.challenge NLP/CV交流勉強会 画像認識 7章nlpaper.challenge NLP/CV交流勉強会 画像認識 7章
nlpaper.challenge NLP/CV交流勉強会 画像認識 7章
 
2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門2017年3月版データマエショリスト入門
2017年3月版データマエショリスト入門
 
Feature Selection with R / in JP
Feature Selection with R / in JPFeature Selection with R / in JP
Feature Selection with R / in JP
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類
 
131101 foss4 g_tokyo_r_presentation
131101 foss4 g_tokyo_r_presentation131101 foss4 g_tokyo_r_presentation
131101 foss4 g_tokyo_r_presentation
 
ビジネス活用事例で学ぶデータサイエンス入門 #2
ビジネス活用事例で学ぶデータサイエンス入門 #2ビジネス活用事例で学ぶデータサイエンス入門 #2
ビジネス活用事例で学ぶデータサイエンス入門 #2
 
ディープラーニング入門 ~ 画像処理・自然言語処理について ~
ディープラーニング入門 ~ 画像処理・自然言語処理について ~ディープラーニング入門 ~ 画像処理・自然言語処理について ~
ディープラーニング入門 ~ 画像処理・自然言語処理について ~
 
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1
 
Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017Ⅰ. Rの基礎 2017
Ⅰ. Rの基礎 2017
 
データ解析入門
データ解析入門データ解析入門
データ解析入門
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
 
2017年3月版データマエショリスト入門(誤植修正版)
2017年3月版データマエショリスト入門(誤植修正版)2017年3月版データマエショリスト入門(誤植修正版)
2017年3月版データマエショリスト入門(誤植修正版)
 
R's anti sparseness
R's anti sparsenessR's anti sparseness
R's anti sparseness
 
機械学習 / Deep Learning 大全 (1) 機械学習基礎編
機械学習 / Deep Learning 大全 (1) 機械学習基礎編機械学習 / Deep Learning 大全 (1) 機械学習基礎編
機械学習 / Deep Learning 大全 (1) 機械学習基礎編
 
Azure Machine Learning Services 概要 - 2019年3月版
Azure Machine Learning Services 概要 - 2019年3月版Azure Machine Learning Services 概要 - 2019年3月版
Azure Machine Learning Services 概要 - 2019年3月版
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門
 
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V7
 

More from Satoru Yamamoto

More from Satoru Yamamoto (18)

Ai artificial intelligence in japan
Ai artificial intelligence in japanAi artificial intelligence in japan
Ai artificial intelligence in japan
 
AI(人工知能)インフォグラフィックス【時間をかけずにすぐわかる】
AI(人工知能)インフォグラフィックス【時間をかけずにすぐわかる】AI(人工知能)インフォグラフィックス【時間をかけずにすぐわかる】
AI(人工知能)インフォグラフィックス【時間をかけずにすぐわかる】
 
営業現場で困らないためのディープラーニング
営業現場で困らないためのディープラーニング営業現場で困らないためのディープラーニング
営業現場で困らないためのディープラーニング
 
2014年 日本のコンバージョンニュース
2014年 日本のコンバージョンニュース2014年 日本のコンバージョンニュース
2014年 日本のコンバージョンニュース
 
ABテスト・LPOのための統計学【社内向けサディスティックエディション】データアーティスト株式会社
ABテスト・LPOのための統計学【社内向けサディスティックエディション】データアーティスト株式会社ABテスト・LPOのための統計学【社内向けサディスティックエディション】データアーティスト株式会社
ABテスト・LPOのための統計学【社内向けサディスティックエディション】データアーティスト株式会社
 
デジタルフィールドリサーチ
デジタルフィールドリサーチデジタルフィールドリサーチ
デジタルフィールドリサーチ
 
【DMP x LPO ABテスト】パブリックdmpを用いたデータドリブンペルソナ構築
【DMP x LPO ABテスト】パブリックdmpを用いたデータドリブンペルソナ構築【DMP x LPO ABテスト】パブリックdmpを用いたデータドリブンペルソナ構築
【DMP x LPO ABテスト】パブリックdmpを用いたデータドリブンペルソナ構築
 
30分でわかる『R』によるデータ分析|データアーティスト
30分でわかる『R』によるデータ分析|データアーティスト30分でわかる『R』によるデータ分析|データアーティスト
30分でわかる『R』によるデータ分析|データアーティスト
 
データアーティストの理念とビジョン~設立一周年記念スライド~
データアーティストの理念とビジョン~設立一周年記念スライド~データアーティストの理念とビジョン~設立一周年記念スライド~
データアーティストの理念とビジョン~設立一周年記念スライド~
 
効果的なAbテストがwebサイトを成長させる~abテスト成功メソッドのご紹介~
効果的なAbテストがwebサイトを成長させる~abテスト成功メソッドのご紹介~効果的なAbテストがwebサイトを成長させる~abテスト成功メソッドのご紹介~
効果的なAbテストがwebサイトを成長させる~abテスト成功メソッドのご紹介~
 
お金をかけないランディングページのつくりかた
お金をかけないランディングページのつくりかたお金をかけないランディングページのつくりかた
お金をかけないランディングページのつくりかた
 
【データアーティスト株式会社】5歳の娘でもわかるDMP
【データアーティスト株式会社】5歳の娘でもわかるDMP【データアーティスト株式会社】5歳の娘でもわかるDMP
【データアーティスト株式会社】5歳の娘でもわかるDMP
 
統計を始める方へ①_データ環境Rの基本的なプログラミング|データアーティスト
統計を始める方へ①_データ環境Rの基本的なプログラミング|データアーティスト統計を始める方へ①_データ環境Rの基本的なプログラミング|データアーティスト
統計を始める方へ①_データ環境Rの基本的なプログラミング|データアーティスト
 
営業向け ABテストの統計学 データアーティスト
営業向け ABテストの統計学 データアーティスト営業向け ABテストの統計学 データアーティスト
営業向け ABテストの統計学 データアーティスト
 
DMPを用いたデータドリブンLPOによる最適コミュニケーションの発見方法
DMPを用いたデータドリブンLPOによる最適コミュニケーションの発見方法DMPを用いたデータドリブンLPOによる最適コミュニケーションの発見方法
DMPを用いたデータドリブンLPOによる最適コミュニケーションの発見方法
 
広告業界の俯瞰
広告業界の俯瞰広告業界の俯瞰
広告業界の俯瞰
 
音楽の正体
音楽の正体音楽の正体
音楽の正体
 
都市工学調査資料
都市工学調査資料都市工学調査資料
都市工学調査資料
 

Recently uploaded

Recently uploaded (7)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

判別分析

  • 2. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page2Page2Page2Page2 アジェンダ ①判別分析の概要 ②線形判別・樹木モデル・ SVM・ランダムフォレストを動かしてみよう! ③様々なデータでの比較 各手法の概念の理解と、 どのような特徴があるかを体感しよう!!
  • 4. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page4Page4Page4Page4 データマイニング 解析(微積)・線形代数・統計・プログラミング 土台 正解が 無い ある 正解が 数値 クラス regression 回帰分析 判別分析 クラスター 分析 classification clustering 最大・最小を 調べる。 多変量を あつかう。 不確かな 事象を扱う。 マーケティング 次元圧縮 メタヒューリスティクス 時系列データ テキストデータ ネットワークデータ ※”Rによるデータサイエンス 森北出版”で理論的解説が割愛されているところは、本講義でも割愛。
  • 5. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page5Page5Page5Page5 判別分析概要 ※ちなみにt検定は100年以上も前に開発されました。 時代19951930 1960 2001 性能 線形分離 分類木 SVM ランダムフォレスト 分類機能 低 中 高 高 計算速度 高 中 低 中 可読性 中 高 低 中 知名度 高 高 高 低 線形判別 理解のため大切 1本の直線 2本以上の直線 曲線 樹木モデル SVM + カーネル トリック ランダム フォレスト (集団学習) 良く使う
  • 6. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page6Page6Page6Page6 判別分析の流れ データの取得・生成 埼玉・金融 東京・金融 神奈川・保険 大阪・保険 購入したクリエイティブA,B,C 訓練学習 テスト Feature Generation →ユーザーの特徴を造る。県、 会社、デモグラフィック、etc。 Feature Selection →造った特徴の中から重要なもの を選択する。 Dimensional Compression →属性を掛け合わせて新しい重要な 属性を作る。人口/面積=人口密度 データの一部で訓練を行う。 どんな学習方法が良いか?? データの種類、目的に応じて。 LC TM RFSVM 残りのデータでテストを行う。 RF 答え合わせ データから学習するだけでなく そのモデルが、未知のデータを どれほど説明できるかを調べる。
  • 8. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page8Page8Page8Page8 フィッシャーの線形判別 クラス間の重心が最も離れるように 軸をとり、垂線で区切る。 クラス内の分散が最小化される ように軸をとる。 でクラス判別。0,0 22110   dd nnd ff xaxaxaaf fd fd fdはデータが二次元なら直線、三次元なら平面、4次元以上なら超平面。 変数の線形結合 うんちく:irisのデータは、フィッシャーが判別分析を行うために用意したデータだそうです。
  • 9. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page9Page9Page9Page9 線形判別を使ってみよう!! #線形判別 library(MASS) #まずは分類 iris.lda=lda(Species~.,data=train.iris) result.tab=table(test.iris[,"Species"], predict(iris.lda,test.iris[,-5])$class) sum(diag(result.tab))/sum(result.tab) library(scatterplot3d) #描画(不便) col.pallet=c("#f79646", "#9bbb59", "#4bacc6") col.v=col.pallet[test.iris[,5]] s3d=scatterplot3d(test.iris[,1:3],color=col.v,type="h", cex.symbols=1,angle=55, scale.y=0.7, pch=16, main="scatterplot3d") coef.mat=iris.lda[[4]][1:2,] coef.mat=rbind(coef.mat, -apply(iris.lda$means%*%iris.lda$scaling,2,mean)) coef.mat[,1]=coef.mat[,1]/iris.lda[[4]][3,1] coef.mat[,2]=coef.mat[,2]/iris.lda[[4]][3,2] coef.mat=-coef.mat s3d$plane3d(Intercept=coef.mat[3,1], x.coef =coef.mat[1,1], y.coef =coef.mat[2,1],lty = "dashed", lty.box = NULL,col="#93cddd") s3d$plane3d(Intercept=coef.mat[3,2], x.coef =coef.mat[1,2], y.coef=coef.mat[2,2],lty = "dashed", lty.box = NULL,col="#c3bb59") ●Linear Discriminant Analysis 3次元プロット 境界面 予測
  • 10. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page10Page10Page10Page10 樹木モデル(CART)の理論概要    c i tipGI 1 2 )|(1 No. 風 気温 海水浴 1 弱 高 行く 2 弱 低 行かない 3 弱 高 行く 4 弱 中 行く 5 弱 低 行かない 6 弱 高 行かない 7 強 高 行かない 8 強 低 行かない 9 強 中 行かない 10 強 高 行く 08.0)( 10 4 )( 10 6 )()( 375.0 4 3 4 1 1)( 5.0 6 3 6 3 1)( 22 22                                              強風弱風分岐前風で分類 強風 弱風 GIGIGIGI GI GI 起きる確率に偏りがある場合に、 値が小さくなる! 気温で分けた方がうまくいく!! “風の弱or強”で分けるのと”気温の低or高中”で分けるのでどちらが良いか? 48.0 10 6 10 4 1)( 22                      分岐前GI 137.0)( 10 4 )( 10 6 )()( 490.0 4 3 4 1 1)( 0 2 0 3 3 1)( 22 22                                              強風弱風分岐前気温で分類 高低気温 低気温 GIGIGIGI GI GI tmp=c wnd=a tmp=ab wnd=b 行かない 6/4 行かない 3/0 行く 3/4 行かない 2/1 行く 1/3 ジニ係数
  • 11. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page11Page11Page11Page11 樹木モデルを使ってみよう!! #分類木 library(mvpart) iris.rp=rpart(Species~.,data=train.iris) predict(iris.rp,test.iris[,-5]) result.tab=table(test.iris[,"Species"], predict(iris.rp,test.iris[,-5],type="class")) sum(diag(result.tab))/sum(result.tab) クラスの予測 確率の予測 Petal.Length< 2.35 Petal.Length< 4.95 Petal.Length>=2.35 Petal.Length>=4.95 versicolor 23/27/25 setosa 23/0/0 versicolor 0/27/25 versicolor 0/26/1 virginica 0/1/24 plot(iris.rp,uniform=T,branch=0.6,margin=0.05) text(iris.rp,use.n=T,all=T) ●Tree Model
  • 12. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page12Page12Page12Page12 SVM+カーネルトリックの理論概要 直線で分けれない 平面で分けれない z=xy 考える。 平面で分けれる 平面で分けれる カーネル法を使うと、空間の変換が低計算コストで行える。 次元数が増えても平気!! “[連載]フリーソフトによるデータ解析・マイニング第31 回”より抜粋 D サポートベクターとの距離=マージンを 最大化して、新規データへの分類性能が、 非常に高いマシンを造る。 カーネルトリックSVM(Support Vector Machine) log(D)∝確率
  • 13. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page13Page13Page13Page13 SVM+カーネル法を使ってみよう!! -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 SVM classification plot Sepal.Width Sepal.Length #SVM library(kernlab) iris.svm=ksvm(Species~.,data=train.iris) result.tab=table(test.iris[,"Species"], predict(iris.svm,test.iris[,-5])) sum(diag(result.tab))/sum(result.tab) iris.sepal=iris[1:100,-c(3,4)] iris.sepal.svm=ksvm(Species~.,data=iris.sepal) plot(iris.sepal.svm,data=iris.sepal[,-3]) iris.p.svm=ksvm(Species~.,data=train.iris,prob.mod el=T) predict(iris.p.svm,test.iris[,-5], type="probabilities") ●Support Vector Machine
  • 14. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page14Page14Page14Page14 ランダムフォレストの理論概要 変数1 変数2 変数3 変数4 変数5 クラス 個体1 1 5 5 9 5 A 個体2 2 1 8 8 6 B 個体3 5 2 5 5 2 A 個体4 1 1 4 6 1 B 個体5 3 1 2 7 4 B 個体6 8 8 7 4 7 A 個体7 4 4 9 1 5 A 個体8 7 3 6 6 6 B 個体9 8 9 5 2 9 A 個体10 5 4 8 3 8 B 個体11 2 2 7 6 7 B 個体12 2 6 4 4 4 A 個体13 3 7 2 8 5 B 個体14 6 6 3 5 6 A 変数を選択 変数を選択 データを 選択 データを 選択 …… B 個体X 変数(1,3,4,2,1) A A 個体X クラス:A!! 木がいっぱいで森になる!!→意見が偏らず未知データへの対応力が高くなる! 多数決
  • 15. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page15Page15Page15Page15 ランダムフォレストを使ってみよう!! Sepal.Width Sepal.Length Petal.Width Petal.Length 0 5 10 15 20 iris.rf MeanDecreaseGini library(randomForest) iris.rf=randomForest(Species~.,data=train.iris) varImpPlot(iris.rf) getTree(iris.rf,k=5) result.tab=table(test.iris[,"Species"], predict(iris.rf,test.iris[,-5])) sum(diag(result.tab))/sum(result.tab) 重要情報の抽出 ●Random Forrest
  • 17. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page17Page17Page17Page17 相互作用のあるデータ x.v=rnorm(3000) y.v=rnorm(3000) class.v=as.factor(as.numeric((x.v*y.v)>0)+1) non.lin.data=data.frame(x.v,y.v,class.v) plot(non.lin.data[,1:2],col=c("#4bacc6","#f79646")[non.lin.data[,3]],pch=20) correct.ratio.lda.v1=c();correct.ratio.rp.v1=c() correct.ratio.svm.v1=c();correct.ratio.rf.v1=c() for(i in 1:5){ sample.v=sample(3000,1500) train.data=non.lin.data[sample.v,] test.data=non.lin.data[-sample.v,] #LDA learn=lda(class.v~.,data=train.data) result.tab=table(test.data[,3], predict(learn,test.data[,-3])$class) correct.ratio.lda.v1[i]=sum(diag(result.tab))/sum(result.tab) #TREE learn=rpart(class.v~.,data=train.data) result.tab=table(test.data[,3],predict(learn,test.data[,-3],type="class")) correct.ratio.rp.v1[i]=sum(diag(result.tab))/sum(result.tab) #SVM learn=ksvm(class.v~.,data=train.data) result.tab=table(test.data[,3],predict(learn,test.data[,-3])) correct.ratio.svm.v1[i]=sum(diag(result.tab))/sum(result.tab) #RF learn=randomForest(class.v~.,data=train.data) result.tab=table(test.data[,3],predict(learn,test.data[,-3])) correct.ratio.rf.v1[i]=sum(diag(result.tab))/sum(result.tab) }
  • 18. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page18Page18Page18Page18 高次元のデータ(spam) data(spam) #kernlabに入ってる SPAM=spam colnames(SPAM)[ncol(SPAM)]="class.v" correct.ratio.lda.v2=c() correct.ratio.rp.v2=c() correct.ratio.svm.v2=c() correct.ratio.rf.v2=c() for(i in 1:5){ sample.v=sample(4601,2300) train.data=SPAM[sample.v,] test.data=SPAM[-sample.v,] #LDA learn=lda(class.v~.,data=train.data) result.tab=table(test.data[,ncol(train.data)], predict(learn,test.data[,-ncol(train.data)])$class) correct.ratio.lda.v2[i]=sum(diag(result.tab))/sum(result.tab) #TREE learn=rpart(class.v~.,data=train.data) result.tab=table(test.data[,ncol(train.data)],predict(learn,test.data[,-ncol(train.data)],type="class")) correct.ratio.rp.v2[i]=sum(diag(result.tab))/sum(result.tab) #SVM learn=ksvm(class.v~.,data=train.data) result.tab=table(test.data[,ncol(train.data)],predict(learn,test.data[,-ncol(train.data)])) correct.ratio.svm.v2[i]=sum(diag(result.tab))/sum(result.tab) #RF learn=randomForest(class.v~.,data=train.data) result.tab=table(test.data[,ncol(train.data)],predict(learn,test.data[,-ncol(train.data)])) correct.ratio.rf.v2[i]=sum(diag(result.tab))/sum(result.tab) } メールにどんな単語が含まれているかと、 スパムかスパムじゃないかのデータ。
  • 19. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page19Page19Page19Page19 high.dim.mat=matrix(rnorm(30000),ncol=10) class.v=as.factor(as.numeric(apply(high.dim.mat[,1:3],1,prod)>0)+1) high.dim.mat=data.frame(high.dim.mat,class.v) names(high.dim.mat)=c(letters[1:(ncol(high.dim.mat)-1)],"class.v") scatterplot3d(high.dim.mat[,1:3],color=c("#4bacc6","#f79646")[class.v],cex.symbols=0.5, angle=55, scale.y=0.7, pch=16, main="scatterplot3d") correct.ratio.lda.v3=c();correct.ratio.rp.v3=c() correct.ratio.svm.v3=c();correct.ratio.rf.v3=c() for(i in 1:5){ sample.v=sample(3000,1500) train.data=high.dim.mat[sample.v,] test.data=high.dim.mat[-sample.v,] learn=lda(class.v~.,data=train.data) #LDA result.tab=table(test.data[,ncol(high.dim.mat)], predict(learn,test.data[,-ncol(high.dim.mat)])$class) correct.ratio.lda.v3[i]=sum(diag(result.tab))/sum(result.tab) learn=rpart(class.v~.,data=train.data) #TREE result.tab=table(test.data[,ncol(high.dim.mat)], predict(learn,test.data[,-ncol(high.dim.mat)],type="class")) correct.ratio.rp.v3[i]=sum(diag(result.tab))/sum(result.tab) learn=ksvm(class.v~.,data=train.data) #SVM result.tab=table(test.data[,ncol(high.dim.mat)],predict(learn,test.data[,-ncol(high.dim.mat)])) correct.ratio.svm.v3[i]=sum(diag(result.tab))/sum(result.tab) learn=randomForest(class.v~.,data=train.data) #RF result.tab=table(test.data[,ncol(high.dim.mat)],predict(learn,test.data[,-ncol(high.dim.mat)])) correct.ratio.rf.v3[i]=sum(diag(result.tab))/sum(result.tab) } 高次元(10次元)の相互作用のあるデータ
  • 20. Copyright© 2002-2013 Data Artist, Inc. All Rights Reserved. Page20Page20Page20Page20 correct.ratio.lda.v1 correct.ratio.rp.v1 correct.ratio.svm.v1 correct.ratio.rf.v1 0.40.60.81.0 Intr correct.ratio.lda.v2 correct.ratio.rp.v2 correct.ratio.svm.v2 correct.ratio.rf.v2 0.890.910.930.95 Spam correct.ratio.lda.v3 correct.ratio.rp.v3 correct.ratio.svm.v3 correct.ratio.rf.v3 0.500.600.700.80 High.D.intr 各データの比較 #3種のデータの比較 par(mfrow=c(3,1)) boxplot(data.frame(correct.ratio.lda.v1, correct.ratio.rp.v1,correct.ratio.svm.v1, correct.ratio.rf.v1),main="Intr") boxplot(data.frame(correct.ratio.lda.v2, correct.ratio.rp.v2,correct.ratio.svm.v2, correct.ratio.rf.v2),main="Spam") boxplot(data.frame(correct.ratio.lda.v3, correct.ratio.rp.v3,correct.ratio.svm.v3, correct.ratio.rf.v3),main="High.D.intr") #重要な属性のみを取り出す learn=randomForest(class.v~.,data=train.data) learn$importance 高次元なデータ にはRFが強い。 正答率 2次の相互作用 スパムデータ 10次の相互作用 線形判別 < 樹木モデル < SVM < ランダムフォレスト の順に高い正答率を示しています。 どのアルゴリズムを使うかは、ベンダーによりけりです が、DSPの○○拡張は基本これまで学んできた判別分析 の技術を使います。 CV拡張の場合は、CVしたかどうかを正解不正解、どん なページを見ているかを属性データとして拡張(学習)を していきます。