Skip to content

Instantly share code, notes, and snippets.

@sebp
Created June 9, 2018 19:39
Show Gist options
  • Save sebp/d580d44c4beab3379c6dfda6810b33b8 to your computer and use it in GitHub Desktop.
Save sebp/d580d44c4beab3379c6dfda6810b33b8 to your computer and use it in GitHub Desktop.
GridSearchCV example to select hyper-parameters of CoxnetSurvivalAnalysis
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"from sksurv.datasets import load_breast_cancer\n",
"from sksurv.linear_model import CoxnetSurvivalAnalysis\n",
"from sksurv.preprocessing import OneHotEncoder\n",
"\n",
"from sklearn.model_selection import GridSearchCV, KFold\n",
"from sklearn.pipeline import make_pipeline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X, y = load_breast_cancer()\n",
"\n",
"for name, col in X.select_dtypes(exclude=[float]).iteritems():\n",
" X[name] = col.str.strip(\"'\").astype(\"category\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Pipeline(steps=[('onehotencoder', OneHotEncoder(allow_drop=True)), ('coxnetsurvivalanalysis', CoxnetSurvivalAnalysis(alpha_min_ratio=0.01, alphas=None, copy_X=True,\n",
" l1_ratio=1.0, max_iter=100000, n_alphas=100, normalize=False,\n",
" penalty_factor=None, tol=1e-07, verbose=False))])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"encoder = OneHotEncoder()\n",
"coxnet = CoxnetSurvivalAnalysis(l1_ratio=1.0, alpha_min_ratio=0.01)\n",
"pipe = make_pipeline(encoder, coxnet)\n",
"pipe.fit(X, y)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/sebp/Projekte/scikit-survival/sksurv/linear_model/coxnet.py:193: UserWarning: all coefficients are zero, consider decreasing alpha.\n",
" warnings.warn('all coefficients are zero, consider decreasing alpha.')\n",
"/home/sebp/Projekte/scikit-survival/sksurv/linear_model/coxnet.py:193: UserWarning: all coefficients are zero, consider decreasing alpha.\n",
" warnings.warn('all coefficients are zero, consider decreasing alpha.')\n",
"/home/sebp/Projekte/scikit-survival/sksurv/linear_model/coxnet.py:193: UserWarning: all coefficients are zero, consider decreasing alpha.\n",
" warnings.warn('all coefficients are zero, consider decreasing alpha.')\n",
"/home/sebp/Projekte/scikit-survival/sksurv/linear_model/coxnet.py:193: UserWarning: all coefficients are zero, consider decreasing alpha.\n",
" warnings.warn('all coefficients are zero, consider decreasing alpha.')\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n",
"/home/sebp/miniconda3/envs/sksurv36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py:252: FitFailedWarning: Classifier fit failed. The score on this train-test partition for these parameters will be set to 0.000000. Details: \n",
"AssertionError()\n",
" \"Details: \\n%r\" % (error_score, e), FitFailedWarning)\n"
]
}
],
"source": [
"Xt = OneHotEncoder().fit_transform(X)\n",
"\n",
"cv = KFold(n_splits=5, shuffle=True, random_state=328)\n",
"coxnet = CoxnetSurvivalAnalysis(\n",
" l1_ratio=1.0, alpha_min_ratio=0.01).fit(Xt, y)\n",
"gcv = GridSearchCV(\n",
" coxnet,\n",
" {\"alphas\": [[v] for v in coxnet.alphas_]},\n",
" cv=cv, error_score=0, n_jobs=4).fit(Xt, y)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"results = pd.DataFrame(gcv.cv_results_)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f554a3f7630>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"alphas = results.param_alphas.map(lambda x: x[0])\n",
"mean = results.mean_test_score\n",
"std = results.std_test_score\n",
"\n",
"fig, ax = plt.subplots(figsize=(9, 6))\n",
"ax.plot(alphas, mean)\n",
"ax.fill_between(alphas, mean - std, mean + std, alpha=.15)\n",
"ax.set_xscale(\"log\")\n",
"ax.set_ylabel(\"concordance index\")\n",
"ax.set_xlabel(\"alpha\")\n",
"ax.axvline(gcv.best_params_['alphas'][0], c='C1')\n",
"ax.grid(True)\n",
"#fig.savefig(\"coxnet.svg\", format=\"svg\", bbox_inches=\"tight\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"X202240_at 0.247224\n",
"X202687_s_at -0.030125\n",
"X203391_at -0.083153\n",
"X204014_at -0.161647\n",
"X204540_at 0.225211\n",
"X205848_at 0.042294\n",
"X207118_s_at 0.262498\n",
"X208180_s_at 0.126021\n",
"X209500_x_at 0.034568\n",
"X209835_x_at 0.119152\n",
"X210593_at 0.061139\n",
"X214806_at 0.221671\n",
"X216010_x_at -0.053909\n",
"X216103_at -0.116531\n",
"X217767_at 0.077670\n",
"X218883_s_at 0.261427\n",
"X219724_s_at -0.093424\n",
"X221916_at -0.182830\n",
"X221928_at -0.019244\n",
"age 0.010263\n",
"er=positive -0.143777\n",
"size 0.079251\n",
"dtype: float64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"coef = pd.Series(gcv.best_estimator_.coef_[:, 0], index=Xt.columns)\n",
"coef[coef != 0]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@Lesskin
Copy link

Lesskin commented Jun 11, 2018

Thanks you very much, this is extremely helpful !

@plpxsk
Copy link

plpxsk commented Jul 7, 2018

agree, love this 💯

@plpxsk
Copy link

plpxsk commented Jul 7, 2018

Just curious if you can clarify purpose of the pipe@sebp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment