読者です 読者をやめる 読者になる 読者になる

2016年度 言語処理論B (Day 2)

lecture

 以下は、東京外国語大学の集中講義「言語処理論B」に関するメモです。

Class 6: 多変量解析(の続き)

 判別分析とは、任意のデータ(目的変数)の属性をそれ以外のデータ(説明変数)を手がかりとして予測する手法です。以下では、Rにあらかじめ格納されているirisというデータセットを使い、がくの長さと幅、花弁の長さと幅からアヤメの種類を予測します。

# Rに格納されているサンプルデータを使用
iris
# がくの長さと幅、花弁の長さと幅の関係を視覚化(種類で色分け)
pairs(iris[, 1 : 4], col = iris[, 5])
# 奇数行と偶数行で、データを2つに分割
n <- seq(1, nrow(iris), by = 2) # 奇数のベクトルを生成
iris.A <- iris[n, ] # 奇数行のデータを変数に代入
iris.B <- iris[-n, ] # 偶数行のデータを変数に代入
iris.A # 分割したデータの確認
iris.B

# 奇数行のデータからアヤメの品種を予測するためのルールを発見し、偶数行のデータで検証(判別分析)
library(MASS) # パッケージの読み込み
lda.model <- lda(Species ~ ., data = iris.A) # 予測するためのルールを抽出
lda.result <- predict(lda.model, iris.B) # 偶数行のデータで検証
lda.tab <- table(iris.B$Species, lda.result$class) # 予測結果の答え合わせ
lda.tab # 答え合わせ結果の確認
sum(diag(lda.tab)) / sum(lda.tab) # 予測精度の計算

 練習問題として、電子メールの中で使われている単語や記号の頻度を用いて、そのメールがスパムかどうかの予測を行ってみましょう。使用するデータセットは、kernlabパッケージのspamです。インストールの手順は、以下のとおりです。

# kernlabパッケージのインストール
install.packages("kernlab", dependencies = TRUE)
# kernlabパッケージの読み込み
library(kernlab)
# spamデータの読み込み
data(spam)
# spamデータ(の冒頭6行)の確認
head(spam)

 では、このデータにおけるスパムメールか否か (type) という属性(目的変数)を、それ以外の全ての値(説明変数)を使って予測してみましょう。なお、予測にあたっては、データを奇数行と偶数行に分割しましょう。
 スパムメールの分類ができたら、次に、同志社大学金明哲先生がこちらで公開されている泉鏡花、岡本綺堂、島崎藤村の読点の打ち方のデータをデスクトップに保存し、データのラベルのつけ方に合った方法で、そのファイルをRに読み込みます。

# データの読み込み
mat <- read.csv("http://mjin.doshisha.ac.jp/data/IOScomma.csv", row.names = 1, header = TRUE)
# 読み込んだデータの確認
mat
# 行名の修正
rownames(mat) <- c(paste0("IZ-", 1 : 20), paste0("OK-", 1 : 20), paste0("SM-", 1 : 20))
mat

 このデータがきちんと読み込まれていることが確認できたら、matデータにクラスター分析や主成分分析を実行し、何か興味深い知見を導き出しなさい。