SlideShare a Scribd company logo
1 of 10
Download to read offline
第3章 遅延学習—最近傍法を使った分類
市東 亘
2022 年 7 月 7 日
1 概観
目 次
1 概観 1
2 最近傍法とは? 1
3 遅延学習 2
4 k 近傍法の長所 2
5 k 近傍法の短所 2
6 乳がんデータの入手 3
6.1 オリジナルデータの場合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
6.2 書籍サポートファイルの場合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
7 R での分析例 5
7.1 データの正規化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
7.2 トレーニング・データとテスト・データの分割 . . . . . . . . . . . . . . . . . . . . 5
7.3 分類学習 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
7.4 分類予測 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
7.5 予測の評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
8 class パッケージを使用した例 7
9 オリジナル実装ソース・コード 8
10 データの異なる正規化 9
2 最近傍法とは?
• 目的: データをカテゴリに分類したい.
• トレーニングデータの中で
、
 
似
、
 
て
、
 
い
、
 
る Feature のデータと同じカテゴリに分類.
1
第 3 章 遅延学習—最近傍法を使った分類
• 「似ている」= feature の値の「近さ」
(ユークリッド距離)
• k-近傍法は「近い」データを k 個抽出し,それらの相対多数のカテゴリに分類する.
• k-近傍法: k-Nearest Neighbor(k-NN)
.
「最も近いお隣さん k 個」を使った分類方法.
3 遅延学習
• 遅延学習 =Lazy Learning
• 全てのトレーニングデータをそのまま保持し,そこから neighbor を選び出す.
• 何の学習もしていない!入力と出力の関係を抽象化したモデルもない!
• 学習器としてはとっても Lazy.
• モデルがないため予測をするには全てのトレーニングデータを走査し,neighbor を探さない
といけないので時間がかかる.
4 k 近傍法の長所
• 単純で効果的.
• 土台となるデータの分布について前提条件を設けない.
• 高速に訓練できる.
学習フェーズが無いので実際にはトレーニングは何も行っていない!
5 k 近傍法の短所
• モデルを作らないので,feature が各分類とどの様に繋がりを持つのか理解するには限界が
ある.
• 適切な k を選択しなければならない.
⇒ 試行錯誤して選択するが一般には
√
N から始めるとよい.
• 分類フェーズが遅い.
• フィーチャ間で距離を比較可能にするために値の正規化が必要.
• カテゴリカル変数や欠損値(missing variables)に対し別の処理が必要になる.
西南学院大学 演習 I 2 担当 市東 亘
第 3 章 遅延学習—最近傍法を使った分類
6 乳がんデータの入手
6.1 オリジナルデータの場合
Breast Cancer Wisconsin(http://archive.ics.uci.edu/ml)
• wdbc.data: CSV ファイル.data/wdbc.csv として保存.
• wdbc.names: 符号ファイル
6.1.1 データの読み込み
テキストとの相違点.
• csv ファイルには列名が設定されていないので header=FALSE で読み込む.
• stringsAsFactors=FALSE は付けず,文字列は factor として読み込む.
wdbc <- read.csv("data/wdbc.csv", header=FALSE)
str(wdbc)
## ’data.frame’: 569 obs. of 32 variables:
## $ V1 : int 842302 842517 84300903 84348301 84358402 843786 844359 84458202 844981 84501001 ...
## $ V2 : chr "M" "M" "M" "M" ...
## $ V3 : num 18 20.6 19.7 11.4 20.3 ...
## $ V4 : num 10.4 17.8 21.2 20.4 14.3 ...
## $ V5 : num 122.8 132.9 130 77.6 135.1 ...
## $ V6 : num 1001 1326 1203 386 1297 ...
## $ V7 : num 0.1184 0.0847 0.1096 0.1425 0.1003 ...
## $ V8 : num 0.2776 0.0786 0.1599 0.2839 0.1328 ...
## $ V9 : num 0.3001 0.0869 0.1974 0.2414 0.198 ...
## $ V10: num 0.1471 0.0702 0.1279 0.1052 0.1043 ...
## $ V11: num 0.242 0.181 0.207 0.26 0.181 ...
## $ V12: num 0.0787 0.0567 0.06 0.0974 0.0588 ...
## $ V13: num 1.095 0.543 0.746 0.496 0.757 ...
## $ V14: num 0.905 0.734 0.787 1.156 0.781 ...
## $ V15: num 8.59 3.4 4.58 3.44 5.44 ...
## $ V16: num 153.4 74.1 94 27.2 94.4 ...
## $ V17: num 0.0064 0.00522 0.00615 0.00911 0.01149 ...
## $ V18: num 0.049 0.0131 0.0401 0.0746 0.0246 ...
## $ V19: num 0.0537 0.0186 0.0383 0.0566 0.0569 ...
## $ V20: num 0.0159 0.0134 0.0206 0.0187 0.0188 ...
## $ V21: num 0.03 0.0139 0.0225 0.0596 0.0176 ...
## $ V22: num 0.00619 0.00353 0.00457 0.00921 0.00511 ...
## $ V23: num 25.4 25 23.6 14.9 22.5 ...
西南学院大学 演習 I 3 担当 市東 亘
6.2 書籍サポートファイルの場合 第 3 章 遅延学習—最近傍法を使った分類
## $ V24: num 17.3 23.4 25.5 26.5 16.7 ...
## $ V25: num 184.6 158.8 152.5 98.9 152.2 ...
## $ V26: num 2019 1956 1709 568 1575 ...
## $ V27: num 0.162 0.124 0.144 0.21 0.137 ...
## $ V28: num 0.666 0.187 0.424 0.866 0.205 ...
## $ V29: num 0.712 0.242 0.45 0.687 0.4 ...
## $ V30: num 0.265 0.186 0.243 0.258 0.163 ...
## $ V31: num 0.46 0.275 0.361 0.664 0.236 ...
## $ V32: num 0.1189 0.089 0.0876 0.173 0.0768 ...
6.1.2 データの確認
テキストには ID: 87139402 のデータが表示されているので,同じデータをチェ
ック.
wdbc[wdbc$V1==87139402,]
## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
## 171 87139402 B 12.32 12.39 78.85 464.1 0.1028 0.06981 0.03987 0.037 0.1959
## V12 V13 V14 V15 V16 V17 V18 V19 V20 V21
## 171 0.05955 0.236 0.6656 1.67 17.43 0.008045 0.0118 0.01683 0.01241 0.01924
## V22 V23 V24 V25 V26 V27 V28 V29 V30 V31 V32
## 171 0.002248 13.5 15.64 86.97 549.1 0.1385 0.1266 0.1242 0.09391 0.2827 0.06771
6.1.3 符号表を参考に列名を設定
ft <- c("radius", "texture", "perimeter", "area",
"smoothness", "compactness", "concavity",
"concave.points", "symmetry", "fractal.dimension")
# ft の各要素 x に paste(x, c("mean", "se", "worst"), sep=".") を apply
three.ft <- unlist(lapply(ft, paste, c("mean", "se", "worst"), sep="."))
colnames(wdbc) <- c("id", "diagnosis", three.ft)
wdbc[1:2, 1:10]
## id diagnosis radius.mean radius.se radius.worst texture.mean texture.se
## 1 842302 M 17.99 10.38 122.8 1001 0.11840
## 2 842517 M 20.57 17.77 132.9 1326 0.08474
## texture.worst perimeter.mean perimeter.se
## 1 0.27760 0.3001 0.14710
## 2 0.07864 0.0869 0.07017
6.2 書籍サポートファイルの場合
GitHub: https://github.com/dataspelunking/MLwR/
• 「Machine Learning with R (2nd Ed.) → Chapter 03」から wisc_bc_data.csv を選択し
表示.
• 「Raw」ボタンを押し,ブラウザで別名保存する.
data/wisc_bc_data.csv として保存.
西南学院大学 演習 I 4 担当 市東 亘
第 3 章 遅延学習—最近傍法を使った分類
6.2.1 データの読み込み
# 文字列は factor として読み込む.
wdbc.book <- read.csv("data/wisc_bc_data.csv")
7 R での分析例
オリジナルデータを使って分析例を示す.
分析手順
(1) データの正規化(normalization)
(2) トレーニング・データとテスト・データの分割
(3) テスト・データを分類(予測)
• トレーニング・データによる学習はなく,各テスト・データと全トレーニング・データ
との「距離」を計算し,Nearest Neighbor k 個を抽出.
• k-NN から相対多数のカテゴリに分類する.
7.1 データの正規化
Feature 間で距離を比較できるよう 0∼1 にリスケールする.
normalize <- function(x) {
((x - min(x)) / (max(x) - min(x)))
}
# 実行例
normalize(-10:10)
## [1] 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70
## [16] 0.75 0.80 0.85 0.90 0.95 1.00
# 全数値 feature(3 列目以降)に normalize を適用
wdbc.normal <- as.data.frame(lapply(wdbc[, 3:ncol(wdbc)], normalize))
# ID と診断結果の 2 列を結合
wdbc.normal <- cbind(wdbc[, 1:2], wdbc.normal)
# 結果の一部を表示
wdbc.normal[1:3, 1:6]
## id diagnosis radius.mean radius.se radius.worst texture.mean
## 1 842302 M 0.5210374 0.0226581 0.5459885 0.3637328
## 2 842517 M 0.6431445 0.2725736 0.6157833 0.5015907
## 3 84300903 M 0.6014956 0.3902604 0.5957432 0.4494168
7.2 トレーニング・データとテスト・データの分割
トレーニング・データは母集団を反映させるためにランダム抽出する.ここではデータの 7 割を
トレーニング・データに使用し,残りをテスト・データとする.
西南学院大学 演習 I 5 担当 市東 亘
7.3 分類学習 第 3 章 遅延学習—最近傍法を使った分類
# データの行番号の 7 割をランダム抽出する.
train.index <- sample(1:nrow(wdbc.normal), size=round(0.7*nrow(wdbc.normal)))
test.index <- setdiff(1:nrow(wdbc.normal), train.index)
# データを分割
train.data <- wdbc.normal[train.index, ]
test.data <- wdbc.normal[test.index, ]
7.3 分類学習
実際にはパラメータ学習はないが,各テストデータから全トレーニングデータまでの距離を計算
し,近い順に並べたデータを準備する.
# 2 つのベクトルの距離を計算する関数を定義.
distance <- function(x, y) {
sqrt(sum((x - y)^2))
}
# 1 つのテストデータと全トレーニングデータとの距離を計算し
# train データフレームの近い順インデックスを返す.
rank.dist <- function(x, train) {
order(apply(train, MARGIN=1, distance, x))
}
# 全てのテストデータに rank.dist を適用.
knn.calc <- function(test, train) {
as.data.frame(apply(test, MARGIN=1, rank.dist, train))
}
# knn.db リストの i 番目要素に格納されたベクトルには
# i 番目のテストデータから近い順にトレーニングデータの
# インデックスが格納されている
knn.db <- knn.calc(test.data[, -1:-2], train.data[, -1:-2])
7.4 分類予測
いよいよ分類予測.分類学習で近い順に並べたトレーニングデータから,k 近傍を使って相対多
数の分類を決める.
# knn.db にもとづき k 個の近傍から分類を決定し
# test データの分類ベクトルを返す.
knn.pred <- function(knn.db, train.label, k) {
as.factor(
sapply(knn.db,
function(knn.index) {
knn <- train.label[knn.index[1:k]]
tbl <- table(knn)
names(tbl[which.max(tbl)])
}))
}
predicted <- knn.pred(knn.db, train.label=train.data[, 2], k=3)
7.5 予測の評価
if(!require(gmodels)) {
install.packages("gmodels", repos="https://cran.ism.ac.jp")
library(gmodels)
}
西南学院大学 演習 I 6 担当 市東 亘
第 3 章 遅延学習—最近傍法を使った分類
## 要求されたパッケージ gmodels をロード中です
CrossTable(x=test.data[,2], y=predicted, prop.chisq=FALSE)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 171
##
##
## | predicted
## test.data[, 2] | B | M | Row Total |
## ---------------|-----------|-----------|-----------|
## B | 112 | 1 | 113 |
## | 0.991 | 0.009 | 0.661 |
## | 0.974 | 0.018 | |
## | 0.655 | 0.006 | |
## ---------------|-----------|-----------|-----------|
## M | 3 | 55 | 58 |
## | 0.052 | 0.948 | 0.339 |
## | 0.026 | 0.982 | |
## | 0.018 | 0.322 | |
## ---------------|-----------|-----------|-----------|
## Column Total | 115 | 56 | 171 |
## | 0.673 | 0.327 | |
## ---------------|-----------|-----------|-----------|
##
##
8 class パッケージを使用した例
if(!require(class)) {
install.packages("class", repos="https://cran.ism.ac.jp")
library(class)
}
## 要求されたパッケージ class をロード中です
predicted.class <- knn(train=train.data[,-1:-2],
test=test.data[,-1:-2],
cl=train.data[,2], k=3)
CrossTable(x=test.data[,2], y=predicted.class, prop.chisq=FALSE)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
西南学院大学 演習 I 7 担当 市東 亘
第 3 章 遅延学習—最近傍法を使った分類
## Total Observations in Table: 171
##
##
## | predicted.class
## test.data[, 2] | B | M | Row Total |
## ---------------|-----------|-----------|-----------|
## B | 112 | 1 | 113 |
## | 0.991 | 0.009 | 0.661 |
## | 0.974 | 0.018 | |
## | 0.655 | 0.006 | |
## ---------------|-----------|-----------|-----------|
## M | 3 | 55 | 58 |
## | 0.052 | 0.948 | 0.339 |
## | 0.026 | 0.982 | |
## | 0.018 | 0.322 | |
## ---------------|-----------|-----------|-----------|
## Column Total | 115 | 56 | 171 |
## | 0.673 | 0.327 | |
## ---------------|-----------|-----------|-----------|
##
##
9 オリジナル実装ソース・コード
knn.calc <- function(test, train) {
distance <- function(x, y) {
sqrt(sum((x - y)^2))
}
rank.dist <- function(x, train) {
order(apply(train, MARGIN=1, distance, x))
}
as.data.frame(apply(test, MARGIN=1, rank.dist, train))
}
knn.pred <- function(knn.db, train.label, k) {
as.factor(
sapply(knn.db,
function(knn.index) {
knn <- train.label[knn.index[1:k]]
tbl <- table(knn)
names(tbl[which.max(tbl)])
}))
}
使い方
knn.db <- knn.calc(test.data[, -1:-2], train.data[, -1:-2])
predicted <- knn.pred(knn.db, train.label=train.data[, 2], k=3)
評価方法
CrossTable(x=test.data[,2], y=predicted, prop.chisq=FALSE)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
西南学院大学 演習 I 8 担当 市東 亘
第 3 章 遅延学習—最近傍法を使った分類
##
## Total Observations in Table: 171
##
##
## | predicted
## test.data[, 2] | B | M | Row Total |
## ---------------|-----------|-----------|-----------|
## B | 112 | 1 | 113 |
## | 0.991 | 0.009 | 0.661 |
## | 0.974 | 0.018 | |
## | 0.655 | 0.006 | |
## ---------------|-----------|-----------|-----------|
## M | 3 | 55 | 58 |
## | 0.052 | 0.948 | 0.339 |
## | 0.026 | 0.982 | |
## | 0.018 | 0.322 | |
## ---------------|-----------|-----------|-----------|
## Column Total | 115 | 56 | 171 |
## | 0.673 | 0.327 | |
## ---------------|-----------|-----------|-----------|
##
##
10 データの異なる正規化
標準正規化を行い同じ条件で分類してみる.
# 全数値 feature(3 列目以降)に scale() を適用
wdbc.z <- as.data.frame(scale(wdbc[, 3:ncol(wdbc)]))
# ID と診断結果の 2 列を結合
wdbc.z <- cbind(wdbc[, 1:2], wdbc.z)
# 先程と同じインデックスでデータを分割
train.data <- wdbc.z[train.index, ]
test.data <- wdbc.z[test.index, ]
# 学習と分類予測
knn.db <- knn.calc(test.data[, -1:-2], train.data[, -1:-2])
predicted <- knn.pred(knn.db, train.label=train.data[, 2], k=3)
# 結果の表示
CrossTable(x=test.data[,2], y=predicted, prop.chisq=FALSE)
##
##
## Cell Contents
## |-------------------------|
## | N |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 171
##
##
## | predicted
## test.data[, 2] | B | M | Row Total |
## ---------------|-----------|-----------|-----------|
## B | 113 | 0 | 113 |
## | 1.000 | 0.000 | 0.661 |
## | 0.966 | 0.000 | |
西南学院大学 演習 I 9 担当 市東 亘
第 3 章 遅延学習—最近傍法を使った分類
## | 0.661 | 0.000 | |
## ---------------|-----------|-----------|-----------|
## M | 4 | 54 | 58 |
## | 0.069 | 0.931 | 0.339 |
## | 0.034 | 1.000 | |
## | 0.023 | 0.316 | |
## ---------------|-----------|-----------|-----------|
## Column Total | 117 | 54 | 171 |
## | 0.684 | 0.316 | |
## ---------------|-----------|-----------|-----------|
##
##
西南学院大学 演習 I 10 担当 市東 亘

More Related Content

What's hot

流体シミュレータの製作
流体シミュレータの製作流体シミュレータの製作
流体シミュレータの製作Fumiya Watanabe
 
関東CV勉強会20140802(Face Alignment at 3000fps)
関東CV勉強会20140802(Face Alignment at 3000fps)関東CV勉強会20140802(Face Alignment at 3000fps)
関東CV勉強会20140802(Face Alignment at 3000fps)tackson5
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Atsushi Odagiri
 
第1回 Rプログラミングを始めよう(解答付き)
第1回 Rプログラミングを始めよう(解答付き)第1回 Rプログラミングを始めよう(解答付き)
第1回 Rプログラミングを始めよう(解答付き)Wataru Shito
 
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)KyutatsuNishiura
 
