|
6 | 6 | This example demonstrates using `forestci` to calculate the error bars of |
7 | 7 | the predictions of a :class:`sklearn.ensemble.BaggingRegressor` object. |
8 | 8 |
|
9 | | -The data used here are a classical machine learning data-set, describing |
10 | | -various features of different cars, and their MPG. |
| 9 | +The data used here are scikit-learn's bundled diabetes regression dataset, |
| 10 | +which avoids requiring a network connection when building the documentation. |
11 | 11 | """ |
12 | 12 |
|
13 | 13 | # Regression Forest Example |
14 | 14 | import numpy as np |
15 | 15 | from matplotlib import pyplot as plt |
| 16 | +from sklearn.datasets import load_diabetes |
16 | 17 | from sklearn.ensemble import BaggingRegressor |
17 | 18 | from sklearn.svm import SVR |
18 | 19 | import sklearn.model_selection as xval |
19 | | -from sklearn.datasets import fetch_openml |
20 | 20 | import forestci as fci |
21 | 21 |
|
22 | | -# retreive mpg data from machine learning library |
23 | | -mpg_data = fetch_openml(data_id=196) |
| 22 | +# Load a regression dataset bundled with scikit-learn |
| 23 | +diabetes_X, diabetes_y = load_diabetes(return_X_y=True) |
24 | 24 |
|
25 | | -# separate mpg data into predictors and outcome variable |
26 | | -mpg_X = mpg_data["data"] |
27 | | -mpg_y = mpg_data["target"] |
28 | | - |
29 | | -# remove rows where the data is nan |
30 | | -not_null_sel = np.where(mpg_X.isna().sum(axis=1).values == 0) |
31 | | -mpg_X = mpg_X.values[not_null_sel] |
32 | | -mpg_y = mpg_y.values[not_null_sel] |
33 | | - |
34 | | -# split mpg data into training and test set |
35 | | -mpg_X_train, mpg_X_test, mpg_y_train, mpg_y_test = xval.train_test_split( |
36 | | - mpg_X, mpg_y, test_size=0.25, random_state=42 |
| 25 | +# Split the data into training and test sets |
| 26 | +X_train, X_test, y_train, y_test = xval.train_test_split( |
| 27 | + diabetes_X, diabetes_y, test_size=0.25, random_state=42 |
37 | 28 | ) |
38 | 29 |
|
39 | | -# Create RandomForestRegressor |
| 30 | +# Create a bagged SVR model |
40 | 31 | n_estimators = 1000 |
41 | | -mpg_bagger = BaggingRegressor( |
| 32 | +bagger = BaggingRegressor( |
42 | 33 | estimator=SVR(), n_estimators=n_estimators, random_state=42 |
43 | 34 | ) |
44 | | -mpg_bagger.fit(mpg_X_train, mpg_y_train) |
45 | | -mpg_y_hat = mpg_bagger.predict(mpg_X_test) |
46 | | - |
47 | | -# Plot predicted MPG without error bars |
48 | | -plt.scatter(mpg_y_test, mpg_y_hat) |
49 | | -plt.plot([5, 45], [5, 45], "k--") |
50 | | -plt.xlabel("Reported MPG") |
51 | | -plt.ylabel("Predicted MPG") |
| 35 | +bagger.fit(X_train, y_train) |
| 36 | +y_pred = bagger.predict(X_test) |
| 37 | +target_range = [diabetes_y.min(), diabetes_y.max()] |
| 38 | + |
| 39 | +# Plot predictions without error bars |
| 40 | +plt.scatter(y_test, y_pred) |
| 41 | +plt.plot(target_range, target_range, "k--") |
| 42 | +plt.xlabel("Observed disease progression") |
| 43 | +plt.ylabel("Predicted disease progression") |
52 | 44 | plt.show() |
53 | 45 |
|
54 | 46 | # Calculate the variance |
55 | | -mpg_V_IJ_unbiased = fci.random_forest_error(mpg_bagger, mpg_X_train.shape, mpg_X_test) |
| 47 | +variance = fci.random_forest_error(bagger, X_train.shape, X_test) |
56 | 48 |
|
57 | | -# Plot error bars for predicted MPG using unbiased variance |
58 | | -plt.errorbar(mpg_y_test, mpg_y_hat, yerr=np.sqrt(mpg_V_IJ_unbiased), fmt="o") |
59 | | -plt.plot([5, 45], [5, 45], "k--") |
60 | | -plt.xlabel("Reported MPG") |
61 | | -plt.ylabel("Predicted MPG") |
| 49 | +# Plot error bars for predictions using unbiased variance |
| 50 | +plt.errorbar(y_test, y_pred, yerr=np.sqrt(variance), fmt="o") |
| 51 | +plt.plot(target_range, target_range, "k--") |
| 52 | +plt.xlabel("Observed disease progression") |
| 53 | +plt.ylabel("Predicted disease progression") |
62 | 54 | plt.show() |
0 commit comments