Skip to content

Instantly share code, notes, and snippets.

@yl565
Created August 8, 2016 16:49
Show Gist options
  • Save yl565/1a978e358a00dea573590e0456dfc1b2 to your computer and use it in GitHub Desktop.
Save yl565/1a978e358a00dea573590e0456dfc1b2 to your computer and use it in GitHub Desktop.
Comparing using X or X_train for feature selection/scaling
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create a logistic regression model to predict TP53 mutation from gene expression data in TCGA"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import os\n",
"import urllib\n",
"import random\n",
"import warnings\n",
"\n",
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn import preprocessing, grid_search\n",
"from sklearn.linear_model import SGDClassifier\n",
"from sklearn.cross_validation import train_test_split\n",
"from sklearn.metrics import roc_auc_score, roc_curve\n",
"from sklearn.pipeline import make_pipeline\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.feature_selection import SelectKBest\n",
"from statsmodels.robust.scale import mad\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"plt.style.use('seaborn-notebook')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Specify model configuration"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# We're going to be building a 'TP53' classifier \n",
"GENE = 'TP53'"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Parameter Sweep for Hyperparameters\n",
"param_fixed = {\n",
" 'loss': 'log',\n",
" 'penalty': 'elasticnet',\n",
"}\n",
"param_grid = {\n",
" 'alpha': [10 ** x for x in range(-6, 1)],\n",
" 'l1_ratio': [0, 0.05, 0.1, 0.2, 0.5, 0.8, 0.9, 0.95, 1],\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Here is some [documentation](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html) regarding the classifier and hyperparameters*\n",
"\n",
"*Here is some [information](https://ghr.nlm.nih.gov/gene/TP53) about TP53*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load Data"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"if not os.path.exists('data'):\n",
" os.makedirs('data')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"url_to_path = {\n",
" # X matrix\n",
" 'https://ndownloader.figshare.com/files/5514386':\n",
" os.path.join('data', 'expression.tsv.bz2'),\n",
" # Y Matrix\n",
" 'https://ndownloader.figshare.com/files/5514389':\n",
" os.path.join('data', 'mutation-matrix.tsv.bz2'),\n",
"}\n",
"\n",
"for url, path in url_to_path.items():\n",
" if not os.path.exists(path):\n",
" urllib.request.urlretrieve(url, path)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1min 31s, sys: 988 ms, total: 1min 32s\n",
"Wall time: 1min 33s\n"
]
}
],
"source": [
"%%time\n",
"path = os.path.join('data', 'expression.tsv.bz2')\n",
"X = pd.read_table(path, index_col=0)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 1min 21s, sys: 1.01 s, total: 1min 22s\n",
"Wall time: 1min 22s\n"
]
}
],
"source": [
"%%time\n",
"path = os.path.join('data', 'mutation-matrix.tsv.bz2')\n",
"Y = pd.read_table(path, index_col=0)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"y = Y[GENE]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"sample_id\n",
"TCGA-02-0047-01 0\n",
"TCGA-02-0055-01 1\n",
"TCGA-02-2483-01 1\n",
"TCGA-02-2485-01 1\n",
"TCGA-02-2486-01 0\n",
"TCGA-04-1348-01 1\n",
"Name: TP53, dtype: int64"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# The Series now holds TP53 Mutation Status for each Sample\n",
"y.head(6)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0 0.655334\n",
"1 0.344666\n",
"Name: TP53, dtype: float64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Here are the percentage of tumors with NF1\n",
"y.value_counts(True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Set aside 10% of the data for testing"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'Size: 20,501 features, 6,935 training samples, 771 testing samples'"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Typically, this can only be done where the number of mutations is large enough\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=0)\n",
"'Size: {:,} features, {:,} training samples, {:,} testing samples'.format(len(X.columns), len(X_train), len(X_test))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Compare the distribution of training and testing set"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x7f398294d4a8>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3963f85358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Calculate Cohen's d between training and testing set\n",
"d_m = X_train.mean() - X_test.mean()\n",
"n1 = len(X_train)\n",
"n2 = len(X_test)\n",
"var1 = X_train.var()\n",
"var2 = X_test.var()\n",
"pooled_sd = np.sqrt(((n1-1)*var1 + (n2-1)*var2)/(n1+n2-2))\n",
"cohen_d = np.absolute(d_m / pooled_sd)\n",
"sns.distplot(cohen_d[~pd.isnull(cohen_d)], kde=False)\n",
"plt.xlabel(\"Cohen's d\")\n",
"plt.ylabel('Feature count')\n",
"plt.title(\"Histogram of Cohen's d\\nLarger d means larger differences between training and testing set\")\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x7f396775b630>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f397ee52550>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cohen_d.sort_values(inplace=True, ascending=False)\n",
"X_1 = X.loc[:, cohen_d.index[:10].values.tolist()]\n",
"X_1.loc[X_train.index, 'group'] = 'training'\n",
"X_1.loc[X_test.index, 'group'] = 'testing'\n",
"X_1 = pd.melt(X_1, id_vars='group', var_name='gene')\n",
"sns.barplot(data=X_1, y='gene', x='value', hue='group')\n",
"plt.title('Genes showed the most difference between training and testing data\\n(bootstrapped 95 Confidence interval)')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Median absolute deviation feature selection"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def fs_mad(x, y):\n",
" \"\"\" \n",
" Get the median absolute deviation (MAD) for each column of x\n",
" \"\"\"\n",
" scores = mad(x) \n",
" return scores, np.array([np.NaN]*len(scores))\n",
"\n",
"# select the top features with the highest MAD\n",
"feature_select = lambda k: SelectKBest(fs_mad, k=k)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Define pipeline and Cross validation model fitting"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Include loss='log' in param_grid doesn't work with pipeline somehow\n",
"clf = SGDClassifier(random_state=0, class_weight='balanced',\n",
" loss=param_fixed['loss'], penalty=param_fixed['penalty'])\n",
"\n",
"# joblib is used to cross-validate in parallel by setting `n_jobs=-1` in GridSearchCV\n",
"# Supress joblib warning. See https://github.com/scikit-learn/scikit-learn/issues/6370\n",
"warnings.filterwarnings('ignore', message='Changing the shape of non-C contiguous array')\n",
"clf_grid = grid_search.GridSearchCV(estimator=clf, param_grid=param_grid, n_jobs=1, scoring='roc_auc')\n",
"\n",
"def get_threshold_metrics(y_true, y_pred):\n",
" roc_columns = ['fpr', 'tpr', 'threshold']\n",
" roc_items = zip(roc_columns, roc_curve(y_true, y_pred))\n",
" roc_df = pd.DataFrame.from_items(roc_items)\n",
" auroc = roc_auc_score(y_true, y_pred)\n",
" return {'auroc': auroc, 'roc_df': roc_df}\n",
"\n",
"n_feature_kept = [500, 1000, 2000, 4000, 8000, len(X.columns)]\n",
"results=[]\n",
"for k in n_feature_kept:\n",
" pipeline = make_pipeline(\n",
" feature_select(k), # Feature selection\n",
" StandardScaler(), # Feature scaling\n",
" clf_grid)\n",
" pipeline.fit(X=X_train, y=y_train)\n",
" y_pred_test = pipeline.decision_function(X_test)\n",
" metrics_test = get_threshold_metrics(y_test, y_pred_test)\n",
" results.append((k, metrics_test['auroc']))\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Get results using both X_train and X_test for feature selection and scaling\n",
"X = StandardScaler().fit_transform(X)\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=0)\n",
"results_overfit=[]\n",
"for k in n_feature_kept:\n",
" fs = feature_select(k)\n",
" dummy_y = np.array([1]*len(X))\n",
" fs.fit(X, dummy_y)\n",
" X_train_new = fs.transform(X_train)\n",
" X_test_new = fs.transform(X_test)\n",
" clf_grid.fit(X=X_train_new, y=y_train)\n",
" y_pred_test = clf_grid.decision_function(X_test_new)\n",
" metrics_test = get_threshold_metrics(y_test, y_pred_test)\n",
" results_overfit.append((k, metrics_test['auroc']))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" AUC_X AUC_X_train n_feature_kept\n",
"0 0.897612 0.879062 500.0\n",
"1 0.917075 0.898973 1000.0\n",
"2 0.925342 0.916560 2000.0\n",
"3 0.928719 0.922694 4000.0\n",
"4 0.932941 0.932139 8000.0\n",
"5 0.935213 0.935007 20501.0\n"
]
},
{
"data": {
"image/png": "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\ni7z77tvs3r2b2267k+HDhwPw618voLR0Kz/72e1cddUPuPPO/6W2toZIJML3v/9DJk4s5qWXXuDp\np5/E5/MxYcJEfvjDG7j33rtZs2Y1jz/+CNFolLy8fL7ylXPZuHED9957N/ff/yBf+9qXEz/f9OmH\n8oMf/IJwOEpmZhY33ngrWVnZiZ+hrGwHP/nJLfh8PiKRCDfffDsFBSO4++472L59G+FwmMsuu4IZ\nM2Ymrqmvr2+zvO+//y4PPfQbfD4/8+Z9ngkTJrao98su+//4979fYcOGEu699268Xi+ZmZnceOP/\nUlKyjqeffgqPx8Onn27hpJPmceml3yQcDhMOh0hPT+eXv7wHa9cSjUY5++xzOO20M3jhhYU8/fST\neL0+zj//IubNm89f//r/WLx4EY7jMHv2cXz965cnyr5ixfIO/2537drJzTdfT0pKCocffiQffbSC\n++9/8AD/H9U9CgQiSeSpRSW8v3Znu+ebdgZt7ZF/r+bvize0ee6oqSM4b17xAZVn48YSKiur+PWv\nH6KurpYlS94G9t61RyIRJkyYyIUXXsxtt93I8uXvUVa2gwkTJvK9713LM8/8fZ/P3L59Gy+8sJDf\n//5PRKNRvvWtryfupsPhML///e95+OHHeeGFhZx77gV4PHD00bP45S/vIRQK4ff7+eSTj7j22h/t\n89nXXns9X//6BVx//c1kZra/nslRRx3DlCmGa675EYWFI9m+fRt33XUvRUXjWbz4VW677Q5GjhzF\nT396K++99y4ZGRmJXpRt20o57bQzuPLKq7jiikspKVlPcfFkACZOLOa0084gLy+fefPmc9FFX+VX\nv/otw4cX8Mtf3sPLL7+Ax+Nh584yfvvbR1uU6bvf/T433/wjfvzjW3j88UeYNetYzjjjLDZv3sSv\nfvVz7r33AQKBRhYsuJ+srGy++91vsXHjBi644L/4xz/+xte/fvk+Xd9NZW7+81111Xf4v/+7g4yM\nfJ555u88/fRTXHzxNxLXLF78KkcddQyXXHIZ69dbdu8u58MPP2D48AKuv/5mqqoq+d73/ps//OEv\niWueeuqJNsv7i1/czUMPPUZ2dg4//vG1nH32OUyePIVrr72ewsKRNG2we999v+C7372aqVOn8Ze/\n/D+eeuoJZsyYydq1q3niiaeJRCKce+6XuPTSb7Jq1UoOPng61dXVLFnyNk8++SzhcJgXXvg39fX1\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f3980479ba8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"results = np.array(results)\n",
"results_overfit = np.array(results_overfit)\n",
"df = pd.DataFrame({'n_feature_kept':results[:, 0], 'AUC_X_train':results[:, 1], 'AUC_X':results_overfit[:, 1]})\n",
"print(df)\n",
"plt.figure()\n",
"plt.plot(results[:,0], results[:,1], '-o', label='Using only X_train for feature selection/scaling')\n",
"plt.plot(results_overfit[:,0], results_overfit[:,1], '-o', label='Using X for feature selection/scaling')\n",
"plt.xlabel('Num. of features selected by MAD')\n",
"plt.ylabel('AUC')\n",
"plt.legend(loc='lower right');\n"
]
}
],
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment