Last active
March 1, 2022 06:45
-
-
Save logandillard/e0cd3e1f6c516af37f435c5bcb310a6a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Load and clean data\n", | |
"* drop missing values" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 388, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(392, 9)\n", | |
" mpg cylinders displacement horsepower weight acceleration \\\n", | |
"0 18.0 8 307.0 130.0 3504.0 12.0 \n", | |
"1 15.0 8 350.0 165.0 3693.0 11.5 \n", | |
"2 18.0 8 318.0 150.0 3436.0 11.0 \n", | |
"3 16.0 8 304.0 150.0 3433.0 12.0 \n", | |
"4 17.0 8 302.0 140.0 3449.0 10.5 \n", | |
"5 15.0 8 429.0 198.0 4341.0 10.0 \n", | |
"6 14.0 8 454.0 220.0 4354.0 9.0 \n", | |
"7 14.0 8 440.0 215.0 4312.0 8.5 \n", | |
"8 14.0 8 455.0 225.0 4425.0 10.0 \n", | |
"9 15.0 8 390.0 190.0 3850.0 8.5 \n", | |
"10 15.0 8 383.0 170.0 3563.0 10.0 \n", | |
"11 14.0 8 340.0 160.0 3609.0 8.0 \n", | |
"12 15.0 8 400.0 150.0 3761.0 9.5 \n", | |
"13 14.0 8 455.0 225.0 3086.0 10.0 \n", | |
"14 24.0 4 113.0 95.0 2372.0 15.0 \n", | |
"15 22.0 6 198.0 95.0 2833.0 15.5 \n", | |
"16 18.0 6 199.0 97.0 2774.0 15.5 \n", | |
"17 21.0 6 200.0 85.0 2587.0 16.0 \n", | |
"18 27.0 4 97.0 88.0 2130.0 14.5 \n", | |
"19 26.0 4 97.0 46.0 1835.0 20.5 \n", | |
"\n", | |
" model_year origin car_name \n", | |
"0 70 1 chevrolet chevelle malibu \n", | |
"1 70 1 buick skylark 320 \n", | |
"2 70 1 plymouth satellite \n", | |
"3 70 1 amc rebel sst \n", | |
"4 70 1 ford torino \n", | |
"5 70 1 ford galaxie 500 \n", | |
"6 70 1 chevrolet impala \n", | |
"7 70 1 plymouth fury iii \n", | |
"8 70 1 pontiac catalina \n", | |
"9 70 1 amc ambassador dpl \n", | |
"10 70 1 dodge challenger se \n", | |
"11 70 1 plymouth 'cuda 340 \n", | |
"12 70 1 chevrolet monte carlo \n", | |
"13 70 1 buick estate wagon (sw) \n", | |
"14 70 3 toyota corona mark ii \n", | |
"15 70 1 plymouth duster \n", | |
"16 70 1 amc hornet \n", | |
"17 70 1 ford maverick \n", | |
"18 70 3 datsun pl510 \n", | |
"19 70 2 volkswagen 1131 deluxe sedan \n" | |
] | |
} | |
], | |
"source": [ | |
"import pandas as pd\n", | |
"import numpy as np\n", | |
"\n", | |
"from sklearn.linear_model import Ridge\n", | |
"from sklearn.model_selection import cross_val_score\n", | |
"from sklearn.model_selection import KFold\n", | |
"from sklearn.preprocessing import StandardScaler\n", | |
"from sklearn.pipeline import Pipeline\n", | |
"from sklearn.model_selection import GridSearchCV\n", | |
"\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"%matplotlib inline\n", | |
"\n", | |
"\"\"\"The data concerns city-cycle fuel consumption in miles per gallon,\n", | |
" to be predicted in terms of 3 multivalued discrete and 5 continuous\n", | |
" attributes.\" (Quinlan, 1993)\"\"\"\n", | |
"\n", | |
"df = pd.read_csv(\"http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data-original\",\n", | |
" header=None, names = ['mpg', 'cylinders', 'displacement', 'horsepower', 'weight', 'acceleration',\n", | |
" 'model', 'origin', 'car_name'], sep='\\s+', na_values='?')\n", | |
"\n", | |
"df = df.dropna().reset_index(drop=True) # drop 6 rows with missing horsepower\n", | |
"df['horsepower'] = df['horsepower'].astype(float)\n", | |
"\n", | |
"# Exclude origin for brevity\n", | |
"training_columns = ['cylinders','displacement','horsepower','weight',\n", | |
" 'acceleration','model_year']\n", | |
"\n", | |
"print(df.shape)\n", | |
"print(df.head(20))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Visualize columns with histograms" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 342, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\nfiVppaQ39jTbtJmZDZwTEbNdXQrcGhGvAV5Pmuix4mzTZmY2OE5EzAok7Q8cQxpNmIh4LiKeovps\n02ZmNghORMy6mgxsA74s6T5JV0gaQfXZprvwrNJmZv3jRMSsq+HA4cDlEXEY8AzdmmF6mm3as0qb\nmfVPX+aaMWsnG4ANEXFPXr+BlIhskTQuIjZ1m226IXXM/Xa/n7N2/kk1iMTMrGeuETEriIjNwHpJ\nB+dNx5ImcKw227SZmQ2Ca0TMdnUOcI2kPYCHgDNJSfsus02bmdngOBEx6yYi7gemVdhVcbZpMzMb\nODfNmJmZWWmciJiZmVlpnIiYmZlZadxHxMwA3/JrZuVwjYiZmZmVxomImZmZlcaJiJmZmZXGiYiZ\nmZmVxomImZmZlcaJiJmZmZXGiYiZmZmVxomImZmZlcaJiJmZmZXGiYhZN5KGSbpP0i15fZSk2ySt\nzj9Hlh2jmVmrcCJitqtzgZWF9bnA7RExBbg9r5uZ2RBwImJWIGkCcBJwRWHzDGBhXl4InFrvuMzM\nWpUTEbOuPgd8FHixsG1sRGzKy5uBsXWPysysRXn2XbNM0snA1ohYKml6pWMiIiRFD68xB5gDMGnS\npJrE2cw8w6+ZdddrjYikqyRtlbS8sK1q5z1JF0paI2mVpHfWKnCzGjgaOEXSWuA64O2SvgpskTQO\nIP/cWu0FImJBREyLiGljxoypR8xmZk2tL00zVwMndNtWsfOepKnALOCQ/JzLJA0bsmjNaigiLoyI\nCRHRQSrHP4yI04HFwOx82Gzg5pJCNDNrOb0mIhFxF/BEt83VOu/NAK6LiGcj4mFgDXDEEMVqVpb5\nwPGSVgPH5XUzMxsCA+0jUq3z3njg54XjNuRtu3BbujWyiLgDuCMvPw4cW2Y8jWogfT7MzIoGfddM\nRARQtfNeD89zW7qZmVmbG2iNyBZJ4yJiU7fOexuBiYXjJuRtZmZ109+aGt+ZY1aegdaIVOu8txiY\nJWlPSZOBKcC9gwvRzMzMWlWvNSKSrgWmA6MlbQAuJnXWWyTpLGAdMBMgIlZIWgQ8COwAzo6IF2oU\nu5mZmTW5XhORiDityq6KnfciYh4wbzBBmZmZWXvwEO9mZmZWGg/xblZnvuXVzGwnJyJWF76LwQbK\niZtZa3PTjJmZmZXGiYiZmZmVxomImZmZlcaJiJmZmZXGnVUb2EA66bmTp5mZNRPXiJiZmVlpnIiY\n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\naX4BDgW5STSsTLYAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x11f90d0d0>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"_ = df.hist(bins=10,figsize=(9,7),grid=False)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Evaluate a simple linear model" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 351, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"X = df[training_columns]\n", | |
"Y = df['mpg']\n", | |
"\n", | |
"seed = 3294805" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Grid search for best regularization" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 347, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Best: -13.362014 using {'alpha': 16.0}\n", | |
"-13.370124 (8.201364) with: {'alpha': 0.25}\n", | |
"-13.369974 (8.201273) with: {'alpha': 0.5}\n", | |
"-13.369678 (8.201097) with: {'alpha': 1.0}\n", | |
"-13.369094 (8.200768) with: {'alpha': 2.0}\n", | |
"-13.367962 (8.200206) with: {'alpha': 4.0}\n", | |
"-13.365831 (8.199430) with: {'alpha': 8.0}\n", | |
"-13.362014 (8.199095) with: {'alpha': 16.0}\n", | |
"Raw ridge\n", | |
"-13.379404023883612\n" | |
] | |
} | |
], | |
"source": [ | |
"lr = Ridge()\n", | |
"\n", | |
"alpha_values = np.array([0.25,0.5,1,2,4,8,16])\n", | |
"param_grid = dict(alpha=alpha_values)\n", | |
"kfold = KFold(n_splits=10, random_state=seed)\n", | |
"grid = GridSearchCV(estimator=lr, param_grid=param_grid, cv=kfold, scoring='neg_mean_squared_error')\n", | |
"grid_result = grid.fit(X, Y)\n", | |
"\n", | |
"print(\"Best: %f using %s\" % (grid_result.best_score_, grid_result.best_params_))\n", | |
"means = grid_result.cv_results_['mean_test_score']\n", | |
"stds = grid_result.cv_results_['std_test_score']\n", | |
"params = grid_result.cv_results_['params']\n", | |
"for mean, stdev, param in zip(means, stds, params):\n", | |
" print(\"%f (%f) with: %r\" % (mean, stdev, param))\n", | |
"\n", | |
"lr = Ridge(**grid_result.best_params_)\n", | |
"\n", | |
"kfold = KFold(n_splits=10, random_state=seed)\n", | |
"scores = cross_val_score(lr, X, Y, cv=kfold, scoring='neg_mean_squared_error')\n", | |
"print('Raw ridge')\n", | |
"print(scores.mean())" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Scale inputs" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 348, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Scaled ridge\n", | |
"-13.775824354309814\n" | |
] | |
} | |
], | |
"source": [ | |
"scaled_lr = Pipeline([('Scaler', StandardScaler()),('LR', lr)])\n", | |
"scores = cross_val_score(scaled_lr, X, Y, cv=kfold, scoring='neg_mean_squared_error')\n", | |
"print('Scaled ridge')\n", | |
"print(scores.mean())" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Evaluation results\n", | |
"\n", | |
"The cross-validated mean squared error for linear regression is approximately **13.4**. This will be the baseline." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Linear model insights" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 396, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"weight: -4.137636\n", | |
"model_year: 2.564799\n", | |
"cylinders: -0.624572\n", | |
"horsepower: -0.622318\n", | |
"displacement: -0.356307\n", | |
"acceleration: -0.103126\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\nzTLiQJtl5P8D7XZQCi0WN2UAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x11ed58c90>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"def print_coefs(coefs, training_columns):\n", | |
" sorted_idx = np.argsort(-abs(coefs)) # negative for descending\n", | |
" for (name, coef) in zip(np.array(training_columns)[sorted_idx], coefs[sorted_idx]):\n", | |
" print(\"%s: %f\" % (name, coef))\n", | |
"\n", | |
"def plot_coefs(coefs, training_columns, title_suffix=''):\n", | |
" sorted_idx = np.argsort(abs(coefs))\n", | |
" pos = np.arange(len(coefs)) + .5\n", | |
" plt.subplot(1, 2, 2)\n", | |
" plt.barh(pos, coefs[sorted_idx], align='center')\n", | |
" plt.yticks(pos, np.array(training_columns)[sorted_idx])\n", | |
" plt.xlabel('Coef value')\n", | |
" plt.title('Coefficents' + title_suffix)\n", | |
" plt.xlim(-5.5, 5.5)\n", | |
" plt.show()\n", | |
"\n", | |
"# use scaled model\n", | |
"scaled_lr.fit(X, Y)\n", | |
"print_coefs(lr.coef_, training_columns)\n", | |
"plot_coefs(lr.coef_, training_columns)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Insights\n", | |
"\n", | |
"We can see that weight has the most significant impact (heavier means worse mpg). model_year has a positive impact, and the other features, which represent the size and power of the engine, are slightly negative." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Simple decision tree" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 352, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Best: -11.974432 using {'max_depth': 10, 'min_samples_leaf': 10}\n", | |
"CART\n", | |
"-12.010052711251006\n", | |
"Wrote output to ./auto_mpg.graphviz\n" | |
] | |
} | |
], | |
"source": [ | |
"from sklearn.tree import DecisionTreeRegressor\n", | |
"from sklearn.tree import export_graphviz\n", | |
"\n", | |
"dt = DecisionTreeRegressor()\n", | |
"\n", | |
"# Grid search meta parameters\n", | |
"param_grid = dict(min_samples_leaf=np.array([1,5,10,50,100,200]), max_depth=np.array([2,4,6,8,10]))\n", | |
"kfold = KFold(n_splits=10, random_state=seed)\n", | |
"grid = GridSearchCV(estimator=dt, param_grid=param_grid, cv=kfold, scoring='neg_mean_squared_error')\n", | |
"grid_result = grid.fit(X, Y)\n", | |
"\n", | |
"# Evaluate best model\n", | |
"print(\"Best: %f using %s\" % (grid_result.best_score_, grid_result.best_params_))\n", | |
"dt = DecisionTreeRegressor(**grid_result.best_params_)\n", | |
"scores = cross_val_score(dt, X, Y, cv=kfold, scoring='neg_mean_squared_error')\n", | |
"print('CART')\n", | |
"print(scores.mean())\n", | |
"\n", | |
"# Serialize tree structure for investigation\n", | |
"dt.fit(X, Y)\n", | |
"output_file = './auto_mpg.graphviz'\n", | |
"export_graphviz(dt, out_file=output_file, feature_names = X.columns)\n", | |
"print(\"Wrote output to \" + output_file)\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Evaluation results\n", | |
"\n", | |
"The cross-validated mean squared error is for our CART tree is approximately **12.0**. This is better than the linear model." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Insights\n", | |
"\n", | |
"The structure of the decision tree suggests that displacement and horsepower are the most important features. This does not agree with what we found from the linear model. \n", | |
"\n", | |
"We can see inefficiencies in the tree model in the fact that the two nodes below the root each split on horsepower, and that the nodes in the layer below that all split on model year. Furthermore, all four second-layer nodes split on almost the same value of model year. This suggests that a model that can use those attributes from the entire dataset (rather than the subpopulation that the tree uses at each node) may have better predictive performance.\n", | |
"\n", | |
"However, the fact that the tree model's predictive performance is better than the linear model suggests that there is a significant nonlinear effect." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Gradient Boosting Trees\n", | |
"\n", | |
"Let's also try out a gradient boosting tree model, which often has better predictive performance than any other model." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 404, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"GBT\n", | |
"-8.736805616265736\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\nAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x11dd72510>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"from sklearn.ensemble import GradientBoostingRegressor\n", | |
"\n", | |
"scores = cross_val_score(GradientBoostingRegressor(), X, Y, cv=kfold, scoring='neg_mean_squared_error')\n", | |
"print('GBT')\n", | |
"print(scores.mean())\n", | |
"\n", | |
"clf = GradientBoostingRegressor()\n", | |
"clf.fit(X, Y)\n", | |
"\n", | |
"feature_importance = clf.feature_importances_\n", | |
"# make importances relative to max importance\n", | |
"feature_importance = 100.0 * (feature_importance / feature_importance.max())\n", | |
"\n", | |
"sorted_idx = np.argsort(feature_importance)\n", | |
"pos = np.arange(sorted_idx.shape[0]) + .5\n", | |
"plt.subplot(1, 2, 2)\n", | |
"plt.barh(pos, feature_importance[sorted_idx], align='center')\n", | |
"plt.yticks(pos, X.columns[sorted_idx])\n", | |
"plt.xlabel('Relative Importance')\n", | |
"plt.title('GBT Variable Importance')\n", | |
"plt.show()\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Evaluation results and insights\n", | |
"\n", | |
"The cross-validated mean squared error from GBT is approximately **8.8**. This is much better than linear regression or our simple decision tree. \n", | |
"\n", | |
"GBT's variable importance attribute tells us that weight is the most important feature, followed by acceleration, horsepower, displacement, and model_year, which are all similar. Unfortunately, GBT does not tell us anything about the numerical magnitude or sign of their impact, nor relationship of these features." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Linear model tree" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 392, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"8.943056984982718\n" | |
] | |
} | |
], | |
"source": [ | |
"import sys\n", | |
"sys.path.append('/Users/logan/ws/price-modeling/python/')\n", | |
"\n", | |
"from lmt import LinearModelTree\n", | |
"from sklearn.metrics import mean_squared_error\n", | |
"\n", | |
"X = df[training_columns]\n", | |
"\n", | |
"shared_scaler = StandardScaler()\n", | |
"shared_scaler.fit(X)\n", | |
"\n", | |
"def fit_linear_model(x, y):\n", | |
" lr = Ridge()\n", | |
" lr.fit(shared_scaler.transform(x), y)\n", | |
" return SharedScalerModel(shared_scaler, lr)\n", | |
"\n", | |
"class SharedScalerModel:\n", | |
" \n", | |
" def __init__(self, scaler, lm):\n", | |
" self.scaler = scaler\n", | |
" self.lm = lm\n", | |
" self.coef_ = lm.coef_\n", | |
" self.intercept_ = lm.intercept_\n", | |
" \n", | |
" def predict(self, X):\n", | |
" return self.lm.predict(self.scaler.transform(X))\n", | |
"\n", | |
"\n", | |
"MIN_NODE_SIZE = 100\n", | |
"MIN_SPLIT_IMPROVEMENT = 10\n", | |
"lmt = LinearModelTree(MIN_NODE_SIZE, fit_linear_model, min_split_improvement=MIN_SPLIT_IMPROVEMENT)\n", | |
"\n", | |
"kfold = KFold(n_splits=10, random_state=seed)\n", | |
"scores = []\n", | |
"for train_index, test_index in kfold.split(X):\n", | |
" X_train, X_test = X.iloc[train_index], X.iloc[test_index]\n", | |
" y_train, y_test = Y[train_index], Y[test_index]\n", | |
" \n", | |
" lmt.build_tree(X_train.values, X_train, y_train.values)\n", | |
" y_pred = lmt.predict(X_test.values, X_test)\n", | |
" mse = mean_squared_error(y_test, y_pred)\n", | |
" scores.append(mse)\n", | |
"\n", | |
"print(np.array(scores).mean())\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Evaluation results\n", | |
"\n", | |
"[Optimal meta parameters found via grid search, not shown]\n", | |
"\n", | |
"The LMT gives a cross-validated mean squared error of approximately **8.9**, which is nearly as good as GBT, and much better than our linear regression and simple decision tree models." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Insights" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 369, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"T,rc:392,f:2,v:78.0\n", | |
"TL,rc:104,f:_,v:_ \n", | |
"TR,rc:288,f:2,v:97.0\n", | |
"TRL,rc:110,f:_,v:_ \n", | |
"TRR,rc:178,f:_,v:_ \n" | |
] | |
} | |
], | |
"source": [ | |
"# Build a tree on the full dataset, and serialize it to see the feature splits\n", | |
"lmt = LinearModelTree(MIN_NODE_SIZE, fit_linear_model, MIN_SPLIT_IMPROVEMENT)\n", | |
"lmt.build_tree(X.values, X, Y.values)\n", | |
"print(lmt.serialize())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 357, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"horsepower\n" | |
] | |
} | |
], | |
"source": [ | |
"print(X.columns[2])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Tree structure\n", | |
"\n", | |
"The linear model tree produces just 2 splits, for a total of 3 leaf nodes. It splits first at horsepower = 78, and for horsepower >= 78 it splits at horsepower = 97. We will call the three subpopulations low power, medium power, and high power." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 397, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\nHATMSu7/AByZTJc3F7SHAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x11df8aa10>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x11e316550>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQYAAAEWCAYAAACE4zmnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xm8XdP9//HXW6SGJEIkNA3JrbkoIVdUiQap6vAtiq+p\nNGjT9NeiVfy0fNVQNbXVVgdCffErMdRQpSoxJDEk5IYMYh6iqkqEGmuKz++PtW7t3H3uvefmnjsl\n7+fjcR53773WXmvtdc/+nLWHc7YiAjOzohW6ugFm1v04MJhZiQODmZU4MJhZiQODmZU4MJhZiQND\njUnaWNJsSa9LOkLSKpL+LOlVSVdLOlDSpK5uZ0skbSqpQZLy/AJJY7q6Xbb0JK0t6WFJK1WTf7kN\nDJIOyG/+NyQ9L+lmSTvUoOhjgTsiol9E/ArYG1gbWDMi9omIyyJi1xrU0yxJJ0n6QzuKOBX4afgm\nl25FyfGS/ibpNUlXSFqtkD4/v58bX+9L+jNARLwA3AGMq6au5TIwSDoK+AXwE9JOOxT4DfDlGhQ/\nDJjfZP6xiHi/BmV3OEmDgZ2A6zug7BVrXWZXqbQtklaS1L8Dqz0YOAjYHvgYsApwbmNiRGwWEX0j\noi/QD3gWuLqw/mXAN6uqKSKWqxfQH3gD2KeFPCuRAsc/8usXwEqF9C8Bs4F/AfcAW+TltwOLgbdz\nHROBd4H38vxhwFjgrkJZmwGTgZeBF4Af5uUrAMcBTwKLgKuAATmtDgjga8DfgJeA43Pabk3qnJOX\njwWeAl4HngYObGbbDwZubbJsAXA0MBd4FbgSWLmQ/g3gibwNNwAfK6QF8G3g8VyvgHOAF4HXgHnA\n5oV+/2nepheA84BVctpo4O/AD/P2LihuQ/6/XgosBJ4BTgBWyGnPACPy9IG5TZvl+cOA69vQ54fl\n9k2r0HdD8jZdBoxprL+G790/AscW5j9Neq+tWiHvZ/L/uk9h2YrAW8CwVuvq6h21s195x3kfWLGF\nPKcAM4C1gEGknf/UnLZVflNvC/Qi7ZwLyIEDmAJ8vVDWScAfCvNjyYGBFNWfB74PrJznt81pR+Y2\nrJN3mPOBiU3epBeQPjW2BN4BPtFMnX3yG3bjPD+4cceosO1nA79psmwBcB/pU2oA8DAwPqftTNpR\nt87tPLe40+R2Ts7rrQJ8DpgFrE4KEp8ABue855ACy4DcF38GTs9po/P/7ee5ns8Abxa26VLgT3m9\nOuAx4LBC2vfz9ATSjv+tQtr32tDnl+b+XKWZ/vsoKYjOIwWkU4D1muQZSvpQae51QJWBYfvcpi0r\n5L0IuLjC8rnAl1vdT7p6R+3sF+kT45+t5HkS+EJh/nPAgjz9O3KQKKQ/CnwmT0+h+sCwP/BAM214\nGNilMD+YNApYsfAmXaeQfh+wXzN19slvuL2ae0MX8l4AnNFk2QLgq4X5s4Dz8vTvgbMKaX1zO+vy\nfAA7F9J3Ju20n6LwiUoKEm8C6xeWbQc8nadHkwJD8RPwKuB/SAH6XWDTQto3gSl5+jDghkK/fh24\nIs8/A2zdhj5fr1K/NdOXI4BfkT5IplBhB27je/frue/qSCOkG3KbtmuSb1XSB8HoCmXcDRzcWl3L\n4zmGRcDAVo53P0Z6wzR6Ji+DdM7g+5L+1fgC1i2kt8W6pCBUyTDgukIdD5MOU9Yu5PlnYfot0k5Z\nEhFvAvsC44HnJd0kaZNm6n2F9KnbVHN1LdFXEfEGqY+HFPI/W0i/Hfg16ZzOi5Im5BNog0hv6FmF\nbf5rXv6ftuVtadT4fxkI9Kb8P2tsw1RgVD5/0osUULaXVEfawWbnfNX0+bNU73FgDukwaxPSKKk9\nLiIdnk4hnce6Iy//e5N8XyEd1k2tUEY/0odEi5bHwDCdNOzeo4U8/yC9SRoNzcsgvTFOi4jVC69V\nI2LiUrTlWWC9FtI+36SelSPiuSrKLV1NiIhbIuKzpE/BR0gjg0rmAhtVUUejJfpKUh9gTaDYziXa\nExG/iogRwKa5rmNIhyP/Jh3iNG5v/0gn0hqtkctv1Ph/eYn0yd70f/Zcru8JUjA7nHSY8xop0I0j\njd4+yOtU0+ctXqmR1EvS5yVNJJ2L+CJwOml0NzXnGdrk6kHT14GVyo6IDyLiRxFRFxHrkILDcyzZ\n15AOby+NPEQotG1FYANSsGrRchcYIuJV4ETgN5L2kLSqpN75n3lWzjYROEHSIEkDc/7Gy38XAOMl\nbZsvH/WR9EVJlT5lW3MjMFjSd/MZ7X6Sts1p5wGnSRoGkNuye5XlvgDUSVohr7u2pN3zTvUO6aTk\nB82sOxnYWtLKVdY1EThE0vB8jfwnwL0RsaBSZknb5L7rTTp0eBv4IO+cFwDnSFor5x0i6XNNijhZ\n0kckjSKdBL46IhaTRgGn5T4cBhzFh/8zSJ+e3+HDT9EpTeahfX1Obvffcx/MADaIiK9ExJ+jcFUq\nIv4W+epBM6/Lmil/gKT18/tuU9L5llMKgQ1J65CuKl1SoYiRpEPiZyqkLWG5CwwAEfEz0hvnBNJZ\n7GdJb5LGS3Q/BhpIn57zgPvzMiKigXQW/tekYfcTpPMGS9OO14HPAv9F+gR7nPRPBfgl6RhykqTX\nSW+0bSuVU0HjJapFku4n/Z+PIn26vkw6cfetZtr0AunqSlU7RETcSjrOv4Z0InV9YL8WVlmNFABe\nIQ33F5FOeAL8X1J/zpD0GnArsHFh3X/m9f5BOvM/PiIeyWmHkwLNU8BdwOWkoXejqaRh9LRm5qF9\nfQ5pVLJbRGwVEb+MiJfasG41BgJ/IW3nzcBFETGhSZ6DgOkRUekQ9UBS8GuVmow2zMifRpcAI5sO\nR7uKpNGkE6rrdHVbeqI8mpkKbBURb7eWf5m54cRqJyIeArbp6nZY7UTEi6RLw1VZLg8lzKxlPpQw\nsxKPGMysxOcYamTgwIFRV1fX1c2wZdSsWbNeiohBreesDQeGGqmrq6OhoaGrm2HLKEmt3ntQSz6U\nMLMSBwYzK3FgMLMSBwYzK3FgMLMSBwYzK3FgMLMSBwYzK/ENTsu5uuNu6pJ6F5zxxS6p16rjEYOZ\nlTgwmFmJA4OZlTgwmFmJA4OZlTgwmFmJA4OZlTgwmFmJA4OZlTgwmFnJMh0YJF2Yn6rUUp6LJe1d\nYXmdpAM6rnVm3dcyHRgi4uv5qUpLow5wYLDlUo8IDJKOkXREnj5H0u15emdJl0naVdJ0SfdLulpS\n35w+RVJ9nj5M0mOS7pN0gaRfF6rYUdI9kp4qjB7OAEZJmi3pe524uWZdrkcEBuBOYFSergf65seo\njyI9kfoEYExEbE16SvVRxZUlfYz0ROZPAdsDmzQpfzCwA+mx6mfkZccBd0bE8Ig4p1KjJI2T1CCp\nYeHChe3cRLPuo6cEhlnACEmrAe8A00kBYhTwb2BT4G5Js4GvAcOarD8SmBoRL0fEe3z4mPhG10fE\nB/mwY+1qGxUREyKiPiLqBw3qtGeBmHW4HvF7DBHxnqSngbHAPaRRwk7ABsDTwOSI2L8dVbxTmFY7\nyjFbJvSUEQOkw4mjgWl5ejzwADAD2F7SBgCS+kjaqMm6M4HPSFpD0orAXlXU9zrQr1aNN+tJelpg\nGAxMj4gXgLdJ5wAWkkYSEyXNJR1mLHEOISKeA34C3AfcDSwAXm2lvrnAYklzfPLRljc94lACICJu\nA3oX5jcqTN8ObFNhndGF2csjYkIeMVwHXJ/zjG2yTt/89z1g59ptgVnP0ZNGDO11Uj45+SDpvMT1\nXdwes26rx4wY2isiju7qNpj1FMvTiMHMquTAYGYlDgxmVuLAYGYlDgxmVuLAYGYly83lSqvMz5C0\nSjxiMLMSBwYzK3FgMLMSBwYzK3FgMLMSX5WwLlF33E01K8tXVmrPIwYzK3FgMLMSBwYzK3FgMLMS\nBwYzK3FgMLMSBwYzK3FgMLMSBwYzK3FgMLMSBwYzK+l2gUHSAkkD25vHzJZetwsM3ZWkXl3dBrPO\nUpPAIKlO0iOSLpb0mKTLJI2RdLekxyWNlDRA0vWS5kqaIWmLvO6akiZJmi/pQkCFcr8q6T5JsyWd\nX83OKekUSd8tzJ8m6cg8fYykmbkNJxfyXC9pVm7DuMLyNyT9TNIcYLsKdY2T1CCpYeHChUvbfWbd\nTi1HDBsAPyM9gn4T4ABgB+Bo4IfAycADEbFFnr80r/cj4K6I2Iz0FOqhAJI+AewLbB8Rw4HFwIFV\ntOMi4OBcxgrAfsAfJO0KbAiMBIYDIyTtmNc5NCJGAPXAEZLWzMv7APdGxJYRcVfTiiJiQkTUR0T9\noEGDqukjsx6hlr/H8HREzAOQNB+4LSJC0jygDhgG7AXpsfV5pLAasCPwlbz8Jkmv5PJ2AUYAMyUB\nrAK82FojImKBpEWStgLWJgWjRTkw7Ao8kLP2JQWKaaRgsGdevm5evogUjK5Z2g4x66lqGRjeKUx/\nUJj/INfzXhvLE3BJRPxgKdpyITAW+ChpBNFY3ukRcf4SlUijgTHAdhHxlqQpwMo5+e2IWLwU9Zv1\naJ158vFO8qFA3hlfiojXSJ/YB+TlnwfWyPlvA/aWtFZOGyBpWJV1XQfsBmwD3JKX3QIcKqlvLm9I\nLrs/8EoOCpsAn2rXVpotAzrzp91OAi6SNBd4C/haXn4yMDEfftwD/A0gIh6SdAIwKZ8reA/4NvBM\naxVFxLuS7gD+1fiJHxGT8nmL6fnQ5A3gq8BfgfGSHgYeBWbUaHvNeixFRFe3oeZyILkf2CciHu+M\nOuvr66OhoaEzqlom+Dcf20bSrIio76z6lrn7GCRtCjxBOvnZKUHBbFnTY38lOl9SvK1C0i4RsV5n\nt8dsWdJjA0NELCLdj2BmNbbMHUqYWfs5MJhZiQODmZU4MJhZSY89+Wg92/Jw70FP5hGDmZU4MJhZ\niQODmZU4MJhZiQODmZX4qoQttfZ8Q9JXJbo3jxjMrMSBwcxKHBjMrMSBwcxKHBjMrMSBwcxKHBjM\nrMSBwcxKHBjMrMSBwcxKahIYJNVJerAWZZlZ1+vyEYOkHvF9jZ7STrNaqGVg6CXpAknzJU2StIqk\n4ZJmSJor6TpJawBImiLpF5IagCMl7SPpQUlzJE3LeXpJOlvSzLz+N/Py0ZKmSbpJ0qOSzsuPpEPS\n/pLm5bLOzMv2kfTzPH2kpKfy9HqS7s7TIyRNlTRL0i2SBldqZw37yqxbq+Wn4IbA/hHxDUlXAXsB\nxwKHR8RUSacAPwK+m/N/pPFZfJLmAZ+LiOckrZ7TDwNejYhtJK0E3C1pUk4bCWxKesDtX4GvSLoH\nOBMYAbxCehjuHqSnbB+b1xsFLJI0JE9Pk9QbOBfYPSIWStoXOA04tGk7m5I0DhgHMHTo0KXtN7Nu\np5aB4emImJ2nZwHrA6tHxNS87BLg6kL+KwvTdwMX54BybV62K7CFpL3zfH9S8HkXuC8iGj/5JwI7\nkJ6GPSUiFubllwE7RsT1kvpK6gesC1wO7EgKDNcCGwObA5PzU7B7Ac83084lRMQEYAKkh9q23D1m\nPUctA8M7henFwOrNZczebJyIiPGStgW+CMySNAIQabRxS3ElSaOBpjthazvlPcAhpMfc30kaDWwH\nfB8YCsyPiO1aa6fZ8qIjTz6+CrwiaVSePwiYWimjpPUj4t6IOBFYSPpkvwX4Vh7qI2kjSX3yKiMl\nfTyfW9gXuAu4D/iMpIGSegH7F+q7EzgamAY8AOwEvBMRr5KCxSBJ2+V6ekvarHbdYNbzdPSZ9q8B\n50laFXiK9KldydmSNiSNEm4D5gBzgTrgfqUx/kJgj5x/JvBrYAPgDuC6iPhA0nF5XsBNEfGnnP9O\nUrCZFhGLJT0LPAIQEe/mw5VfSepP6pNfAPNr1AdmPY4ietahcT6UODoivtTVbSmqr6+PhoaGrm5G\np/JPu3UeSbOaOwneEbr8PgYz63563E07ETEFmNLFzTBbpnnEYGYlDgxmVuLAYGYlDgxmVuLAYGYl\nDgxmVtLjLlda9+GblJZdHjGYWYkDg5mVODCYWYkDg5mVODCYWYmvSliXWNqvbPtKSOfwiMHMShwY\nzKzEgcHMShwYzKzEgcHMShwYzKzEgcHMShwYzKzEgcHMShwYzKykzbdESzoJeANYjfTIt1vbuP5o\nuuGTpCqRtAfwWEQ81NVtMetMSz1iiIgT2xoUeqA9gE27uhFmna2qwCDpeEmPSboL2Dgvuzg/DBZJ\nZ0h6SNJcST8tpJ8nqSGvWxohSBopabqkByTdI6mx7F6SfirpwVzm4Xn5CElTJc2SdIukwXn5FEnn\n5LoelrSNpGslPS7px4X6virpPkmzJZ2fn4qNpDcknSZpjqQZktaW9Gngy6QH7s6WtH47+tmsR2n1\nUELSCGA/YHjOfz8wq5C+JrAnsElEhKTVC6vXASOB9YE7JG3QpPhHgFER8b6kMcBPgL2AcXnd4Tlt\ngKTewLnA7hGxUNK+wGnAobmsdyOiXtKRwJ+AEcDLwJOSzgHWAvYFto+I9yT9FjgQuBToA8yIiOMl\nnQV8IyJ+LOkG4MaI+GMzfTMut5WhQ4e21pVmPUY15xhGkR4z/xZA3lmKXgXeBn4v6UbgxkLaVRHx\nAfC4pKeATZqs2x+4RNKGQAC98/IxwHkR8T5ARLwsaXNgc2CyJIBewPOFshrbNQ+YHxHP5/Y+BawL\n7EAKFjPz+qsAL+Z13i20exbw2Sr6hYiYAEyA9LTratYx6wna/XsM+RN9JLALsDfwHWDnxuSm2ZvM\nnwrcERF7Sqqj5YfVirTDb9dM+jv57weF6cb5FfP6l0TEDyqs+15ENLZtMf6dClvOVXOOYRqwh6RV\nJPUD/quYKKkv0D8i/gJ8D9iykLyPpBXy8fl6wKNNyu4PPJenxxaWTwa+KWnFXMeAvO4gSdvlZb0l\nbVZF+xvdBuwtaa3GMiUNa2Wd14F+bajDbJnQamCIiPuBK4E5wM3AzCZZ+gE3SpoL3AUcVUj7G3Bf\nXm98RLzdZN2zgNMlPcCSn9IX5nXnSpoDHBAR75JGJGfmZbOBT1e1lWk7HgJOACbltk4GBrey2hXA\nMfnkqE8+2nJDH46ga1ywdDEtnLhb1tTX10dDQ0NXN6PH8E+7tY2kWRFR31n1+c5HMyvpsJNsETG2\no8o2s47lEYOZlTgwmFmJA4OZlTgwmFmJA4OZlTgwmFmJvxNgXWJ5vVGpp/CIwcxKHBjMrMSBwcxK\nHBjMrMSBwcxKHBjMrMSXK60m2vr7Cr5c2b15xGBmJQ4MZlbiwGBmJQ4MZlbiwGBmJQ4MZlbiwGBm\nJQ4MZlbiwGBmJT0iMEi6WNLeefpCSZu2cf03OqZlZsumHndLdER8vSPLlyTSo/s+6Mh6zLqzLh0x\nSDpY0lxJcyRdJ+lpSb1z2mrF+cI6UyTV5+k3JJ2W158hae28/OOSpkuaJ+nHTdY/RtLMXO/JeVmd\npEclXQo8CKybRykP5jK+1xn9YdZddFlgyI+wPwHYOSK2BA4DpgCN367ZD7g2It5roZg+wIy8/jTg\nG3n5L4HfRcQngecLde4KbAiMBIYDIyTtmJM3BH4bEZsBA4EhEbF5LuN/m9mGcZIaJDUsXLiwbR1g\n1o115YhhZ+DqiHgJICJeBi4EDsnph9DMDlnwLnBjnp4F1OXp7YGJefr/FfLvml8PAPcDm5ACAsAz\nETEjTz8FrCfpXEm7Aa9VqjwiJkREfUTUDxo0qJWmmvUc3eocQ0TcnYf1o4FeEfFgK6u8FxGRpxez\n5PZEhfwCTo+I85dYKNUBbxba8YqkLYHPAeOB/wYObcOmmPVoXTliuB3YR9KaAJIG5OWXApfT+mih\nJXeTDkUADiwsvwU4VFLfXOcQSWs1XVnSQGCFiLiGdLizdTvaYtbjdFlgiIj5wGnAVElzgJ/npMuA\nNfjwUGBpHAl8W9I8YEihzkmkoDM9p/0R6Fdh/SHAFEmzgT8AP2hHW8x6HH04Eu8e8v0Ku0fEQV3d\nlraor6+PhoaGrm5Gl/EvOHUsSbMior6z6utW5xgknQt8HvhCV7fFbHnWrQJDRBze1W0wsx5yS7SZ\ndS4HBjMrcWAwsxIHBjMrcWAwsxIHBjMr6VaXK63n8g1LyxaPGMysxIHBzEocGMysxIHBzEocGMys\nxIHBzEp8udI6TfE3G3x5s3vziMHMShwYzKzEgcHMShwYzKzEgcHMShwYzKzEgcHMShwYzKzEgcHM\nSrplYJA0RVJNnrojaQ9JmxbmT5E0phZlmy2rumVgaCtJvVpI3gP4T2CIiBMj4taOb5VZz9WuwCDp\nekmzJM2XNC4v203S/ZLmSLotL+sr6X8lzZM0V9Jeefmukqbn/Fc3PoW6SR0V80haIOlMSfeTnpr9\nDUkzc73XSFpV0qeBLwNnS5otaX1JF+fnYyJpF0kP5HZdJGmlQtkn5zrnSdqkPf1k1tO0d8RwaESM\nAOqBIyStDVwA7BURWwL75Hz/A7waEZ+MiC2A2/Oj5k8AxkTE1kADcFSx8CryLIqIrSPiCuDaiNgm\n1/swcFhE3APcABwTEcMj4slC2SsDFwP7RsQnSV8o+1ah7Jdynb8Djq608ZLGSWqQ1LBw4cK29ZxZ\nN9bewHBEfoT9DGBdYBwwLSKeBoiIl3O+McBvGleKiFeAT5GG+Hfnx81/DRjWpPzW8lxZmN5c0p35\n8fYHApu10vaNgacj4rE8fwmwYyH92vx3FlBXqYCImBAR9RFRP2jQoFaqM+s5lvpr15JGk3b47SLi\nLUlTgNlAtcNuAZMjYv925HmzMH0xsEdEzJE0FhhdZTua807+uxh/Pd2WM+0ZMfQHXslBYRPSp/vK\nwI6SPg4gaUDOOxn4duOKktYgjTK2l7RBXtZH0kZN6qgmT6N+wPOSepNGDI1ez2lNPQrUNZYNHARM\nrWK7zZZ57QkMfwVWlPQwcAZpJ15IOpy4Nh9iNA71fwysIenBvHyniFgIjAUmSpoLTKfJaKOaPAX/\nA9wL3A08Ulh+BXBMPsm4fqHst4FDgKvz4ccHwHlL0xFmyxpFRFe3YZlQX18fDQ0NXd2Mbs2/4LT0\nJM2KiJrc21ONZeI+BjOrLQcGMytxYDCzEgcGMytxYDCzEgcGMytxYDCzEgcGMyvxdwCs0/impp7D\nIwYzK3FgMLMSBwYzK3FgMLMSBwYzK3FgMLMSBwYzK3FgMLMSBwYzK/FPu9WIpIXAMxWSBgIvdXJz\nmuO2lHWXdkDLbRkWEZ32jAIHhg4mqaEzf6uvJW5L920HdK+2+FDCzEocGMysxIGh403o6gYUuC1l\n3aUd0I3a4nMMZlbiEYOZlTgwmFmJA0ONSTpJ0nOSZufXF5rJt5ukRyU9Iem4DmrL2ZIekTRX0nWS\nVm8m3wJJ83J7a/acvda2UcmvcvpcSVvXqu4m9awr6Q5JD0maL+nICnlGS3q18H87sSPakutqsb87\nq19aFBF+1fAFnAQc3UqeXsCTwHrAR4A5wKYd0JZdgRXz9JnAmc3kWwAMrHHdrW4j8AXgZkCkp6Xf\n20H/k8HA1nm6H/BYhbaMBm7spPdIi/3dWf3S0ssjhq4xEngiIp6KiHdJT+TevdaVRMSkiHg/z84A\n1ql1HS2oZht3By6NZAawuqTBtW5IRDwfEffn6deBh4Ehta6nhjqlX1riwNAxDs9DwIskrVEhfQjw\nbGH+73T8G/VQ0qdQJQHcKmmWpHE1qq+abez0fpBUB2wF3Fsh+dP5/3azpM06sBmt9XdXvD+W4F+J\nXgqSbgU+WiHpeOB3wKmkf/6pwM9IO2WntyUi/pTzHA+8D1zWTDE7RMRzktYCJkt6JCKmdUyLu46k\nvsA1wHcj4rUmyfcDQyPijXxe6Hpgww5qSrfvbweGpRARY6rJJ+kC4MYKSc8B6xbm18nLat4WSWOB\nLwG7RD6ArVDGc/nvi5KuIx0GtPeNWs021qwfWiOpNykoXBYR1zZNLwaKiPiLpN9KGhgRNf+CVRX9\n3Wn90hwfStRYk2PBPYEHK2SbCWwo6eOSPgLsB9zQAW3ZDTgW+HJEvNVMnj6S+jVOk05YVmpzW1Wz\njTcAB+ez8J8CXo2I52tQ9xIkCfg98HBE/LyZPB/N+ZA0krRvLOqAtlTT353SLy3xiKH2zpI0nHQo\nsQD4JoCkjwEXRsQXIuJ9Sd8BbiGdvb8oIuZ3QFt+DaxEGq4CzIiI8cW2AGsD1+X0FYHLI+Kv7a24\nuW2UND6nnwf8hXQG/gngLeCQ9tbbjO2Bg4B5kmbnZT8EhhbasjfwLUnvA/8G9mtuhNVOFfu7i/ql\nWb4l2sxKfChhZiUODGZW4sBgZiUODGZW4sBgZiUODLaEfD3/CklP5lt2/yJpo6Us6whJD0tq7o7L\nassZLanSjWLWQXwfg/1HvsHnOuCSiNgvL9uSdO39saUo8v8AYyLi77VrpXUGjxisaCfgvXyTDQAR\nMSci7sx34Z0t6cH8WwL7NuaRdIykmfkLSCfnZeeRvnJ9s6TvFSuRNKP4JSVJUyTVSxopabqkByTd\nI2njpg1U+r2LowvzD+YvRiHpq5Luy79zcL6kXjXrmeWMA4MVbQ7MaibtK8BwYEtgDHC2pMGSdiV9\n2WhkTh8haceIGA/8A9gpIs5pUtaVwH/Df24hHxwRDcAjwKiI2Ao4EfhJtQ2X9AlgX2D7iBgOLAYO\nrHZ9W5IPJaxaOwATI2Ix8IKkqcA2wI6k+/0fyPn6kgJFS1/CugqYBPyIFCD+mJf3By6RtCHplvLe\nbWjfLsAIYGa+3XgV4MU2rG8FDgxWNJ/0nYG2EHB6RJxf7Qr5K8eLJG1B+pQfn5NOBe6IiD3z4cGU\nCqu/z5Ij3ZUL7bgkIn7QtuZbJT6UsKLbgZWKPx4iaQtJo4A7gX0l9ZI0iDRSuI/0JalD828dIGlI\n/p2B1lxJ+uZn/4iYm5f158OvF49tZr0FwNa5rq2Bj+fltwF7N9YtaYCkYVW0wypwYLD/yN8m3BMY\nky9XzgdOB/5Juloxl/TbjbcDx0bEPyNiEnA5MF3SPNJhQb8qqvsj6avYVxWWnQWcLukBmh/NXgMM\nyG37DvlqSUQ8BJwATJI0F5hM+q1HWwr+dqWZlXjEYGYlDgxmVuLAYGYlDgxmVuLAYGYlDgxmVuLA\nYGYl/x8PzKX1AAAABElEQVSEWJ6E76BZzgAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x11e213410>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"displacement: -5.186292\n", | |
"model_year: 4.287827\n", | |
"weight: -4.287711\n", | |
"horsepower: -1.605432\n", | |
"cylinders: 0.685287\n", | |
"acceleration: 0.608814\n", | |
"\n", | |
"weight: -5.522914\n", | |
"model_year: 2.410542\n", | |
"horsepower: -1.416881\n", | |
"acceleration: -0.805342\n", | |
"cylinders: -0.311572\n", | |
"displacement: -0.156405\n", | |
"\n", | |
"weight: -2.154847\n", | |
"model_year: 1.428982\n", | |
"horsepower: -1.089580\n", | |
"displacement: 1.041145\n", | |
"cylinders: -0.867039\n", | |
"acceleration: -0.200428\n" | |
] | |
} | |
], | |
"source": [ | |
"root_lm = lmt.root.lm\n", | |
"node_1_coef = root_lm.coef_ + lmt.root.left.lm.coef_\n", | |
"plot_coefs(node_1_coef, training_columns, ' (horsepower < 78)')\n", | |
"\n", | |
"right_coef = lmt.root.right.lm.coef_\n", | |
"node_2_coef = root_lm.coef_ + right_coef + lmt.root.right.left.lm.coef_\n", | |
"plot_coefs(node_2_coef, training_columns, ' (horsepower >= 78 & horsepower < 97)')\n", | |
"\n", | |
"\n", | |
"node_3_coef = root_lm.coef_ + right_coef + lmt.root.right.right.lm.coef_\n", | |
"plot_coefs(node_3_coef, training_columns, ' (horsepower >= 97)')\n", | |
"\n", | |
"\n", | |
"print_coefs(node_1_coef, training_columns)\n", | |
"print('')\n", | |
"print_coefs(node_2_coef, training_columns)\n", | |
"print('')\n", | |
"print_coefs(node_3_coef, training_columns)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 430, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1QAAAEUCAYAAAAspncYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8TIf+//H3ZCGILXZSRdR2NVWtawtBaq0IsS8pfkr1\nttUiltoaRIiqpWopqkipNUTKVZW2otHmtpaqpZaoJWgSYgsVkszvDw/zrVoiR8xM4vV8PO7j0czM\nOecz53benfecmXNMZrPZLAAAAABAljnYegAAAAAAyKkoVAAAAABgEIUKAAAAAAyiUAEAAACAQRQq\nAAAAADCIQgUAAAAABlGokG3i4+P14osv2noMADlUfHy8qlatqp49e95z3/vvv6+qVasqOTk5S+uc\nMGGCZs+eLUnq37+/jh07li2zAng63C93wsPD9cYbb0iSZs2apQ0bNjx0HX9/PHInJ1sPAADAHXnz\n5tWJEyd05swZlStXTpJ0/fp17dq167HXvXDhwsdeBwD83bvvvmvrEWAHOEIFq7h69aoCAwPVtm1b\n+fr6aurUqUpLS1NISIhmzJghSUpKSlK1atX0448/SpI2btx436CqUaOGQkND5e/vr1atWmnr1q2W\n++bMmaM2bdrI19dXgwYNUlJSkrZt26bu3btbHtOqVSvNmjVLkvTnn3/Ky8tLGRkZ2r17t3r06KEO\nHTrI399f3333naTbnyzduT0gIOCJ7SMAkqOjo1q3bq3IyEjLbVu3bpWPj89dj/v222/VuXNntW/f\nXt26ddOePXskSSkpKXr33XfVsmVLBQQE6Pjx45ZlmjVrpt9++02xsbFq27at5fa//z179mwNGzZM\n3bp1U7NmzfTee+9pzZo16tmzp7y9vfXVV1/dM3N8fLyaNm2qESNGyM/PT+3atdMvv/wiSbp165Ym\nTpxoyaXRo0crJSVFS5cuVWBgoOUxtWvX1tq1ayVJu3btUqdOnR76PGfPnq1+/frJ19fXsh4A1jdy\n5Eh99tlnkqTt27fL19dXfn5+GjlypBo3bqz4+HhJt9/jDBgwQL6+vmrfvr3i4uLuWVd4eLj69eun\nvn37qk2bNurbt68SEhIk3X6/MnDgQPn6+qpt27ZatGiRJOmtt97SmjVrJEl79+5V1apVdfr0aUnS\nvHnzNHXqVMs/d+jQQX5+fvrPf/5jWW9AQIDefvtttWnTRmFhYU9wT+VuFCpYRXBwsIoUKaLIyEit\nW7dOhw8f1uLFi9W8eXPt2LFDkrRjxw4VL17cUqiioqLUsmXLe9aVnp6uwoULKzw8XDNnztSoUaOU\nnJysdevWaceOHVq7dq0iIyP13HPPaeTIkfLy8tKRI0d05coVxcfHKyUl5a5tvPLKK7p69aref/99\nTZ06VevXr9e8efMUFBSks2fPSpKOHTumsLAwwgawgvbt22vjxo2Wvzds2KAOHTpY/j5x4oRmzJih\nBQsWaMOGDZo4caLeeecdXb9+XR9//LFcXFy0ZcsWzZo1S3/88UeWt79r1y4tXLhQmzdv1s6dOxUX\nF6fly5dr7Nixlq8P/tPZs2fl5eWliIgIDR06VO+9955u3bqlefPmKTExUREREYqIiFBGRoamTp2q\nV155RTt37pTZbNbu3buVP3/+e7LvYc9Tks6cOaP169dr2rRpWX6OAB5d79695efnZ/nfxx9/fM9j\nLl68qOHDh+vDDz9URESE6tatayktknT69GmNHj1akZGRevnlly0l7J92796tcePGafPmzfrXv/6l\nSZMmSZICAwNVt25dRUZG6ssvv9TGjRu1adOme95HlShRQjt37pR0O0tatWqlDRs26MiRI1qzZo0i\nIiLk7e2tMWPGWLZZqFAhbd68mQ+NHwOFClYRHR2tXr16yWQyKU+ePOrWrZuio6P10ksvKSEhQRcu\nXNCOHTv05ptvKiYmRjdv3tTPP/8sb2/v+66vV69ekqRq1aqpSpUq+vnnnxUdHS1/f3/lz59fkvTa\na6/pp59+koODgxo0aKCYmBjt2LFDXbt2VXx8vK5evapvv/1WLVu21N69e5WUlKS33npLfn5+GjBg\ngEwmkw4fPizp9neoXV1drbOzgKdczZo15eDgoP379+vcuXO6du2aqlSpYrk/JiZGiYmJ6tOnj/z8\n/BQYGCiTyaRTp07pxx9/VPv27WUymeTm5qbmzZtnefsNGjRQwYIF5eLiopIlS6pRo0aSpPLly+vS\npUv3XaZw4cLy9fWVJHl7e8vR0VGHDx9WdHS0unXrJmdnZzk4OCggIEA7duxQuXLlVLp0af3222/a\nsWOHBgwYoNjYWJnNZkuhetjzlKRatWrJyYlv7gNP2tKlSy0fikRERGjQoEH3POaXX36Rh4eHqlWr\nJknq0KHDXe8bPD099eyzz0qSqlev/sDfgzZs2FAVK1aUJHXp0kU7duzQ9evXtXv3bsvvSwsWLCh/\n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\nolABAAAAgEGcNh05mu/QiEd+LKchBZ5uWcmLfyI/ADwp/8wm8ibn4QgVAAAAABhEoQIAAAAAgyhU\nAAAAAGAQhQoAAAAADKJQAQAAAIBBFCoAAAAAMIhCBQAAAAAGUagAAAAAwCAKFQAAAAAYZBeFKjY2\nVoMHD36sdVy6dEmRkZGSpAULFmjfvn3ZMRqAXISsAWAt5A3w9LCLQpUdDh8+rG+//VaSNGDAAHl6\netp4IgC5EVkDwFrIGyBncDKyUEpKikaPHq2rV68qMTFRPXr00L/+9S+FhIQoIyNDpUqV0rRp03T4\n8OF7bjt58qSCg4MlSUWKFFFISMhd6/7vf/+rJUuWyMHBQS+99JICAwM1e/Zs7dmzR9evX9ekSZO0\nYcMG7d+/X5cuXVK1atU0efJkzZ8/X7///rtWrVqlPXv2qE2bNqpfv77ef/99xcfHKz09XX379lWb\nNm0UEBCgatWq6ejRo0pJSdGsWbNUrly5x9+bALIVWQPAWsgbAEYZKlQnT57Uq6++qhYtWighIUEB\nAQHKly+fpk+fLg8PD61Zs0ZxcXEaN27cPbeNHz9eISEhqly5stasWaNFixapQYMGkm4f2p49e7bW\nrVunfPnyadiwYYqJiZEkVapUSWPGjFFKSooKFSqkzz//XBkZGXr11VeVkJCggQMHauXKleratav2\n7NkjSVq1apXc3Nw0bdo0paSkyN/fX/Xq1ZMkeXp6avTo0ZoxY4Y2bdqkAQMGZMf+BJCNyBoA1kLe\nADDKUKEqXry4li5dqq1bt8rV1VVpaWk6f/68PDw8JEmdO3eWpPvedid4JOnWrVuqUKGCZb2nTp1S\ncnKyJQCuXbumU6dOSZIqVqwoScqbN6+Sk5M1ZMgQ5c+fX9evX9etW7fuO2dcXJwl0FxdXeXh4aHT\np09LkmrUqCFJKl26tM6fP29kNwB4wsgaANZC3gAwylChWrx4sWrVqqUePXrop59+0vbt21WyZEmd\nOHFCFSpU0IIFC1SxYsX73laxYkWFhoaqbNmy2rVrl5KSkizrdXd3V5kyZbR48WI5OzsrPDxc1atX\n17Zt2+TgcPvnXtHR0Tp37pxmzpyp5ORkffPNNzKbzXJwcFBGRsZdc3p4eOiXX35R8+bNlZKSoiNH\njsjd3f0xdhcAayJrAFgLeQPAKEOFqmnTpgoODtbmzZtVsGBBOTo6KigoSKNGjZKDg4NKlCihPn36\n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\nZolMAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x11f371850>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"rows = 1\n", | |
"cols = 3\n", | |
"coefs = [\n", | |
" node_1_coef,\n", | |
" node_2_coef,\n", | |
" node_3_coef,\n", | |
"]\n", | |
"titles = ['Low power', 'Medium power', 'High power']\n", | |
"f, axs = plt.subplots(rows, cols, sharex='col', figsize=(12, 4))\n", | |
"for col in range(cols):\n", | |
" pos = np.arange(len(coefs[col])) + .5\n", | |
" axs[col].barh(pos, coefs[col], align='center')\n", | |
" axs[col].set_yticks(pos)\n", | |
" axs[col].set_yticklabels(np.array(training_columns))\n", | |
" axs[col].set_xlabel('Coef value')\n", | |
" axs[col].set_title(titles[col])\n", | |
" axs[col].set_xlim(-5.5, 5.5)\n", | |
"\n", | |
"f.tight_layout()\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 434, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA2UAAAGACAYAAAAtYMpLAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8TFf/B/DPTEwShMSW0FoeRYKQDVlEg6ilrX2rqlBr\n0cX2UDshamsrpfqgtnh4aGyhDx61r5EgRDRRhEhsiYhEQtaZ8/sjv0wzkokbZjLJ5PN+vbxkzr1z\n5nvvnLl3vnPOPVcmhBAgIiIiIiIig5AbOgAiIiIiIqLyjEkZERERERGRATEpIyIiIiIiMiAmZURE\nRERERAbEpIyIiIiIiMiAmJQREREREREZEJMyHbKzs8O+ffsAANOnT8fnn3/+VvU1b94ce/bs0UFk\nVFY9fvwYdnZ2CAkJ0UmbyrNnzx40b95cJ3WVVjk5Odi8ebOhwyiX8h8Liah4fHx8MGvWLMnrv+7z\nlp6ejm3btukiNCrnSuK7gxACQUFBePr0KQAgJCQEdnZ2ePz4sV5ftzSoYOgAjNWsWbOgUqkMHQYZ\nEbap4jl48CAWL16ss0SWiKgkrFq1ChUq6O7r2ebNm7Fz50589tlnOquTSF/CwsLw7bff4tixYwAA\nZ2dnnD17FjVq1DBwZPrHpExPqlSpYugQyMiwTRWPEMLQIRARFZuVlZVO6+OxkMqSV9urqakpatWq\nZaBoShaHLxYiLS0Nvr6+aNu2LZydnTFy5EiEh4ejRYsWOHTokMa606ZNw/jx4wvUkX+oWUhICFq2\nbImjR4+iW7duaNGiBXr37o1Lly6p109OTsaUKVPQqlUrtGvXDnv37i1Q59GjR9GzZ0+0bNkS3bp1\nw4YNG9Q9J/fv34ednR3WrFkDDw8PfPjhh8jKysK6devQqVMntGjRAl27duUQhlLuwYMHGDNmDJyd\nneHt7Y0zZ86ol+VvU0qlEkuXLsX777+PFi1aoEePHhpt08fHB8uWLcPXX38NBwcHeHt7Y/v27Vpf\n98aNGxg9ejRat26tbitBQUHq5UIIbN68GV26dIGjoyN69eqFU6dOqZffvHkTI0eOhKOjI7y8vDB3\n7lw8f/5cvdzb2xvr16/HqFGj4ODggE6dOuH48eP4448/0KVLFzg7O2P06NFISkoqVp0bN27E2LFj\n4ejoCE9PT/z8888Acj9z06ZNA5A7tIfDgEtedHQ0fHx80LJlS3h7e2PXrl0ay3ft2oXu3bvDwcEB\nnTt3xtatW9XL9uzZg65du2L+/Plo1aoVpk2bhpcvX2LGjBlo27YtWrZsiYEDByI4OFj9nKysLCxZ\nsgTt2rWDi4sLhgwZgqtXr6qXr1q1Cp9//jlWrFiBNm3awM3NDX5+fsjKylKv8/DhQ0yaNAnu7u5w\ndnbG+PHjERcXBwD46quvMGHCBPW6wcHBsLOzw/79+9Vlvr6+GDduHAAgJSUFM2bMgJubG1xdXTF6\n9GjcuXNHve706dMxceJE+Pj4oFWrVvjPf/7ztrucDKhPnz5YtmyZ+vGuXbtgZ2eHy5cvq8vGjBkD\nPz8/PHr0CN988w1cXFzQtm1bTJo0CfHx8er1Xh2+eOrUKfW5v2/fvti8eTPs7Ow0Xl/b523Pnj34\n6aef8ODBA/VQeCr7ijpnv+58HRMTg7Fjx8LFxQXu7u6YNWsWXrx4AQBQqVRYs2YNOnbsCCcnJ/Tr\n10/jua96k+NcZmYmFi9ejI4dO6JFixZwd3fHjBkzkJ6ejvv376t7dDt16oRVq1YVGL6Ynp6O77//\nHt7e3mjZsiUGDBigcS6YPn06Zs6cCT8/P7i5ucHZ2RlTpkxBWlqa7t4AfRFUwMiRI0XXrl3F+fPn\nRXR0tPjqq69Ex44dxejRo8XYsWPV67148UI4OTmJI0eOCCGEsLW1FUFBQUIIIb799lsxbNgwIYQQ\nFy5cEHZ2dqJXr17i4sWL4vbt22LIkCGic+fOQqVSCSGEGDp0qOjevbsICwsT4eHhom/fvsLW1lbs\n3r1bCCHEyZMnhaOjo9i5c6e4d++eOHr0qPDy8hKrVq0SQggRFxcnbG1tRffu3cXt27fF9evXxbFj\nx4Srq6s4f/68uH//vggMDBR2dnYiNDS0pHYlFUNWVpbo1q2bGDJkiIiKihLBwcHigw8+ELa2tuLC\nhQsabWrLli2iU6dO4sqVKyIuLk78/PPPolmzZiI2NlYIIcSQIUOEvb298PPzE7dv3xZbt24VzZo1\nE7///rsQQojdu3eLZs2aCSFy27GHh4eYOXOmiI6OFrdv3xazZs0S9vb24smTJ0IIIdauXSucnZ3F\n3r17xb1798Qvv/wi7O3txc2bN8Xjx4+Fq6urWLJkiYiOjhZXrlwRn376qfDx8VFvW8eOHYWTk5P6\n+ePGjRPOzs5iwIAB4tq1ayI4OFi0adNGLFu2TAghJNfp4OAgduzYIWJjY8W6deuEra2tuHjxosjM\nzBRbt24Vtra2IiEhQaSnp+v9/aO/2draChcXF3HgwAERGxsrFi5cKJo2bapunxs3bhQODg4iMDBQ\n3L17V2zfvl20bNlSbNiwQQiR2z5tbW3FlClTRGxsrLh9+7ZYvHix6N+/v4iMjBSxsbFi7ty5wsXF\nRbx48UIIIcSECRNE3759xcWLF8WdO3fEqlWrRIsWLcSdO3eEEEKsXLlS2NvbCx8fHxEVFSVOnjwp\nPD09xZw5c4QQQqSmpgovLy8xfPhwcf36dRERESGGDBkivLy8xPPnz8XOnTuFq6urUCqVQgghfvzx\nR2FnZydmzZql3m5vb28RGBgolEqlGDhwoBgxYoS4du2auHXrlpg7d65wc3MTSUlJQojcc4Stra0I\nCAgQt2/fFgkJCSXz5pBe+Pv7i969e6sfT548WdjZ2YlffvlFCCFERkaGcHBwECdOnBCdOnUS//zn\nP8Vff/0lIiMjxZdffim6du0qMjMzhRC5x++ZM2cKIYT4888/RbNmzcSKFSvEnTt3RGBgoHBwcBC2\ntrbq1yrq85aeni6WL18uvLy8REJCgvo1qOx63Tm7qPN1SkqK8PT0FF988YWIiooSV69eFR9++KGY\nPHmyEEKIZcuWic6dO4vTp0+LmJgY8e9//1u0aNFCXLhwQQih+d3hTY9zvr6+onPnzuLixYsiLi5O\nHDhwQLRs2VJs2rRJ5OTkiKNHjwpbW1sRHh4u0tLSxIULF4Stra149OiREEKIL774Qnh7e4vTp0+L\n27dvi4ULF4rmzZuLq1evql/T3t5ezJ8/X9y5c0ecPHlSODk5idWrV5f0W1VsTMpeER0drf4SnCcp\nKUksXrxY/P7778Le3l48e/ZMCCFEUFCQcHNzE1lZWUKIopMyW1tbcfLkSXWdR44cEba2tuLp06fi\n9u3b6i+TeW7duqWRlA0aNEgsWbJEI9Z9+/YJBwcHoVQq1UnZ9u3b1cs3bdokPD09RUxMjLrs/Pnz\nIjExURe7inTs5MmTws7OTjx48ECjrLCkbOHChaJ79+7qL3IqlUqcPn1aPH/+XAiRe1Lv06ePRv1T\np04VAwcOFEJoHlgTExPF2rVrxcuXL9XrxsbGqtukSqUSnp6eYuXKlRr1rVy5Uly9elX8+OOPom/f\nvhrLHj9+LGxtbUVYWJgQIjeByjvoCyHEiRMnhK2trQgODlaXTZgwQYwePVoIISTXOWHCBI11Wrdu\nLX799VchRO7nM/8XFyo5tra24scff1Q/Tk5OFra2tuLw4cNCpVKJtm3bih9++EHjOcuWLRMeHh5C\npVKpk7Lo6Gj18rFjx4phw4ap2/iLFy/EuXPnREZGhoiJiRG2trbi5s2bGnV+/vnn6qRr5cqVwsHB\nQeP4t3PnTmFvby9SU1PF1q1bhZOTk/r4LoQQT58+FY6OjmLr1q3iyZMnws7OTkRERAghhOjfv78Y\nN26c6NKlixAi99zRtGlT8eTJE3Hu3DnRrFkzkZqaqhFPly5dxJo1a4QQuecIT0/PN9vBVOqEh4cL\nOzs78fTpUyGEEG3bthXjxo0Tw4cPF0IIcfr0adG6dWvx22+/ibZt24qcnBz1czMzM4WTk5P6R7P8\nSdm0adPE4MGDNV5ryZIlBZIybZ83IYRYvXq16Nixox62mgzhdefsos7X27dvF87OzhrHpsuXL4tV\nq1aJtLQ00aJFC3HixAmN586aNUuMGDFCCKH53eFNj3NBQUHi0qVLGmWfffaZmDFjhhBCiIsXLwpb\nW1sRFxcnhBAaSVned+MzZ85oPH/AgAHi66+/1njN/J+x8ePHq79flGa8puwVN2/eBAA4ODioy6pV\nq4bp06cjOzsbfn5+OHjwIAYPHoz9+/eje/fuUCgUkupu2LCh+u+864Oys7PVr2lvb69e3rhxY1Su\nXFn9OCoqChEREdixY4e6TKVSISMjAw8ePIBMJgMA1KtXT728Z8+e2LVrF7p06QJbW1u0a9cO3bt3\nLxcXS5ZFt27dQrVq1fDOO++oyxwdHQtdd/DgwThy5Ai8vLzQokULvP/+++jRo4fGdWdt2rTReI6j\noyOOHDlSoK4aNWpg8ODBCAoKQlRUFGJiYnDjxg0AucMknz17hidPnmh8JgDg66+/BgCsXr0aUVFR\ncHZ2LlB3dHS0urxBgwbq8ooVKwIA6tevry4zNzdHcnIygNz2LqXOf/zjHxrLqlSpguzs7ALPoZKX\n/72xtLQEAGRkZCApKQmJiYkF3ts2bdpg/fr16hm3ZDIZ6tatq14+cuRIjB8/Hh4eHnB2dsb777+P\nnj17wszMDJGRkQCAgQMHatSZlZWlMTzxvffe0zj+OTk5ITs7G3fv3sWtW7fQsGFDjet5qlevjkaN\nGuHmzZv47LPP0KJFC5w/fx4NGjRAZGQkduzYgf79+yM+Ph6nT5+Gg4MDatasiaCgICiVSrz//vsa\n8WRmZiI6Olr9OP/2UdnWsmVL1KhRAxcuXEDjxo2RmZkJHx8fjB8/HtnZ2Th16hTef/99REVFISkp\nCa1bt9Z4fnp6ukbbyBMZGQkvLy+NslatWmHjxo0aZdo+b2R8ijpnJyYmFnm+3rdvH9577z1YWFio\nl7m4uMDFxQXXrl1DVlYWJkyYALn876ubsrOzUbNmzQJxREZGvtFxrlevXjh79iyWLVuGmJgY3L59\nG7GxsZKOh3nfl189f7Rq1QonT55UP65fvz5MTEzUj6tUqaIxRLi0YlL2iqJmPFIoFOjevTv++9//\nonPnzggODsaUKVMk121qalqgTAihTqjEKxc35k/2FAoFRo0ahR49ehSow8bGBgkJCQAAMzMzdXn1\n6tWxf/9+XL58GWfPnsWpU6ewceNGLF68GH379pUcN5UMmUxWZBvI77333sPRo0cRHByMc+fO4cCB\nA1i7di3Wr18PDw8PAAXbskqlUre1/OLj4zFo0CDY2NigY8eO6NChA6ytrdGvX78iY8gfo6enJ2bP\nnl1gWfXq1dV/F/bZyn/gf5M6tX2myPAKe2+FEBrHqPyUSiWAv9uJXC7XeH9bt26NU6dO4ezZszh7\n9iy2bduGf/3rXwgMDFS30R07dsDc3Fyj3vx1vNoG815TLpcXeF4elUqlrr9Dhw44f/483nvvPTRq\n1AgtW7ZE3bp1ERoaitOnT8Pb2xtAbvu1srJCYGBggfoqVaqk/lvba1LZI5PJ4OXlhXPnzuHJkydo\n06YNWrVqBZVKhYiICJw5cwZff/01rl27hsaNG6uvf82vsMmcTExMJM26q+3zRsanqHP262btLGp5\n3rFy1apVGj+iAoW3rzc9zs2aNQvHjh1Dnz590KVLF0yaNAkLFiwoMm5tdeVRqVQa21ZWvxtwoo9X\nNGrUCABw/fp1dVlaWho8PDxw6dIl9O3bF1euXMHOnTvRqFEjndyvoWnTpgCAK1euqMvu37+v7jUA\ncnvOYmJi0KBBA/W/mzdvYsWKFVrrPXjwILZv3442bdpg0qRJCAoKgpeXV4HJSqh0aNasGZ49e4aY\nmBh1Wf52mN+2bdvwxx9/wMvLCzNmzMChQ4fQsGFDHD58WOtzr169Wmh7PXDgAF68eIFt27bhiy++\ngLe3N549ewYg9yBWpUoV1KpVCxERERrP8/Hxwfr169G4cWNER0fjnXfeUbdNuVyO7777Do8ePXqj\nfaGLOgtLQMnwLCwsULt2bYSFhWmUX758GbVq1VL/yv+qn3/+GWFhYejcuTN8fX3xxx9/QKFQ4OTJ\nk2jSpAkA4OnTpxrHyM2bN6unVQaAO3fuqC9oB4Dw8HCYm5urk6y7d+9qHHeTkpJw9+5d9XmhY8eO\nuHz5Mk6fPg13d3cAgIeHB06cOIHQ0FB1UtakSRN1PXmx1K1bF/7+/rh48eLb7kIqpTp27Ijz588j\nNDQU7u7uMDU1hYuLCwIDA3H//n14eXmhSZMmuH//PqysrNRto0aNGli8eLG6FyA/Ozs7XLt2TaMs\nPDy8WHHxWGhcijpnW1hYFHm+zjvO5T8OnjlzBh06dECDBg2gUCgQHx+vcRz9/fffC50s602Oc8+e\nPcOuXbuwYMECfPvtt+jduzcaNmyIuLg4ddJUVHtt3LgxABQ4f4SFhamXlWVMyl7RsGFDdOrUCb6+\nvrh06RKio6MxY8YMVKlSBQ4ODmjevDmaNGmCtWvX6qy36R//+If6NUNDQxEVFYVvv/1W45eJcePG\n4cCBA1i3bh1iYmJw8uRJzJ07F+bm5oX+IgDkDt1ZunQp9u/fjwcPHiA4OBiRkZFah8SRYbm5ucHe\n3h5Tp05FREQEwsLC4OfnV+i6z549w8KFC3HixAk8ePAAx44dw/379zXe2wsXLmDNmjW4e/cutmzZ\ngkOHDmHEiBEF6qpduzbS0tJw+PBhdV3z5s0DAPXQr1GjRmHz5s04cOAAYmNj8csvvyA8PBzt27fH\nkCFD8Pz5c0yfPh1//fUXIiIiMHnyZMTExBQYXiiVLurMG/4bERGhcQIiwxs3bhy2bNmCnTt34t69\newgMDMTWrVvx+eefaz0hP3jwAL6+vggJCcGDBw+wf/9+pKamwtHREQ0aNMBHH32EOXPm4NSpU4iN\njcWKFSuwY8cOdUIF5P7ANnPmTNy+fRsnTpyAv78/Bg8ejIoVK6Jnz56oXr06Jk+ejD///BN//vkn\nJk+ejKpVq+Ljjz8GkDvE3MrKCnv37oWbmxuA3KTs0KFDqF27tjo59PDwgJOTEyZOnIhLly7h7t27\nmD17No4fPw5bW1s9710yFE9PTzx58gSnT5/WaB/79u1D69atUbVqVfTo0QPVqlXDxIkTERERgZs3\nb2LKlCkIDw9Xt5/8hg8fjrCwMKxatQoxMTEICgrCv//972LFVblyZaSkpODOnTvIzMzUybaS4bzu\nnF3U+bpHjx6oXLkyZsyYgZs3b+LKlStYvHgxXF1dUbFiRXz++ef44YcfcPDgQcTFxWHLli1YvXq1\nxqUxed7kOGdhYQELCwscO3YMsbGxiIyMxJQpU/Do0SP19428c3dUVBRSU1M1nl+/fn18/PHHmD9/\nPs6ePYvo6GgsXrwYf/75J4YOHarL3WwQHL5YiCVLlmDx4sUYP348lEql+lqHvOSnd+/e+OGHHwod\nSvimvv/+eyxevBhffvkl5HI5Ro8erZ6KGQC8vLywbNkyrFu3DitXrkT16tXRu3dvTJo0SWudvXv3\nxtOnT7Fq1So8evQINWrUQN++fTF27FidxU26Y2Jigl9//RW+vr4YOnQoLCwsMHHiRMycObPAumPH\njkVGRgZ8fX2RmJiIOnXq4Ouvv0afPn3U63Tp0gXXrl3DL7/8gnfffRfLly9X/5Kf34cffoiIiAj4\n+fnh5cuXqF+/PsaPH49169YhIiICXl5eGDp0KDIyMrB8+XIkJSWhSZMmWLNmjfpLxKZNm/D9999j\n4MCBMDc3h5ubG3766SetPxi8Tq1atd66zrwpej/99FNMmTIFw4cPf6NYSPcGDRqEjIwMrF27Fr6+\nvqhXrx6mT5+OwYMHa33O7NmzsXTpUkyZMgXJyclo0KCB+ssEAPj5+eGHH37AzJkzkZqaikaNGmHV\nqlXq4bxA7rUN9evXx8CBA1GpUiV88skn+OqrrwDkDv3esGEDlixZgiFDhsDExAQeHh7Ytm0bqlat\nqq6jQ4cO2L17t/p13d3dIYTQ+GzJZDKsXr0aS5cuxfjx45GVlYVmzZphw4YNRvFrLhWucuXKcHV1\nRWRkpHrKend3d6hUKnX7MDc3x6ZNm7BkyRIMGzYMMpkMTk5OCAgIKPR676ZNm+Knn37Cjz/+iLVr\n16JZs2YYNGiQxi0kXqdr167YtWsXevbsiR9++AFdu3bVzQaTQbzunD1u3Lgiz9cbNmzA4sWLMWDA\nAFSuXBldu3bF1KlTAQATJ06EQqHAsmXLkJiYiHr16mHBggWFdkK8yXFOoVDA398fS5cuRffu3VG9\nenV4eXlhxIgROHr0KIDc3rCuXbti0qRJ+PTTT/HBBx9o1LFw4UIsX74cU6dOxcuXL9WvWdg16GWN\nTJSFQZalzNKlS3H37l2sWbPG0KEQFcrHxwf169fHokWLDB0KUamwatUq7N+/v9DJbohKq2vXrsHU\n1FR9mQMArFu3DoGBgeovsURkHDh8sRguXbqE3377DTt27ICPj4+hwyEiIiIjFhkZiWHDhuH06dN4\n+PAhTp48ic2bN6Nnz56GDo2IdIzDF4vh2LFj2L59O3x8fODp6WnocIiIiMiIDRw4EAkJCZg/fz4S\nEhJgbW2Nzz77DF988YWhQyMiHePwRSIiIiIiIgPi8EUiIiIiIiIDYlJGRERERERkQEzKiIiIiIiI\nDIhJGRERERERkQExKSMiIiIiIjIgSUmZv78/Hjx4oO9YiIiIiIiIyh1JSdm///1vqFQqfcdCRERE\nRERU7khKyjw9PbFz505kZWXpOx4iIiIiIqJyRdLNo4cOHYrQ0FDI5XLUqlUL5ubmGssPHz6stwCJ\niIiIiIiMWQUpK7m6usLV1VXfsRAREREREZU7knrKiIiIiIiISD8kT4l/7949zJs3Dz4+PoiPj8e2\nbdsQEhKiz9iIiIiIiIiMnqThi+Hh4Rg6dChatWqFK1euICsrC7dv38Z3332Hn3/+GR07dtR3nG9N\nJVR4kp5WoLxWRQvIZbxdG709oVIBKQmFL7S0hkzOdkZlg0olkJKaqX5sWcUMcrnMgBERSSNUAsrk\nDK3LTazMIWNbJtIZlVAiLTte0roWChvIZSZ6jqjskvQt8fvvv8eYMWOwceNGKBQKAMC8efMwatQo\nrFq1Sq8B6sqT9DQkZmomZYmZaYUmakRvJCUBSEkspDxRe7JGVAqlpGYiJS03KUtJy9RI0IhKM2Vy\nBpQphSdlypSMIhM2Iiq+tOx4vMh+/XecF9kJkpO38kpST1lkZCT8/PwKlPfv3x8BAQE6D0pfappZ\nwKZSVUOHQcbMsiZk1WprFPGiTSqLLC3MUM3SvEB5/l409qBRaWRiaY4K1SsaOgyicqOywhpVTd8x\ndBhlnqSkrGLFinj69CkaNGigUX737l1YWFjoJTAiIip98veiASg0cSPSp6KGKCpTMmDCNklEZZCk\n4Yvdu3fH4sWLER0dDZlMhszMTAQHB2PhwoXo1q2bvmMkIiIDSknLxLOUDKhUuf2+lhZmsLQwM3BU\nVF4VNUTRxNIcJlZMyoio7JHUUzZ58mRMmzYNH3/8MQCgR48eAIAPP/wQU6ZM0V90RERkUJZVcpOv\n/L1jRIbGIYpEZGwkJWWmpqbw9/dHbGwsIiMjoVAo0KRJE9SvX1/f8RERkQHJ5TIOUSQiItIzSUlZ\n79690alTJ3h7e3O4IhERERERkQ5JSsq6d++OM2fOYO3atahRowY6dOgAb29veHh4wNTUVN8xEhER\nERERGS1JSdmoUaMwatQopKWl4cKFCzh9+jTmzZuH58+fo127dli5cqW+4yQiIiIiIjJKkpKyPBUr\nVkTNmjXx7rvv4r333sOFCxcQHBysr9iIiIiIiKgcUAml5BtMWyhsIJeZ6DmikiUpKVu7di1CQ0MR\nFhYGIQQcHR3h4eGBCRMmoGXLlvqOkYiIiIiIjFhadjxeZCegssK6yPVeZCcAgNHdsFpSUrZixQrI\nZDJ06tQJI0eOhLOzs77jIiIiIiKicqSywtroki2pJCVlR44cwYULF3D+/Hl8+eWXUCqVcHV1hZub\nG9zd3dG4cWN9x0lERERERGSUJCVl9erVQ7169TBgwAAAwI0bN7B7924sW7YM2dnZiIqK0muQRERE\nRET09qReu2WM122VZpIn+khNTVX3lp0/fx5xcXFwcHBAx44d9RkfERERERHpiJRrt4z1uq3STFJS\nNmDAAERGRqJSpUrw9PTEuHHj0L59e1SrVk3f8RERERERkQ4Z4tqtvESvqOWvm+TDmElKylq1aoUp\nU6agdevWqFChWLPoExERERFROWahsHntOpUV1pLWM1aSMqzp06fj4cOHWLFiBW7duoUKFSqgcePG\nGDhwIOrWravvGImIiIiIqIySy0w4FPI15FJWioqKQo8ePXDw4EFUrFgRJiYm2L9/P3r16oW//vpL\n3zESEREREREZLUk9ZUuXLoWXlxeWLVsGhUIBAMjOzsb06dOxfPlyrF+/Xq9BEhERERERGStJSdnV\nq1exc+dOdUIGAAqFAl988QUGDRqkt+CIiIiIiKjkvW5ijrx1yvPkHLokKSmrWrUqXrx4UaA8LS2N\nE38QERERERkRqRNulPfJOXRJUkbVoUMHLFiwAP7+/qhfvz4AICYmBosWLUL79u31GiAREREREZUc\nTsxR8iQlZZMnT8bw4cPRtWtXWFlZAQCSk5Ph6OiIGTNm6DVAotJGqFRASiFd+imJgGXNkg+IiIiI\niMo0SUmZlZUVdu/ejTNnzuDWrVswNzdHo0aN4OHhoe/4iEqflITCEzDLmoAlx1WT8UpJywQAWFqY\nGTgSojejTMnQuszEyhwyuawEoyEi+pvkC8LkcjkaNGiAzMxMyOVy9TBGonLJsiZk1WobOgqiEmNZ\n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\nR0d4e3vj+PHjePr0KYQQ+O233/DBBx8YcvNIT/73v//Bz88PGzZsQI8ePQwdjtEq7PuSs7MzTp06\nhX379mHfvn0YNGgQPvroIyxatKjIuoz6mjJjUqtWLaxevRq+vr5IT0+HqakpVq1aZRSTSpQF2vZ/\no0aN4Ofnh27dusHExAQeHh4YPXq0ocN9a9u3b8ejR49w5MgRjV9c161bB39/f/To0QM5OTno1q0b\nBgwYAAD48ccfMWfOHPzrX/+CqakpfvrpJw6LKWUGDx6MlJQU9O3bF0qlEvb29sWeCOnevXuoVatW\ngSm07927h3fffVeX4RIBeLN227t3b8TGxqJfv34wMTFBkyZNXvuFqLRq3bo1xo4di6FDh8LExATW\n1tZYvXo1atasiQULFhQ4HstkMqxevRrfffcdcnJyYGpqiu+//x61a9dG7dq18eWXX2LYsGHIzs6G\no6OjUZyzqKAff/wRQgjMnj1bXebi4oJ58+YZMCrjo+370ubNm9UT7EglE4UNMCYiIiIiIqISwZ+x\niYiIiIiIDIhJGRERERERkQExKSMiIiIiIjIgJmVEREREREQGxKSMiIiIiIjIgJiUERERERERGRCT\nMiIiIiIiIgNiUkZERERERGRATMqIiIiIiIgMiEkZERERERGRATEpIyIiIiIiMiAmZURERERERAbE\npIyIiIiIiMiAmJQREREREREZEJMyIiIiIiIiA2JSRkREREREZEBMyoiIiIiIiAyISRkREREREZEB\nMSkjIiIiIiIyICZlREREREREBsSkjIiIiIiIyICYlBERERERERkQkzIiIiIiIiIDYlJGRERERERk\nQEzKiIiIiIiIDIhJGRERERERkQExKSMiIiIiIjIgJmVEREREREQGxKSMiIiIiIjIgJiUERERERER\nGRCTMiIiIiIiIgNiUkZERERERGRATMqIiIiIiIgMiEkZERERERGRATEpIyIiIiIiMiAmZURERERE\nRAbEpIyIiIiIiMiAmJQREREREREZEJMyIiIiIiIiA2JSRkREREREZEBMyoiIiIiIiAyISRkRERER\nEZEBMSkjIiIiIiIyIElJ2bBhw3Dr1i19x0JERERERFTuSErKbty4AXNzc33HQkREREREVO7IhBDi\ndSv961//QmhoKEaPHo26devCzMxMY7mNjY3eAiQiIiIiIjJmkpIyBwcHZGVl5T5BJlOXCyEgk8kQ\n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\nhqx7yoiIiIiIiMg0GMqIiIiIiIgUxFBGRERERESkIIYyIiIiIiIiBTGUERERERERKYihjIiIiIiI\nSEEMZURERERERApiKCMiIiIiIlIQQxkREREREZGCGMqIiIiIiIgUxFBGRERERESkIIYyIiIiIiIi\nBTGUERERERERKYihjIiIiIiISEEMZURERERERApiKCMiIiIiIlIQQxkREREREZGCGMqIiIiIiIgU\nxFBGRERERESkIIYyIiIiIiIiBTGUERERERERKYihjIiIiIiISEEMZURERERERApiKCMiIiIiIlIQ\nQxkREREREZGCGMqIiIiIiIgUxFBGRERERESkIIYyIiIiIiIiBTGUERERERERKYihjIiIiIiISEEM\nZURERERERApiKCMiIiIiIlIQQxkREREREZGCGMqIiIiIiIgUxFBGRERERESkIIYyIiIiIiIiBTGU\nERERERERKYihjIiIiIiISEEMZURERERERApiKCMiIiIiIlIQQxkREREREZGCGMqIiIiIiIgUxFBG\nRERERESkIIYyIiIiIiIiBTGUERERERERKYihjIiIiIiISEEMZURERERERApiKCMiIiIiIlIQQxkR\nEREREZGCZIWymJgY3Lhxw9S1EBERERERNTmyQtmWLVug1+tNXQsREREREVGTIyuUeXh4YOfOndBq\ntaauh4iIiIiIqEmRhBCipplee+01/PDDD1CpVGjbti1sbW0r/f3gwYMmK5CIiIiIiMiSWcmZacCA\nARgwYICpayEiIiIiImpyZLWUERERERERkWnIHhI/IyMDkZGR8Pf3R05ODrZt24aUlBRT1kZERERE\nRGTxZIWytLQ0jB07FteuXcNPP/0ErVaLy5cvIyAgAN98842payQiIiIiIrJYskLZ8uXLERwcjE2b\nNkGj0QAAIiMjERQUhNWrV5u0QCIiIiIiIksma6CP9PR0REdH/2n6X//6V8THx9d7UWSe9EKP28WF\nRi/XtpkdVJLsnrRUz4ReD+TfMn5BR2dIKnn7rSHeg8yDXi+QX1Ba43yO9jZQqaQGqIiocRJ6AV1e\niez51U62kHjOUD3QCx0Ky3JkzWunaQeVpDZxRU2DrKudZs2a4c6dO3+a/ttvv8HOzq7eiyLzdLu4\nELmlxoWy3NLCWgU5qkf5t4D8XCOXyTUuZDXEe5BZyC8oRX7hw0NZfmGprOBGZMl0eSXQ5csLZbr8\n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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x12061dc10>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt\n", | |
"import seaborn as sns\n", | |
"\n", | |
"sns.set_style(\"white\")\n", | |
"\n", | |
"def gen(n=40):\n", | |
" return np.random.normal(size=n)\n", | |
"\n", | |
"rows, cols = 3, 5\n", | |
"\n", | |
"fsize = 15\n", | |
"\n", | |
"rownames = ['low power', 'medium power', 'high power']\n", | |
"subpop_data = [\n", | |
" df.query('horsepower < 78'),\n", | |
" df.query('horsepower >= 78 & horsepower < 97'),\n", | |
" df.query('horsepower >= 97'),\n", | |
"]\n", | |
"\n", | |
"cmap = sns.color_palette(\"Set2\", cols)\n", | |
"\n", | |
"f, axs = plt.subplots(rows, cols, sharex='col', figsize=(15, 6))\n", | |
"\n", | |
"for i in range(rows):\n", | |
" for j in range(cols):\n", | |
" _ = axs[i,j].hist(subpop_data[i][training_columns[j]], histtype='step', color=cmap[j])\n", | |
" axs[i,j].set_xticks([])\n", | |
" axs[i,j].set_yticks([])\n", | |
" left, right = _[1][0], _[1][-1]\n", | |
" \n", | |
" # black dots\n", | |
" axs[i,j].scatter(left, 0, c='black', s=15)\n", | |
" axs[i,j].scatter(right, 0, c='black', s=15)\n", | |
" \n", | |
" # min,max annotations\n", | |
" axs[i,j].annotate(str(int(left)), \n", | |
" xy=(left, 0), \n", | |
" xytext=(-5, -20),\n", | |
" textcoords='offset points')\n", | |
" \n", | |
" axs[i,j].annotate(str(int(right)), \n", | |
" xy=(right, 0), \n", | |
" xytext=(-5, -20),\n", | |
" textcoords='offset points')\n", | |
" \n", | |
" if i == 0:\n", | |
" axs[i,j].set_xlabel(training_columns[j], labelpad=15, size=fsize)\n", | |
" axs[i,j].xaxis.set_label_position('top')\n", | |
" \n", | |
" if j == 0:\n", | |
" axs[i,j].set_ylabel(rownames[i], size=fsize)\n", | |
"\n", | |
"f.subplots_adjust(hspace=1.5)\n", | |
"sns.despine(left=True, bottom=True)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Inspecting the weights from the linear model tree gives us a very different understanding of what affects fuel efficiency than we got from the other models. While there are some commonalities across the different subpopulations that our LMT has identified, we also see some significant differences.\n", | |
"\n", | |
"For all vehicles, weight has a large negative impact, which makes sense because fuel economy should get worse with the more mass the vehicle has to move. Model year has a large positive impact for all vehicles; presumably engine technology improved significantly in this period. These are similar to what we see in the single linear model. However, the magnitude of those impacts changes across the subpopulations that our LMT has identified, and engine size and power have different magnitudes of effect in different subpopulations.\n", | |
"\n", | |
"For low-power vehicles, model year has a huge positive impact, and we see that in this population fuel economy is very sensitive to engine displacement.\n", | |
"\n", | |
"In the medium-power category, weight again has a huge negative impact but fuel economy only increases moderately with model year.\n", | |
"\n", | |
"For vehicles with high-power, weight has as much less significant impact, and the same can be said for model year. The engine size and power features are more relevant in this population by comparison to weight and model year. In this population the engine sizes are far more variable than in the other populations, so engine size ends up having a larger impact on the prediction than even what the coefficients tell us." | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 2", | |
"language": "python", | |
"name": "python2" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 2 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython2", | |
"version": "2.7.13" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment