sksurv.ensemble.RandomSurvivalForest¶

class
sksurv.ensemble.
RandomSurvivalForest
(n_estimators=100, max_depth=None, min_samples_split=6, min_samples_leaf=3, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, max_samples=None)[source]¶ A random survival forest.
A random survival forest is a meta estimator that fits a number of survival trees on various subsamples of the dataset and uses averaging to improve the predictive accuracy and control overfitting. The subsample size is always the same as the original input sample size but the samples are drawn with replacement if bootstrap=True (default).
In each survival tree, the quality of a split is measured by the logrank splitting rule.
See the User Guide, 1 and 2 for further description.
 Parameters
n_estimators (integer, optional, default: 100) – The number of trees in the forest.
max_depth (int or None, optional, default: None) – The maximum depth of the tree. If None, then nodes are expanded until all leaves are pure or until all leaves contain less than min_samples_split samples.
min_samples_split (int, float, optional, default: 6) –
The minimum number of samples required to split an internal node:
If int, then consider min_samples_split as the minimum number.
If float, then min_samples_split is a fraction and ceil(min_samples_split * n_samples) are the minimum number of samples for each split.
min_samples_leaf (int, float, optional, default: 3) –
The minimum number of samples required to be at a leaf node. A split point at any depth will only be considered if it leaves at least
min_samples_leaf
training samples in each of the left and right branches. This may have the effect of smoothing the model, especially in regression.If int, then consider min_samples_leaf as the minimum number.
If float, then min_samples_leaf is a fraction and ceil(min_samples_leaf * n_samples) are the minimum number of samples for each node.
min_weight_fraction_leaf (float, optional, default: 0.) – The minimum weighted fraction of the sum total of weights (of all the input samples) required to be at a leaf node. Samples have equal weight when sample_weight is not provided.
max_features (int, float, string or None, optional, default: None) –
The number of features to consider when looking for the best split:
If int, then consider max_features features at each split.
If float, then max_features is a fraction and int(max_features * n_features) features are considered at each split.
If “auto”, then max_features=sqrt(n_features).
If “sqrt”, then max_features=sqrt(n_features).
If “log2”, then max_features=log2(n_features).
If None, then max_features=n_features.
Note: the search for a split does not stop until at least one valid partition of the node samples is found, even if it requires to effectively inspect more than
max_features
features.max_leaf_nodes (int or None, optional, default: None) – Grow a tree with
max_leaf_nodes
in bestfirst fashion. Best nodes are defined as relative reduction in impurity. If None then unlimited number of leaf nodes.bootstrap (boolean, optional, default: True) – Whether bootstrap samples are used when building trees. If False, the whole datset is used to build each tree.
oob_score (bool, default: False) – Whether to use outofbag samples to estimate the generalization accuracy.
n_jobs (int or None, optional (default=None)) – The number of jobs to run in parallel for both fit and predict.
None
means 1 unless in ajoblib.parallel_backend
context.1
means using all processors.random_state (int, RandomState instance or None, optional, default: None) – If int, random_state is the seed used by the random number generator; If RandomState instance, random_state is the random number generator; If None, the random number generator is the RandomState instance used by np.random.
verbose (int, optional, default: 0) – Controls the verbosity when fitting and predicting.
warm_start (bool, optional, default: False) – When set to
True
, reuse the solution of the previous call to fit and add more estimators to the ensemble, otherwise, just fit a whole new forest.

estimators_
¶ The collection of fitted subestimators.
 Type
list of SurvivalTree instances

event_times_
¶ Unique time points where events occurred.
 Type
array of shape = (n_event_times,)

n_features_
¶ The number of features when
fit
is performed. Type
int

oob_score_
¶ Concordance index of the training dataset obtained using an outofbag estimate.
 Type
float
See also
sksurv.tree.SurvivalTree
A single survival tree.
Notes
The default values for the parameters controlling the size of the trees (e.g.
max_depth
,min_samples_leaf
, etc.) lead to fully grown and unpruned trees which can potentially be very large on some data sets. To reduce memory consumption, the complexity and size of the trees should be controlled by setting those parameter values.Compared to scikitlearn’s random forest models,
RandomSurvivalForest
currently does not support controlling the depth of a tree based on the logrank test statistics or it’s associated pvalue, i.e., the parameters min_impurity_decrease or min_impurity_split are absent. In addition, the feature_importances_ attribute is not available. It is recommended to estimate feature importances via permutationbased methods.The features are always randomly permuted at each split. Therefore, the best found split may vary, even with the same training data,
max_features=n_features
andbootstrap=False
, if the improvement of the criterion is identical for several splits enumerated during the search of the best split. To obtain a deterministic behavior during fitting,random_state
has to be fixed.References
 1
Ishwaran, H., Kogalur, U. B., Blackstone, E. H., & Lauer, M. S. (2008). Random survival forests. The Annals of Applied Statistics, 2(3), 841–860.
 2
