Create CIU object
Sets up a CIU object with the given parameters. CIU objects have "public" and "private" methods. A CIU object is actually a list whose elements are the public functions (methods).
ciu.new( bb, formula = NULL, data = NULL, in.min.max.limits = NULL, abs.min.max = NULL, input.names = NULL, output.names = NULL, predict.function = NULL, vocabulary = NULL )
bb |
Model/"black-box" object. At least all |
formula |
Formula that describes input versus output values. Only to
be used together with |
data |
The training data used for training the model. If this parameter
is provided, a |
in.min.max.limits |
matrix with one row per output and two columns, where the first column indicates the minimal value and the second column the maximal value for that input. |
abs.min.max |
data.frame or matrix of min-max values of outputs, one row per output, two columns (min, max). |
input.names |
labels of inputs. |
output.names |
labels of outputs. |
predict.function |
can be supplied if a model that is not supported by ciu should be used. As an example, this is the function for lda: o.predict.function <- function(model, inputs) { pred <- predict(model,inputs) return(pred$posterior) } |
vocabulary |
list of labels/concepts to be used when producing
explanations and what combination of inputs they correspond to. Example of
two intermediate concepts and a higher-level one that combines them:
|
CIU is implemented in an object-oriented manner, where a CIU
object is a list
whose methods are made visible as
elements of the list. The general way for using CIU
objects is to
first get a CIU
object by calling ciu.new
as e.g.
ciu <- ciu.new(...)
, then call ciu.res <- ciu$<method>(...)
.
The methods that can be used in <method>
are:
"Usage" section is here in "Details" section because Roxygen etc. don't support documentation of functions within functions.
Object of class CIU
.
Kary Främling
Främling, K. Explainable AI without Interpretable Model. 2020, https://arxiv.org/abs/2009.13996.
Främling, K. Decision Theory Meets Explainable AI. 2020, https://doi.org/10.1007/978-3-030-51924-7_4.
Främling, K. Modélisation et apprentissage des préférences par réseaux de neurones pour l'aide à la décision multicritère. 1996, https://tel.archives-ouvertes.fr/tel-00825854/document (title translation in English: Learning and Explaining Preferences with Neural Networks for Multiple Criteria Decision Making)
# Explaining the classification of an Iris instance with lda model. # We use a versicolor (instance 100). library(MASS) test.ind <- 100 iris_test <- iris[test.ind, 1:4] iris_train <- iris[-test.ind, 1:4] iris_lab <- iris[[5]][-test.ind] model <- lda(iris_train, iris_lab) # Create CIU object ciu <- ciu.new(model, Species~., iris) # This can be used with explain method for getting CIU values # of one or several inputs. Here we get CIU for all three outputs # with input feature "Petal.Length" that happens to be the most important. ciu$explain(iris_test, 1) # It is, however, more convenient to use one of the graphical visualisations. # Here's one using ggplot. ciu$ggplot.col.ciu(iris_test) # LDA creates very sharp class limits, which can also be seen in the CIU # explanation. We can study what the underlying model looks like using # plot.ciu and plot.ciu.3D methods. Here is a 3D plot for all three classes # as a function of Petal Length&Width. Iris #100 (shown as the red dot) # is on the ridge of the "versicolor" class, which is quite narrow for # Petal Length&Width. ciu$plot.ciu.3D(iris_test,c(3,4),1,main=levels(iris$Species)[1],) ciu$plot.ciu.3D(iris_test,c(3,4),2,main=levels(iris$Species)[2]) ciu$plot.ciu.3D(iris_test,c(3,4),3,main=levels(iris$Species)[3]) # Same thing with a regression task, the Boston Housing data set. Instance # #370 has the highest valuation (50k$). Model is gbm, which performs # decently here. Plotting with "standard" bar plot this time. # Use something like "par(mai=c(0.8,1.2,0.4,0.2))" for seeing Y-axis labels. library(caret) gbm <- train(medv ~ ., Boston, method="gbm", trControl=trainControl(method="cv", number=10)) ciu <- ciu.new(gbm, medv~., Boston) ciu$barplot.ciu(Boston[370,1:13]) # Same but sort by CI. ciu$barplot.ciu(Boston[370,1:13], sort = "CI") # The two other possible plots ciu$ggplot.col(Boston[370,1:13]) ciu$pie.ciu(Boston[370,1:13]) # Method "plot" for studying the black-box behavior and CIU one input at a time. ciu$plot.ciu(Boston[370,1:13],13)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.