Javaでつくる本格形態素解析器
Javaでつくる本格形態素解析器Javaでつくる本格形態素解析器
Javaでつくる本格形態素解析器Works Applications
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話NipponAlgorithm
 
第2回 基本演算,データ型の基礎,ベクトルの操作方法(解答付き)
第2回 基本演算,データ型の基礎,ベクトルの操作方法(解答付き)第2回 基本演算,データ型の基礎,ベクトルの操作方法(解答付き)
第2回 基本演算,データ型の基礎,ベクトルの操作方法(解答付き)Wataru Shito
 
【勉強会資料】Systems Managerによるパッチ管理 for PCI DSS
【勉強会資料】Systems Managerによるパッチ管理 for PCI DSS【勉強会資料】Systems Managerによるパッチ管理 for PCI DSS
【勉強会資料】Systems Managerによるパッチ管理 for PCI DSSNobuhiro Nakayama
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021whywaita
 
220331GIF説明資料詳細.pptx
220331GIF説明資料詳細.pptx220331GIF説明資料詳細.pptx
220331GIF説明資料詳細.pptxKenji Hiramoto
 
グラフを奇麗に描画するアルゴリズム
グラフを奇麗に描画するアルゴリズムグラフを奇麗に描画するアルゴリズム
グラフを奇麗に描画するアルゴリズムmfumi
 
