データサイエンティスト養成読本

データサイエンティスト養成読本

データサイエンティスト養成読本 [ビッグデータ時代のビジネスを支えるデータ分析力が身につく! ] (Software Design plus)

データサイエンティスト養成読本 [ビッグデータ時代のビジネスを支えるデータ分析力が身につく! ] (Software Design plus)

特集1 データ分析実績入門

第1章 Rで統計解析をはじめよう

p.45 まで。

  • 多次元尺度法(MDS)
    • データ間の距離や類似度を使って仮想的なマップを作成する手法
  • クラスタリング
    • 多数の変数で表現されたデータを類似度を元に似ているもの同士をグルーピングする手法
  • k-means
  • 機械学習
    • SVM (Supprt Vector Machine)
      • 2つのクラスを分類するための分離平面を引く手法
    • ランダムフォレスト
      • 決定木の集団学習によって高精度な回帰予測やクラス分類を行う手法
# MDS
install.packages("stats")
install.packages("ggplot2")
library(stats)
library(ggplot2)

hdist <- read.table("HokkaidoCitiesMDS.tsv", header = F)
hcities <- c("札幌", "旭川", "稚内市", "釧路市", "帯広市", "室蘭市", "函館", "小樽")
names(hdist)  <- hcities
rownames(hdist) <- hcities

hdist.cmd <- cmdscale(hdist)
hdist.cmd.df <- as.data.frame(hdist.cmd)
hdist.cmd.df$city <- rownames(hdist.cmd.df)
names(hdist.cmd.df) <- c("x", "y", "city")

# geom_text で family 指定しないと日本語文字化けする
ggplot(hdist.cmd.df, aes(x = x, y = y, label = city)) +
  geom_text(family = "Hiragino Kaku Gothic Pro W3") +
  theme_bw(16)

# k-means の実行
state.km <- kmeans(scale(state.x77[, 1:6]), 3)
state.pca.df <- data.frame(state.pca$x)
state.pca.df$name <- rownames(state.pca.df)
state.pca.df$cluster <- as.factor(state.km$cluster)

ggplot(state.pca.df, aes(x = PC1, y = PC2, label = name, col = cluster)) +
  geom_text() +
  theme_bw(16)

# レーダーチャート
install.packages("fmsb")
library(fmsb)

df <- as.data.frame(scale(state.km$centers))
dfmax <- apply(df, 2, max) + 1
dfmin <- apply(df, 2, min) - 1
df <- rbind(dfmax, dfmin, df)

radarchart(df, seg = 5, plty = 1, pcol = rainbow(3))
legend("topright", legend = 1:3, col = rainbow(3), lty = 1)

# caret による SVM とランダムフォレストの実行
install.packages("caret")
install.packages("e1071")
install.packages("kernlab")
install.packages("randomForest")

library(caret)
library(e1071)
library(kernlab)

data(spam)
head(spam)
table(spam[, 58])

train.index <- createDataPartition(spam$type, p = 0.5, list = F)
spam.train <- spam[train.index,]
spam.test <- spam[-train.index,]

# training 方法のカスタマイズ: LGOCV で75%を training に使い5回繰り返す
fitControl <- trainControl(method = "LGOCV", p = 0.75, number = 5)

# SVM
spam.svm <- train(spam.train[, -58], spam.train$type,
  method = "svmRadial",
  preProcess = c("center", "scale"),
  trControl = fitControl)

# ランダムフォレスト
spam.rf <- train(spam.train[, -58], spam.train$type,
  method = "rf",
  preProcess = c("center", "scale"),
  trControl = fitControl)

allPred <- extractPrediction(list(spam.svm, spam.rf),
  testX = spam.test[, -58], testY = spam.test$type)

testPred <- allPred[allPred$dataType == "Test",]

tp.svm <- testPred[testPred$model == "svmRadial",]
tp.rf <- testPred[testPred$model == "rf",]

confusionMatrix(tp.svm$pred, tp.svm$obs)
confusionMatrix(tp.rf$pred, tp.rf$obs)

f:id:yossk:20150427231506j:plain f:id:yossk:20150427231517j:plain f:id:yossk:20150427231524j:plain

メモ

RStudio を入れたときか R を入れたときかどちらかわからないが、 気が付いたら .Rprofile が自動で作成されていて、グラフで日本語が文字化けしないようになっていた。
が、MDSのグラフを表示する際、グラフ内の日本語が文字化けした。 これは geom_text に family を指定することでとりあえず解決。

また、RStudio では日本語入力が確定しないと表示されなくて、日本語入力が辛い。 結果、 Atom に language-r を入れて、Atom で書いた。 RStudio ではそのファイルを随時更新して実行した。

Windows でも Mac でも同じように使えるので、Atom 重宝してる。

f:id:yossk:20150427233355j:plain