In [ ]:
objective_used = skll_objective if skll_objective else 'neg_mean_squared_error'
intro_markdown_str = f"""### Characteristics
- Model: **{model_name}**
- Number of features: **{len(features_used)}**
- Tuning objective: **{objective_used}**
"""
if skll_fixed_parameters:
intro_markdown_str += "- Custom fixed parameters:"
for parameter, value in skll_fixed_parameters.items():
intro_markdown_str += f"\n - `{parameter}` : **{value!r}**"
display(Markdown(intro_markdown_str))
In [ ]:
skll_linear_models = ['Ridge', 'BayesianRidge', 'LinearSVR', 'Lasso', 'Lars', 'HuberRegressor', 'TheilSenRegressor']
In [ ]:
weights_markdown_str = """### Feature weights
Here are the feature weights as learned by the model."""
if model_name in skll_linear_models:
display(Markdown(weights_markdown_str))
In [ ]:
if model_name in skll_linear_models:
from six import iteritems
from skll import Learner
from sklearn.svm import SVR
model_file = join(output_dir, '{}.model'.format(experiment_id))
learner = Learner.from_file(model_file)
# get the coefficients and the intercept
weights = {}
coef = learner.model.coef_
intercept = {'_intercept_': learner.model.intercept_}
# convert SVR coefficient format (1 x matrix) to array
if isinstance(learner._model, SVR):
coef = coef.toarray()[0]
# inverse transform to get indices for before feature selection
coef = learner.feat_selector.inverse_transform(coef.reshape(1, -1))[0]
for feat, idx in iteritems(learner.feat_vectorizer.vocabulary_):
if coef[idx]:
weights[feat] = coef[idx]
# Some learners (e.g. LinearSVR) may return a list of intercepts
if isinstance(intercept['_intercept_'], np.ndarray):
intercept_list = ["%.12f" % i for i in intercept['_intercept_']]
print("intercept = {}".format(intercept_list))
else:
print("intercept = {:.12f}".format(intercept['_intercept_']))
print()
print("Number of nonzero features:", len(weights))
weight_items = iteritems(weights)
for feat, val in sorted(weight_items, key=lambda x: -abs(x[1])):
print("{:.12f}\t{}".format(val, feat))