kintoneがAWSで目指すDevOpsQAな開発
kintoneがAWSで目指すDevOpsQAな開発kintoneがAWSで目指すDevOpsQAな開発
kintoneがAWSで目指すDevOpsQAな開発Teppei Sato
 
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージMori Ken
 
画像処理でのPythonの利用
画像処理でのPythonの利用画像処理でのPythonの利用
画像処理でのPythonの利用Yasutomo Kawanishi
 
第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料直久 住川
 
20160724_cv_sfm_revisited
20160724_cv_sfm_revisited20160724_cv_sfm_revisited
20160724_cv_sfm_revisitedKyohei Unno
 

What's hot (20)

流体シミュレータの製作
流体シミュレータの製作流体シミュレータの製作
流体シミュレータの製作
 
関東CV勉強会20140802(Face Alignment at 3000fps)
関東CV勉強会20140802(Face Alignment at 3000fps)関東CV勉強会20140802(Face Alignment at 3000fps)
関東CV勉強会20140802(Face Alignment at 3000fps)
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
 
第1回 Rプログラミングを始めよう(解答付き)
第1回 Rプログラミングを始めよう(解答付き)第1回 Rプログラミングを始めよう(解答付き)
第1回 Rプログラミングを始めよう(解答付き)
 
Web API入門
Web API入門Web API入門
Web API入門
 
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
理解して使いこなすDjangoのForm機能(2021 Django Congress発表資料)
 
