質問編集履歴
5
タイトルの修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Rで
|
1
|
+
RでSHAP値を算出したいです
|
test
CHANGED
File without changes
|
4
コードの整理,加筆
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,27 +1,9 @@
|
|
1
1
|
### 前提
|
2
2
|
|
3
3
|
プログラミングと分析は独学なので,間違っている箇所やわかりにくい箇所があるかもしれません。ご容赦ください。
|
4
|
-
|
4
|
+
SHAP値を算出,図示(=結果を図で出力)したいと思っています。ご助力のほどどうぞよろしくお願いいたします。
|
5
5
|
|
6
6
|
```R
|
7
|
-
#パッケージ読み込み
|
8
|
-
library(dplyr); library("SHAPforxgboost");
|
9
|
-
library("ggplot2"); library("xgboost");
|
10
|
-
library("data.table"); library("here");
|
11
|
-
library("Matrix"); library("farff");library("OpenML")
|
12
|
-
|
13
|
-
#irisデータのSpeciesを目的変数にする
|
14
|
-
iris <- dplyr::mutate(iris, Species = str_replace_all
|
15
|
-
(Species , pattern = c("setosa" = "0", "versicolor" = "1","virginica" = "2")))
|
16
|
-
|
17
|
-
#データフレームをxgb.DMatrix()関数でDMatrix形式にする
|
18
|
-
df.train.dt <- data.table(df.train,keep.rownames=F)
|
19
|
-
df.test.dt <- data.table(df.test,keep.rownames=F)
|
20
|
-
model.data.mx <- sparse.model.matrix(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, df.train.dt)
|
21
|
-
model.data.dm <- xgb.DMatrix(model.data.mx,label=df.train.dt$Species)
|
22
|
-
pre.data.mx <- sparse.model.matrix(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, df.test.dt)
|
23
|
-
pre.data.dm <- xgb.DMatrix(pre.data.mx,label=df.test$Species)
|
24
|
-
|
25
7
|
#XGBoostパラメータ(デフォルト値)
|
26
8
|
params <- list(
|
27
9
|
eta=0.3,
|
@@ -41,7 +23,7 @@
|
|
41
23
|
booster="gbtree", nrounds=100, verbose=1) #目的変数yyyは2値(0, 1)です~~
|
42
24
|
|
43
25
|
xgb.result <- xgb.train(params=params, data=model.data.dm, label=df.train.dt$Species,
|
44
|
-
num_class=3, objective="multi:softprob", booster="gbtree", nrounds=100, verbose=1)
|
26
|
+
num_class=3, objective="multi:softprob", booster="gbtree", nrounds=100, verbose=1)#irisデータのSpeciesを目的変数にする
|
45
27
|
|
46
28
|
#評価
|
47
29
|
pred <- predict(object=xgb.result,newdata=pre.data.dm)
|
@@ -53,7 +35,7 @@
|
|
53
35
|
|
54
36
|
### 実現したいこと
|
55
37
|
|
56
|
-
-SHAP値を算出,結果を図で出力したいです
|
38
|
+
-SHAP値を算出,結果を図で出力したいです(「Feature Importance」「dependence plot」「summary plot」)
|
57
39
|
|
58
40
|
### 発生している問題・エラーメッセージ
|
59
41
|
|
3
ミスの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -17,8 +17,6 @@
|
|
17
17
|
#データフレームをxgb.DMatrix()関数でDMatrix形式にする
|
18
18
|
df.train.dt <- data.table(df.train,keep.rownames=F)
|
19
19
|
df.test.dt <- data.table(df.test,keep.rownames=F)
|
20
|
-
options(na.action='na.omit')
|
21
|
-
options(na.action='na.pass')
|
22
20
|
model.data.mx <- sparse.model.matrix(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, df.train.dt)
|
23
21
|
model.data.dm <- xgb.DMatrix(model.data.mx,label=df.train.dt$Species)
|
24
22
|
pre.data.mx <- sparse.model.matrix(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, df.test.dt)
|
2
ミスの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -13,15 +13,6 @@
|
|
13
13
|
#irisデータのSpeciesを目的変数にする
|
14
14
|
iris <- dplyr::mutate(iris, Species = str_replace_all
|
15
15
|
(Species , pattern = c("setosa" = "0", "versicolor" = "1","virginica" = "2")))
|
16
|
-
|
17
|
-
#データの分割
|
18
|
-
set.seed(123)
|
19
|
-
df.rows = nrow(iris)
|
20
|
-
train.rate = 0.8
|
21
|
-
train.index <- sample(df.rows,df.rows * train.rate)
|
22
|
-
df.train = iris[train.index,] #訓練データ
|
23
|
-
df.test = iris[-train.index,] #テストデータ
|
24
|
-
cat("train =",nrow(df.train),"test= ",nrow(df.test))
|
25
16
|
|
26
17
|
#データフレームをxgb.DMatrix()関数でDMatrix形式にする
|
27
18
|
df.train.dt <- data.table(df.train,keep.rownames=F)
|
1
架空データでなくirisデータに置き換えた
test
CHANGED
File without changes
|
test
CHANGED
@@ -10,15 +10,28 @@
|
|
10
10
|
library("data.table"); library("here");
|
11
11
|
library("Matrix"); library("farff");library("OpenML")
|
12
12
|
|
13
|
+
#irisデータのSpeciesを目的変数にする
|
14
|
+
iris <- dplyr::mutate(iris, Species = str_replace_all
|
15
|
+
(Species , pattern = c("setosa" = "0", "versicolor" = "1","virginica" = "2")))
|
16
|
+
|
17
|
+
#データの分割
|
18
|
+
set.seed(123)
|
19
|
+
df.rows = nrow(iris)
|
20
|
+
train.rate = 0.8
|
21
|
+
train.index <- sample(df.rows,df.rows * train.rate)
|
22
|
+
df.train = iris[train.index,] #訓練データ
|
23
|
+
df.test = iris[-train.index,] #テストデータ
|
24
|
+
cat("train =",nrow(df.train),"test= ",nrow(df.test))
|
25
|
+
|
13
26
|
#データフレームをxgb.DMatrix()関数でDMatrix形式にする
|
14
27
|
df.train.dt <- data.table(df.train,keep.rownames=F)
|
15
28
|
df.test.dt <- data.table(df.test,keep.rownames=F)
|
16
29
|
options(na.action='na.omit')
|
17
30
|
options(na.action='na.pass')
|
18
|
-
model.data.mx <- sparse.model.matrix(
|
31
|
+
model.data.mx <- sparse.model.matrix(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, df.train.dt)
|
19
|
-
model.data.dm <- xgb.DMatrix(model.data.mx,label=df.train.dt$
|
32
|
+
model.data.dm <- xgb.DMatrix(model.data.mx,label=df.train.dt$Species)
|
20
|
-
pre.data.mx <- sparse.model.matrix(
|
33
|
+
pre.data.mx <- sparse.model.matrix(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, df.test.dt)
|
21
|
-
pre.data.dm <- xgb.DMatrix(pre.data.mx,label=df.test$
|
34
|
+
pre.data.dm <- xgb.DMatrix(pre.data.mx,label=df.test$Species)
|
22
35
|
|
23
36
|
#XGBoostパラメータ(デフォルト値)
|
24
37
|
params <- list(
|
@@ -34,13 +47,16 @@
|
|
34
47
|
alpha=0
|
35
48
|
)
|
36
49
|
#XGBoost
|
37
|
-
xgb.result <-xgb.train(params=params, data=model.data.dm,
|
50
|
+
~~xgb.result <-xgb.train(params=params, data=model.data.dm,
|
38
51
|
label=df.train.dt$yyy, num_class=3, objective="multi:softmax",
|
39
|
-
booster="gbtree", nrounds=100, verbose=1) #目的変数yyyは2値(0, 1)です
|
52
|
+
booster="gbtree", nrounds=100, verbose=1) #目的変数yyyは2値(0, 1)です~~
|
53
|
+
|
54
|
+
xgb.result <- xgb.train(params=params, data=model.data.dm, label=df.train.dt$Species,
|
55
|
+
num_class=3, objective="multi:softprob", booster="gbtree", nrounds=100, verbose=1)
|
40
56
|
|
41
57
|
#評価
|
42
58
|
pred <- predict(object=xgb.result,newdata=pre.data.dm)
|
43
|
-
table(pred,df.test.dt$
|
59
|
+
table(pred,df.test.dt$Species)
|
44
60
|
|
45
61
|
#結果の出力
|
46
62
|
shap_values <- shap.values(xgb_model = xgb.result, X_train = pre.data.dm)
|
@@ -53,15 +69,14 @@
|
|
53
69
|
### 発生している問題・エラーメッセージ
|
54
70
|
|
55
71
|
```
|
56
|
-
Error in
|
72
|
+
Error in table(pred, df.test.dt$Species) :
|
57
|
-
|
73
|
+
全ての引数は同じ長さでなければなりません
|
58
74
|
```
|
59
75
|
|
60
76
|
### 該当のソースコード
|
61
77
|
|
62
78
|
```R
|
63
|
-
#結果の出力
|
64
|
-
|
79
|
+
table(pred,df.test.dt$Species)
|
65
80
|
```
|
66
81
|
|
67
82
|
### 試したこと
|