Ishwaran, H., Kogalur, U. B. (2007). Random survival forests for R. R News, 7(2), 25–31. https://cran.rproject.org/doc/Rnews/Rnews_20072.pdf.

__init__
(n_estimators=100, max_depth=None, min_samples_split=6, min_samples_leaf=3, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, max_samples=None)[source]¶ Initialize self. See help(type(self)) for accurate signature.
Methods
__init__
([n_estimators, max_depth, …])Initialize self.
fit
(X, y[, sample_weight])Build a forest of survival trees from the training set (X, y).
predict
(X)Predict risk score.
Predict cumulative hazard function.
predict_survival_function
(X[, return_array])Predict survival function.
score
(X, y)Returns the concordance index of the prediction.
Attributes
Not implemented

property
feature_importances_
¶ Not implemented

fit
(X, y, sample_weight=None)[source]¶ Build a forest of survival trees from the training set (X, y).
 Parameters
X (arraylike, shape = (n_samples, n_features)) – Data matrix
y (structured array, shape = (n_samples,)) – A structured array containing the binary event indicator as first field, and time of event or time of censoring as second field.
 Returns
 Return type
self

predict
(X)[source]¶ Predict risk score.
The ensemble risk score is the total number of events, which can be estimated by the sum of the estimated ensemble cumulative hazard function \(\hat{H}_e\).
\[\sum_{j=1}^{n} \hat{H}_e(T_{j} \mid x) ,\]where \(n\) denotes the total number of distinct event times in the training data.
 Parameters
X (arraylike, shape = (n_samples, n_features)) – Data matrix.
 Returns
risk_scores – Predicted risk scores.
 Return type
ndarray, shape = (n_samples,)

predict_cumulative_hazard_function
(X, return_array=False)[source]¶ Predict cumulative hazard function.
For each tree in the ensemble, the cumulative hazard function (CHF) for an individual with feature vector \(x\) is computed from all samples of the bootstrap sample that are in the same terminal node as \(x\). It is estimated by the Nelson–Aalen estimator. The ensemble CHF at time \(t\) is the average value across all trees in the ensemble at the specified time point.
 Parameters
X (arraylike, shape = (n_samples, n_features)) – Data matrix.
return_array (boolean) – If set, return an array with the cumulative hazard rate for each self.event_times_, otherwise an array of
sksurv.functions.StepFunction
.
 Returns
cum_hazard – If return_array is set, an array with the cumulative hazard rate for each self.event_times_, otherwise an array of
sksurv.functions.StepFunction
will be returned. Return type
ndarray
Examples
>>> import matplotlib.pyplot as plt >>> from sksurv.datasets import load_whas500 >>> from sksurv.ensemble import RandomSurvivalForest
Load and prepare the data.
>>> X, y = load_whas500() >>> X = X.astype(float)
Fit the model.
>>> estimator = RandomSurvivalForest().fit(X, y)
Estimate the cumulative hazard function for the first 5 samples.
>>> chf_funcs = estimator.predict_cumulative_hazard_function(X.iloc[:5])
Plot the estimated cumulative hazard functions.
>>> for fn in chf_funcs: ... plt.step(fn.x, fn(fn.x), where="post") ... >>> plt.ylim(0, 1) >>> plt.show()

predict_survival_function
(X, return_array=False)[source]¶ Predict survival function.
For each tree in the ensemble, the survival function for an individual with feature vector \(x\) is computed from all samples of the bootstrap sample that are in the same terminal node as \(x\). It is estimated by the KaplanMeier estimator. The ensemble survival function at time \(t\) is the average value across all trees in the ensemble at the specified time point.
 Parameters
X (arraylike, shape = (n_samples, n_features)) – Data matrix.
return_array (boolean) – If set, return an array with the probability of survival for each self.event_times_, otherwise an array of
sksurv.functions.StepFunction
.
 Returns
survival – If return_array is set, an array with the probability of survival for each self.event_times_, otherwise an array of
sksurv.functions.StepFunction
will be returned. Return type
ndarray
Examples
>>> import matplotlib.pyplot as plt >>> from sksurv.datasets import load_whas500 >>> from sksurv.ensemble import RandomSurvivalForest
Load and prepare the data.
>>> X, y = load_whas500() >>> X = X.astype(float)
Fit the model.
>>> estimator = RandomSurvivalForest().fit(X, y)
Estimate the survival function for the first 5 samples.
>>> surv_funcs = estimator.predict_survival_function(X.iloc[:5])
Plot the estimated survival functions.
>>> for fn in surv_funcs: ... plt.step(fn.x, fn(fn.x), where="post") ... >>> plt.ylim(0, 1) >>> plt.show()

score
(X, y)[source]¶ Returns the concordance index of the prediction.
 Parameters
X (arraylike, shape = (n_samples, n_features)) – Test samples.
y (structured array, shape = (n_samples,)) – A structured array containing the binary event indicator as first field, and time of event or time of censoring as second field.
 Returns
cindex – Estimated concordance index.
 Return type
float