Javaでつくる本格形態素解析器
Javaでつくる本格形態素解析器Javaでつくる本格形態素解析器
Javaでつくる本格形態素解析器
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
 
第2回 基本演算,データ型の基礎,ベクトルの操作方法(解答付き)
第2回 基本演算,データ型の基礎,ベクトルの操作方法(解答付き)第2回 基本演算,データ型の基礎,ベクトルの操作方法(解答付き)
第2回 基本演算,データ型の基礎,ベクトルの操作方法(解答付き)
 
【勉強会資料】Systems Managerによるパッチ管理 for PCI DSS
【勉強会資料】Systems Managerによるパッチ管理 for PCI DSS【勉強会資料】Systems Managerによるパッチ管理 for PCI DSS
【勉強会資料】Systems Managerによるパッチ管理 for PCI DSS
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
 
220331GIF説明資料詳細.pptx
220331GIF説明資料詳細.pptx220331GIF説明資料詳細.pptx
220331GIF説明資料詳細.pptx
 
グラフを奇麗に描画するアルゴリズム
グラフを奇麗に描画するアルゴリズムグラフを奇麗に描画するアルゴリズム
グラフを奇麗に描画するアルゴリズム
 
kintoneがAWSで目指すDevOpsQAな開発
kintoneがAWSで目指すDevOpsQAな開発kintoneがAWSで目指すDevOpsQAな開発
kintoneがAWSで目指すDevOpsQAな開発
 
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
06 第5.1節-第5.7節 ROS2に対応したツール/パッケージ
 
AWS IoT Greengrass V2 の紹介
AWS IoT Greengrass V2 の紹介AWS IoT Greengrass V2 の紹介
AWS IoT Greengrass V2 の紹介
 
画像処理でのPythonの利用
画像処理でのPythonの利用画像処理でのPythonの利用
画像処理でのPythonの利用
 
Amazon VPC VPN接続設定 参考資料
Amazon VPC VPN接続設定 参考資料Amazon VPC VPN接続設定 参考資料
Amazon VPC VPN接続設定 参考資料
 
第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料第9回ACRiウェビナー_日立/島田様ご講演資料
第9回ACRiウェビナー_日立/島田様ご講演資料
 
20160724_cv_sfm_revisited
20160724_cv_sfm_revisited20160724_cv_sfm_revisited
20160724_cv_sfm_revisited
 

More from Wataru Shito

統計的推定の基礎 2 -- 分散の推定
統計的推定の基礎 2 -- 分散の推定統計的推定の基礎 2 -- 分散の推定
統計的推定の基礎 2 -- 分散の推定Wataru Shito
 
統計的推定の基礎 1 -- 期待値の推定
統計的推定の基礎 1 -- 期待値の推定統計的推定の基礎 1 -- 期待値の推定
統計的推定の基礎 1 -- 期待値の推定Wataru Shito
 
第4章 確率的学習---単純ベイズを使った分類
第4章 確率的学習---単純ベイズを使った分類第4章 確率的学習---単純ベイズを使った分類
第4章 確率的学習---単純ベイズを使った分類Wataru Shito
 
演習II.第1章 ベイズ推論の考え方 Part 3.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 3.講義ノート演習II.第1章 ベイズ推論の考え方 Part 3.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 3.講義ノートWataru Shito
 
演習II.第1章 ベイズ推論の考え方 Part 3.スライド
演習II.第1章 ベイズ推論の考え方 Part 3.スライド演習II.第1章 ベイズ推論の考え方 Part 3.スライド
演習II.第1章 ベイズ推論の考え方 Part 3.スライドWataru Shito
 
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノートWataru Shito
 
演習II.第1章 ベイズ推論の考え方 Part 2.スライド
演習II.第1章 ベイズ推論の考え方 Part 2.スライド演習II.第1章 ベイズ推論の考え方 Part 2.スライド
演習II.第1章 ベイズ推論の考え方 Part 2.スライドWataru Shito
 
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノートWataru Shito
 
マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」
マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」
マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」Wataru Shito
 
経済数学II 「第9章 最適化(Optimization)」
経済数学II 「第9章 最適化(Optimization)」経済数学II 「第9章 最適化(Optimization)」
経済数学II 「第9章 最適化(Optimization)」Wataru Shito
 
マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」
マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」
マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」Wataru Shito
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)Wataru Shito
 
第8回 大規模データを用いたデータフレーム操作実習(2)
第8回 大規模データを用いたデータフレーム操作実習(2)第8回 大規模データを用いたデータフレーム操作実習(2)
第8回 大規模データを用いたデータフレーム操作実習(2)Wataru Shito
 
経済数学II 「第12章 制約つき最適化」
経済数学II 「第12章 制約つき最適化」経済数学II 「第12章 制約つき最適化」
経済数学II 「第12章 制約つき最適化」Wataru Shito
 
マクロ経済学I 「第9章 総需要 I」
マクロ経済学I 「第9章 総需要 I」マクロ経済学I 「第9章 総需要 I」
マクロ経済学I 「第9章 総需要 I」Wataru Shito
 
経済数学II 「第11章 選択変数が2個以上の場合の最適化」
経済数学II 「第11章 選択変数が2個以上の場合の最適化」経済数学II 「第11章 選択変数が2個以上の場合の最適化」
経済数学II 「第11章 選択変数が2個以上の場合の最適化」Wataru Shito
 
マクロ経済学I 「第6章 開放経済の長期分析」
マクロ経済学I 「第6章 開放経済の長期分析」マクロ経済学I 「第6章 開放経済の長期分析」
マクロ経済学I 「第6章 開放経済の長期分析」Wataru Shito
 
経済数学II 「第8章 一般関数型モデルの比較静学」
経済数学II 「第8章 一般関数型モデルの比較静学」経済数学II 「第8章 一般関数型モデルの比較静学」
経済数学II 「第8章 一般関数型モデルの比較静学」Wataru Shito
 
マクロ経済学I 「第4,5章 貨幣とインフレーション」
マクロ経済学I 「第4,5章 貨幣とインフレーション」マクロ経済学I 「第4,5章 貨幣とインフレーション」
マクロ経済学I 「第4,5章 貨幣とインフレーション」Wataru Shito
 
マクロ経済学I 「第3章 長期閉鎖経済モデル」
マクロ経済学I 「第3章 長期閉鎖経済モデル」マクロ経済学I 「第3章 長期閉鎖経済モデル」
マクロ経済学I 「第3章 長期閉鎖経済モデル」Wataru Shito
 

More from Wataru Shito (20)

統計的推定の基礎 2 -- 分散の推定
統計的推定の基礎 2 -- 分散の推定統計的推定の基礎 2 -- 分散の推定
統計的推定の基礎 2 -- 分散の推定
 
統計的推定の基礎 1 -- 期待値の推定
統計的推定の基礎 1 -- 期待値の推定統計的推定の基礎 1 -- 期待値の推定
統計的推定の基礎 1 -- 期待値の推定
 
第4章 確率的学習---単純ベイズを使った分類
第4章 確率的学習---単純ベイズを使った分類第4章 確率的学習---単純ベイズを使った分類
第4章 確率的学習---単純ベイズを使った分類
 
演習II.第1章 ベイズ推論の考え方 Part 3.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 3.講義ノート演習II.第1章 ベイズ推論の考え方 Part 3.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 3.講義ノート
 
演習II.第1章 ベイズ推論の考え方 Part 3.スライド
演習II.第1章 ベイズ推論の考え方 Part 3.スライド演習II.第1章 ベイズ推論の考え方 Part 3.スライド
演習II.第1章 ベイズ推論の考え方 Part 3.スライド
 
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 2.講義ノート
 
演習II.第1章 ベイズ推論の考え方 Part 2.スライド
演習II.第1章 ベイズ推論の考え方 Part 2.スライド演習II.第1章 ベイズ推論の考え方 Part 2.スライド
演習II.第1章 ベイズ推論の考え方 Part 2.スライド
 
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
演習II.第1章 ベイズ推論の考え方 Part 1.講義ノート
 
マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」
マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」
マクロ経済学I 「第8章 総需要・総供給分析(AD-AS分析)」
 
経済数学II 「第9章 最適化(Optimization)」
経済数学II 「第9章 最適化(Optimization)」経済数学II 「第9章 最適化(Optimization)」
経済数学II 「第9章 最適化(Optimization)」
 
マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」
マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」
マクロ経済学I 「第10章 総需要 II.IS-LM分析とAD曲線」
 
第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)第9回 大規模データを用いたデータフレーム操作実習(3)
第9回 大規模データを用いたデータフレーム操作実習(3)
 
第8回 大規模データを用いたデータフレーム操作実習(2)
第8回 大規模データを用いたデータフレーム操作実習(2)第8回 大規模データを用いたデータフレーム操作実習(2)
第8回 大規模データを用いたデータフレーム操作実習(2)
 
経済数学II 「第12章 制約つき最適化」
経済数学II 「第12章 制約つき最適化」経済数学II 「第12章 制約つき最適化」
経済数学II 「第12章 制約つき最適化」
 
マクロ経済学I 「第9章 総需要 I」
マクロ経済学I 「第9章 総需要 I」マクロ経済学I 「第9章 総需要 I」
マクロ経済学I 「第9章 総需要 I」
 
経済数学II 「第11章 選択変数が2個以上の場合の最適化」
経済数学II 「第11章 選択変数が2個以上の場合の最適化」経済数学II 「第11章 選択変数が2個以上の場合の最適化」
経済数学II 「第11章 選択変数が2個以上の場合の最適化」
 
マクロ経済学I 「第6章 開放経済の長期分析」
マクロ経済学I 「第6章 開放経済の長期分析」マクロ経済学I 「第6章 開放経済の長期分析」
マクロ経済学I 「第6章 開放経済の長期分析」
 
経済数学II 「第8章 一般関数型モデルの比較静学」
経済数学II 「第8章 一般関数型モデルの比較静学」経済数学II 「第8章 一般関数型モデルの比較静学」
経済数学II 「第8章 一般関数型モデルの比較静学」
 
マクロ経済学I 「第4,5章 貨幣とインフレーション」
マクロ経済学I 「第4,5章 貨幣とインフレーション」マクロ経済学I 「第4,5章 貨幣とインフレーション」
マクロ経済学I 「第4,5章 貨幣とインフレーション」
 
マクロ経済学I 「第3章 長期閉鎖経済モデル」
マクロ経済学I 「第3章 長期閉鎖経済モデル」マクロ経済学I 「第3章 長期閉鎖経済モデル」
マクロ経済学I 「第3章 長期閉鎖経済モデル」
 

第3章 遅延学習---最近傍法を使った分類

  • 1. 第3章 遅延学習—最近傍法を使った分類 市東 亘 2022 年 7 月 7 日 1 概観 目 次 1 概観 1 2 最近傍法とは? 1 3 遅延学習 2 4 k 近傍法の長所 2 5 k 近傍法の短所 2 6 乳がんデータの入手 3 6.1 オリジナルデータの場合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 6.2 書籍サポートファイルの場合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 7 R での分析例 5 7.1 データの正規化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 7.2 トレーニング・データとテスト・データの分割 . . . . . . . . . . . . . . . . . . . . 5 7.3 分類学習 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7.4 分類予測 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7.5 予測の評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 8 class パッケージを使用した例 7 9 オリジナル実装ソース・コード 8 10 データの異なる正規化 9 2 最近傍法とは? • 目的: データをカテゴリに分類したい. • トレーニングデータの中で 、   似 、   て 、   い 、   る Feature のデータと同じカテゴリに分類. 1
  • 2. 第 3 章 遅延学習—最近傍法を使った分類 • 「似ている」= feature の値の「近さ」 (ユークリッド距離) • k-近傍法は「近い」データを k 個抽出し,それらの相対多数のカテゴリに分類する. • k-近傍法: k-Nearest Neighbor(k-NN) . 「最も近いお隣さん k 個」を使った分類方法. 3 遅延学習 • 遅延学習 =Lazy Learning • 全てのトレーニングデータをそのまま保持し,そこから neighbor を選び出す. • 何の学習もしていない!入力と出力の関係を抽象化したモデルもない! • 学習器としてはとっても Lazy. • モデルがないため予測をするには全てのトレーニングデータを走査し,neighbor を探さない といけないので時間がかかる. 4 k 近傍法の長所 • 単純で効果的. • 土台となるデータの分布について前提条件を設けない. • 高速に訓練できる. 学習フェーズが無いので実際にはトレーニングは何も行っていない! 5 k 近傍法の短所 • モデルを作らないので,feature が各分類とどの様に繋がりを持つのか理解するには限界が ある. • 適切な k を選択しなければならない. ⇒ 試行錯誤して選択するが一般には √ N から始めるとよい. • 分類フェーズが遅い. • フィーチャ間で距離を比較可能にするために値の正規化が必要. • カテゴリカル変数や欠損値(missing variables)に対し別の処理が必要になる. 西南学院大学 演習 I 2 担当 市東 亘
  • 3. 第 3 章 遅延学習—最近傍法を使った分類 6 乳がんデータの入手 6.1 オリジナルデータの場合 Breast Cancer Wisconsin(http://archive.ics.uci.edu/ml) • wdbc.data: CSV ファイル.data/wdbc.csv として保存. • wdbc.names: 符号ファイル 6.1.1 データの読み込み テキストとの相違点. • csv ファイルには列名が設定されていないので header=FALSE で読み込む. • stringsAsFactors=FALSE は付けず,文字列は factor として読み込む. wdbc <- read.csv("data/wdbc.csv", header=FALSE) str(wdbc) ## ’data.frame’: 569 obs. of 32 variables: ## $ V1 : int 842302 842517 84300903 84348301 84358402 843786 844359 84458202 844981 84501001 ... ## $ V2 : chr "M" "M" "M" "M" ... ## $ V3 : num 18 20.6 19.7 11.4 20.3 ... ## $ V4 : num 10.4 17.8 21.2 20.4 14.3 ... ## $ V5 : num 122.8 132.9 130 77.6 135.1 ... ## $ V6 : num 1001 1326 1203 386 1297 ... ## $ V7 : num 0.1184 0.0847 0.1096 0.1425 0.1003 ... ## $ V8 : num 0.2776 0.0786 0.1599 0.2839 0.1328 ... ## $ V9 : num 0.3001 0.0869 0.1974 0.2414 0.198 ... ## $ V10: num 0.1471 0.0702 0.1279 0.1052 0.1043 ... ## $ V11: num 0.242 0.181 0.207 0.26 0.181 ... ## $ V12: num 0.0787 0.0567 0.06 0.0974 0.0588 ... ## $ V13: num 1.095 0.543 0.746 0.496 0.757 ... ## $ V14: num 0.905 0.734 0.787 1.156 0.781 ... ## $ V15: num 8.59 3.4 4.58 3.44 5.44 ... ## $ V16: num 153.4 74.1 94 27.2 94.4 ... ## $ V17: num 0.0064 0.00522 0.00615 0.00911 0.01149 ... ## $ V18: num 0.049 0.0131 0.0401 0.0746 0.0246 ... ## $ V19: num 0.0537 0.0186 0.0383 0.0566 0.0569 ... ## $ V20: num 0.0159 0.0134 0.0206 0.0187 0.0188 ... ## $ V21: num 0.03 0.0139 0.0225 0.0596 0.0176 ... ## $ V22: num 0.00619 0.00353 0.00457 0.00921 0.00511 ... ## $ V23: num 25.4 25 23.6 14.9 22.5 ... 西南学院大学 演習 I 3 担当 市東 亘
  • 4. 6.2 書籍サポートファイルの場合 第 3 章 遅延学習—最近傍法を使った分類 ## $ V24: num 17.3 23.4 25.5 26.5 16.7 ... ## $ V25: num 184.6 158.8 152.5 98.9 152.2 ... ## $ V26: num 2019 1956 1709 568 1575 ... ## $ V27: num 0.162 0.124 0.144 0.21 0.137 ... ## $ V28: num 0.666 0.187 0.424 0.866 0.205 ... ## $ V29: num 0.712 0.242 0.45 0.687 0.4 ... ## $ V30: num 0.265 0.186 0.243 0.258 0.163 ... ## $ V31: num 0.46 0.275 0.361 0.664 0.236 ... ## $ V32: num 0.1189 0.089 0.0876 0.173 0.0768 ... 6.1.2 データの確認 テキストには ID: 87139402 のデータが表示されているので,同じデータをチェ ック. wdbc[wdbc$V1==87139402,] ## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 ## 171 87139402 B 12.32 12.39 78.85 464.1 0.1028 0.06981 0.03987 0.037 0.1959 ## V12 V13 V14 V15 V16 V17 V18 V19 V20 V21 ## 171 0.05955 0.236 0.6656 1.67 17.43 0.008045 0.0118 0.01683 0.01241 0.01924 ## V22 V23 V24 V25 V26 V27 V28 V29 V30 V31 V32 ## 171 0.002248 13.5 15.64 86.97 549.1 0.1385 0.1266 0.1242 0.09391 0.2827 0.06771 6.1.3 符号表を参考に列名を設定 ft <- c("radius", "texture", "perimeter", "area", "smoothness", "compactness", "concavity", "concave.points", "symmetry", "fractal.dimension") # ft の各要素 x に paste(x, c("mean", "se", "worst"), sep=".") を apply three.ft <- unlist(lapply(ft, paste, c("mean", "se", "worst"), sep=".")) colnames(wdbc) <- c("id", "diagnosis", three.ft) wdbc[1:2, 1:10] ## id diagnosis radius.mean radius.se radius.worst texture.mean texture.se ## 1 842302 M 17.99 10.38 122.8 1001 0.11840 ## 2 842517 M 20.57 17.77 132.9 1326 0.08474 ## texture.worst perimeter.mean perimeter.se ## 1 0.27760 0.3001 0.14710 ## 2 0.07864 0.0869 0.07017 6.2 書籍サポートファイルの場合 GitHub: https://github.com/dataspelunking/MLwR/ • 「Machine Learning with R (2nd Ed.) → Chapter 03」から wisc_bc_data.csv を選択し 表示. • 「Raw」ボタンを押し,ブラウザで別名保存する. data/wisc_bc_data.csv として保存. 西南学院大学 演習 I 4 担当 市東 亘
  • 5. 第 3 章 遅延学習—最近傍法を使った分類 6.2.1 データの読み込み # 文字列は factor として読み込む. wdbc.book <- read.csv("data/wisc_bc_data.csv") 7 R での分析例 オリジナルデータを使って分析例を示す. 分析手順 (1) データの正規化(normalization) (2) トレーニング・データとテスト・データの分割 (3) テスト・データを分類(予測) • トレーニング・データによる学習はなく,各テスト・データと全トレーニング・データ との「距離」を計算し,Nearest Neighbor k 個を抽出. • k-NN から相対多数のカテゴリに分類する. 7.1 データの正規化 Feature 間で距離を比較できるよう 0∼1 にリスケールする. normalize <- function(x) { ((x - min(x)) / (max(x) - min(x))) } # 実行例 normalize(-10:10) ## [1] 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70 ## [16] 0.75 0.80 0.85 0.90 0.95 1.00 # 全数値 feature(3 列目以降)に normalize を適用 wdbc.normal <- as.data.frame(lapply(wdbc[, 3:ncol(wdbc)], normalize)) # ID と診断結果の 2 列を結合 wdbc.normal <- cbind(wdbc[, 1:2], wdbc.normal) # 結果の一部を表示 wdbc.normal[1:3, 1:6] ## id diagnosis radius.mean radius.se radius.worst texture.mean ## 1 842302 M 0.5210374 0.0226581 0.5459885 0.3637328 ## 2 842517 M 0.6431445 0.2725736 0.6157833 0.5015907 ## 3 84300903 M 0.6014956 0.3902604 0.5957432 0.4494168 7.2 トレーニング・データとテスト・データの分割 トレーニング・データは母集団を反映させるためにランダム抽出する.ここではデータの 7 割を トレーニング・データに使用し,残りをテスト・データとする. 西南学院大学 演習 I 5 担当 市東 亘
  • 6. 7.3 分類学習 第 3 章 遅延学習—最近傍法を使った分類 # データの行番号の 7 割をランダム抽出する. train.index <- sample(1:nrow(wdbc.normal), size=round(0.7*nrow(wdbc.normal))) test.index <- setdiff(1:nrow(wdbc.normal), train.index) # データを分割 train.data <- wdbc.normal[train.index, ] test.data <- wdbc.normal[test.index, ] 7.3 分類学習 実際にはパラメータ学習はないが,各テストデータから全トレーニングデータまでの距離を計算 し,近い順に並べたデータを準備する. # 2 つのベクトルの距離を計算する関数を定義. distance <- function(x, y) { sqrt(sum((x - y)^2)) } # 1 つのテストデータと全トレーニングデータとの距離を計算し # train データフレームの近い順インデックスを返す. rank.dist <- function(x, train) { order(apply(train, MARGIN=1, distance, x)) } # 全てのテストデータに rank.dist を適用. knn.calc <- function(test, train) { as.data.frame(apply(test, MARGIN=1, rank.dist, train)) } # knn.db リストの i 番目要素に格納されたベクトルには # i 番目のテストデータから近い順にトレーニングデータの # インデックスが格納されている knn.db <- knn.calc(test.data[, -1:-2], train.data[, -1:-2]) 7.4 分類予測 いよいよ分類予測.分類学習で近い順に並べたトレーニングデータから,k 近傍を使って相対多 数の分類を決める. # knn.db にもとづき k 個の近傍から分類を決定し # test データの分類ベクトルを返す. knn.pred <- function(knn.db, train.label, k) { as.factor( sapply(knn.db, function(knn.index) { knn <- train.label[knn.index[1:k]] tbl <- table(knn) names(tbl[which.max(tbl)]) })) } predicted <- knn.pred(knn.db, train.label=train.data[, 2], k=3) 7.5 予測の評価 if(!require(gmodels)) { install.packages("gmodels", repos="https://cran.ism.ac.jp") library(gmodels) } 西南学院大学 演習 I 6 担当 市東 亘
  • 7. 第 3 章 遅延学習—最近傍法を使った分類 ## 要求されたパッケージ gmodels をロード中です CrossTable(x=test.data[,2], y=predicted, prop.chisq=FALSE) ## ## ## Cell Contents ## |-------------------------| ## | N | ## | N / Row Total | ## | N / Col Total | ## | N / Table Total | ## |-------------------------| ## ## ## Total Observations in Table: 171 ## ## ## | predicted ## test.data[, 2] | B | M | Row Total | ## ---------------|-----------|-----------|-----------| ## B | 112 | 1 | 113 | ## | 0.991 | 0.009 | 0.661 | ## | 0.974 | 0.018 | | ## | 0.655 | 0.006 | | ## ---------------|-----------|-----------|-----------| ## M | 3 | 55 | 58 | ## | 0.052 | 0.948 | 0.339 | ## | 0.026 | 0.982 | | ## | 0.018 | 0.322 | | ## ---------------|-----------|-----------|-----------| ## Column Total | 115 | 56 | 171 | ## | 0.673 | 0.327 | | ## ---------------|-----------|-----------|-----------| ## ## 8 class パッケージを使用した例 if(!require(class)) { install.packages("class", repos="https://cran.ism.ac.jp") library(class) } ## 要求されたパッケージ class をロード中です predicted.class <- knn(train=train.data[,-1:-2], test=test.data[,-1:-2], cl=train.data[,2], k=3) CrossTable(x=test.data[,2], y=predicted.class, prop.chisq=FALSE) ## ## ## Cell Contents ## |-------------------------| ## | N | ## | N / Row Total | ## | N / Col Total | ## | N / Table Total | ## |-------------------------| ## ## 西南学院大学 演習 I 7 担当 市東 亘
  • 8. 第 3 章 遅延学習—最近傍法を使った分類 ## Total Observations in Table: 171 ## ## ## | predicted.class ## test.data[, 2] | B | M | Row Total | ## ---------------|-----------|-----------|-----------| ## B | 112 | 1 | 113 | ## | 0.991 | 0.009 | 0.661 | ## | 0.974 | 0.018 | | ## | 0.655 | 0.006 | | ## ---------------|-----------|-----------|-----------| ## M | 3 | 55 | 58 | ## | 0.052 | 0.948 | 0.339 | ## | 0.026 | 0.982 | | ## | 0.018 | 0.322 | | ## ---------------|-----------|-----------|-----------| ## Column Total | 115 | 56 | 171 | ## | 0.673 | 0.327 | | ## ---------------|-----------|-----------|-----------| ## ## 9 オリジナル実装ソース・コード knn.calc <- function(test, train) { distance <- function(x, y) { sqrt(sum((x - y)^2)) } rank.dist <- function(x, train) { order(apply(train, MARGIN=1, distance, x)) } as.data.frame(apply(test, MARGIN=1, rank.dist, train)) } knn.pred <- function(knn.db, train.label, k) { as.factor( sapply(knn.db, function(knn.index) { knn <- train.label[knn.index[1:k]] tbl <- table(knn) names(tbl[which.max(tbl)]) })) } 使い方 knn.db <- knn.calc(test.data[, -1:-2], train.data[, -1:-2]) predicted <- knn.pred(knn.db, train.label=train.data[, 2], k=3) 評価方法 CrossTable(x=test.data[,2], y=predicted, prop.chisq=FALSE) ## ## ## Cell Contents ## |-------------------------| ## | N | ## | N / Row Total | ## | N / Col Total | ## | N / Table Total | ## |-------------------------| ## 西南学院大学 演習 I 8 担当 市東 亘
  • 9. 第 3 章 遅延学習—最近傍法を使った分類 ## ## Total Observations in Table: 171 ## ## ## | predicted ## test.data[, 2] | B | M | Row Total | ## ---------------|-----------|-----------|-----------| ## B | 112 | 1 | 113 | ## | 0.991 | 0.009 | 0.661 | ## | 0.974 | 0.018 | | ## | 0.655 | 0.006 | | ## ---------------|-----------|-----------|-----------| ## M | 3 | 55 | 58 | ## | 0.052 | 0.948 | 0.339 | ## | 0.026 | 0.982 | | ## | 0.018 | 0.322 | | ## ---------------|-----------|-----------|-----------| ## Column Total | 115 | 56 | 171 | ## | 0.673 | 0.327 | | ## ---------------|-----------|-----------|-----------| ## ## 10 データの異なる正規化 標準正規化を行い同じ条件で分類してみる. # 全数値 feature(3 列目以降)に scale() を適用 wdbc.z <- as.data.frame(scale(wdbc[, 3:ncol(wdbc)])) # ID と診断結果の 2 列を結合 wdbc.z <- cbind(wdbc[, 1:2], wdbc.z) # 先程と同じインデックスでデータを分割 train.data <- wdbc.z[train.index, ] test.data <- wdbc.z[test.index, ] # 学習と分類予測 knn.db <- knn.calc(test.data[, -1:-2], train.data[, -1:-2]) predicted <- knn.pred(knn.db, train.label=train.data[, 2], k=3) # 結果の表示 CrossTable(x=test.data[,2], y=predicted, prop.chisq=FALSE) ## ## ## Cell Contents ## |-------------------------| ## | N | ## | N / Row Total | ## | N / Col Total | ## | N / Table Total | ## |-------------------------| ## ## ## Total Observations in Table: 171 ## ## ## | predicted ## test.data[, 2] | B | M | Row Total | ## ---------------|-----------|-----------|-----------| ## B | 113 | 0 | 113 | ## | 1.000 | 0.000 | 0.661 | ## | 0.966 | 0.000 | | 西南学院大学 演習 I 9 担当 市東 亘
  • 10. 第 3 章 遅延学習—最近傍法を使った分類 ## | 0.661 | 0.000 | | ## ---------------|-----------|-----------|-----------| ## M | 4 | 54 | 58 | ## | 0.069 | 0.931 | 0.339 | ## | 0.034 | 1.000 | | ## | 0.023 | 0.316 | | ## ---------------|-----------|-----------|-----------| ## Column Total | 117 | 54 | 171 | ## | 0.684 | 0.316 | | ## ---------------|-----------|-----------|-----------| ## ## 西南学院大学 演習 I 10 担当 市東 亘