1 lines (1 with data), 32.9 kB
{"nbformat":4,"nbformat_minor":0,"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3"},"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.8"},"colab":{"name":"DNAm_CNA_to_RNAseq.ipynb","provenance":[],"collapsed_sections":[],"toc_visible":true},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","metadata":{"id":"F7TT2a600Bjc","colab_type":"text"},"source":["# Deep denoising auto-encoder and MLP based multi-output regression on TCGA multi-omics data\n","## DNA Methylation and CNA to RNA-Seq"]},{"cell_type":"markdown","metadata":{"id":"AuzLXzrHWHwF","colab_type":"text"},"source":["# Setting environment"]},{"cell_type":"markdown","metadata":{"id":"Q6mV2MJR0Bjm","colab_type":"text"},"source":["Seeding the random number generators"]},{"cell_type":"code","metadata":{"trusted":true,"id":"We-k_eij0Bjp","colab_type":"code","colab":{}},"source":[" # have reproducible behavior for certain hash-based operations.\n","import os\n","os.environ['PYTHONHASHSEED'] = '0'\n","# The below is necessary for starting Numpy generated random numbers\n","# in a well-defined initial state.\n","import numpy as np\n","np.random.seed(42)\n","# The below is necessary for starting core Python generated random numbers\n","# in a well-defined state.\n","import random as rn\n","rn.seed(12345)\n","\n","# The below tf.set_random_seed() will make random number generation\n","# in the TensorFlow backend have a well-defined initial state.\n","import tensorflow as tf\n","tf.set_random_seed(1234)\n","\n","# Force TensorFlow to use single thread.\n","session_conf = tf.ConfigProto(intra_op_parallelism_threads=1,\n"," inter_op_parallelism_threads=1)\n","from keras import backend as K\n","sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)\n","K.set_session(sess)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"HS4bSNm40Bj5","colab_type":"text"},"source":["Importing libraries"]},{"cell_type":"code","metadata":{"trusted":true,"id":"dStQVwd30Bj8","colab_type":"code","colab":{}},"source":["from keras.layers import Input, Dense, Dropout\n","from keras.models import Model\n","from keras import regularizers\n","from sklearn.preprocessing import MinMaxScaler\n","from sklearn.model_selection import train_test_split\n","from sklearn.metrics import mean_squared_error\n","import pandas as pd\n","import matplotlib\n","import matplotlib.pyplot as plt\n","import numpy as np\n","import tensorflow as tf\n","from sklearn.metrics import r2_score \n","from sklearn.metrics import classification_report\n","from sklearn.metrics import confusion_matrix\n","from imblearn.over_sampling import SMOTE"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"_iJym7v70BkF","colab_type":"code","colab":{}},"source":["def rSquared(true,predicted):\n"," cols = predicted.shape[1]\n"," rsq = np.zeros(shape=(cols), dtype = np.float32)\n"," for j in range(cols):\n"," rsq[j] = r2_score(true[:,j], predicted[:,j])\n"," return rsq"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"2kQvYtgqWOL2","colab_type":"text"},"source":["# Loading data"]},{"cell_type":"markdown","metadata":{"id":"tq5QN3Kq0BkP","colab_type":"text"},"source":["Importing data from pre-processed csv files (Change paths accordingly)"]},{"cell_type":"code","metadata":{"id":"cmJBB9flgeAU","colab_type":"code","colab":{}},"source":["from google.colab import drive\n","drive.mount('/content/drive')"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"of_LBPo4gsAu","colab_type":"code","colab":{}},"source":["#ls \"/content/drive/My Drive\""],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"2R8C7R7bhruf","colab_type":"code","colab":{}},"source":["preprocessed_DNAMeth = pd.read_csv('/content/drive/My Drive/TCGA Data/Preprocessed_Data/LIHC_preprocessed_DNAMeth.csv')\n","preprocessed_RNASeq = pd.read_csv('/content/drive/My Drive/TCGA Data/Preprocessed_Data/LIHC_preprocessed_RNASeq.csv')\n","preprocessed_CNA = pd.read_csv('/content/drive/My Drive/TCGA Data/Preprocessed_Data/LIHC_preprocessed_CNA.csv')\n","labels = pd.read_csv('/content/drive/My Drive/TCGA Data/Preprocessed_Data/LIHC_labels.csv')"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"Qz33rPHb0Bkg","colab_type":"code","colab":{}},"source":["x1 = preprocessed_DNAMeth\n","x2 = preprocessed_CNA \n","y = preprocessed_RNASeq"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"Djlmve230Bkn","colab_type":"text"},"source":["Concatenating Methylation and CNV features"]},{"cell_type":"code","metadata":{"trusted":true,"id":"lXhl777S0Bkq","colab_type":"code","colab":{}},"source":["x1 = pd.DataFrame(x1)\n","x2 = pd.DataFrame(x2)\n","df = [x1, x2]\n","z = pd.concat(df,axis=1)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"tmC71-v40Bkw","colab_type":"text"},"source":["Splitting the data into training and testing datasets"]},{"cell_type":"code","metadata":{"trusted":true,"id":"pUNvrzVv0Bkx","colab_type":"code","colab":{}},"source":["x_train, x_test, y_train, y_test, labels_train, labels_test = train_test_split(z, y, labels, test_size=0.2)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"kP9vWgne0Bk4","colab_type":"text"},"source":["Scaling the data within [0-1] range"]},{"cell_type":"code","metadata":{"trusted":true,"id":"GHvZC4dW0Bk7","colab_type":"code","colab":{}},"source":["scalar = MinMaxScaler()\n","x_train = scalar.fit_transform(x_train)\n","x_test = scalar.transform(x_test)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"TjKrhg1p0BlB","colab_type":"text"},"source":["Adding gaussian noise"]},{"cell_type":"code","metadata":{"trusted":true,"id":"X_GPRDwb0BlD","colab_type":"code","colab":{}},"source":["noise_factor = 0.5\n","x_train_noisy = x_train + noise_factor * np.random.normal(0.0, 1.0, x_train.shape)\n","x_test_noisy = x_test + noise_factor * np.random.normal(0.0, 1.0, x_test.shape)\n","\n","x_train_noisy = np.clip(x_train_noisy, 0., 1.)\n","x_test_noisy = np.clip(x_test_noisy, 0., 1.)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"hMJDjLMm0BlQ","colab_type":"text"},"source":["# Dimension Reduction/Feature Extraction using DDAE"]},{"cell_type":"markdown","metadata":{"id":"GMDqA1_y0BlJ","colab_type":"text"},"source":["Setting the no. of input and output neurons"]},{"cell_type":"code","metadata":{"trusted":true,"id":"OZa0LGeq0BlK","colab_type":"code","colab":{}},"source":["num_in_neurons = z.shape[1]\n","num_out_neurons = y.shape[1]"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"Cf0X8WAg0BlS","colab_type":"code","colab":{}},"source":["# Auto-encoder to extract features from DNA Methylation and CNV data\n","\n","with tf.device('/gpu:0'):\n"," # this is the size of our encoded representations\n"," encoding_dim1 = 500\n"," encoding_dim2 = 200\n"," \n"," lambda_act = 0.0001\n"," lambda_weight = 0.001\n"," # this is our input placeholder\n"," input_data = Input(shape=(num_in_neurons,))\n"," # first encoded representation of the input\n"," encoded = Dense(encoding_dim1, activation='relu', activity_regularizer=regularizers.l1(lambda_act), kernel_regularizer=regularizers.l2(lambda_weight), name='encoder1')(input_data)\n"," # second encoded representation of the input\n"," encoded = Dense(encoding_dim2, activation='relu', activity_regularizer=regularizers.l1(lambda_act), kernel_regularizer=regularizers.l2(lambda_weight), name='encoder2')(encoded)\n"," # first lossy reconstruction of the input\n"," decoded = Dense(encoding_dim1, activation='relu', name='decoder1')(encoded)\n"," # the final lossy reconstruction of the input\n"," decoded = Dense(num_in_neurons, activation='sigmoid', name='decoder2')(decoded)\n"," \n"," # this model maps an input to its reconstruction\n"," autoencoder = Model(inputs=input_data, outputs=decoded)\n"," \n"," myencoder = Model(inputs=input_data, outputs=encoded)\n"," autoencoder.compile(optimizer='sgd', loss='mse')\n"," # training\n"," print('training the autoencoder')\n"," autoencoder.fit(x_train_noisy, x_train,\n"," epochs=25,\n"," batch_size=8,\n"," shuffle=True,\n"," validation_data=(x_test_noisy, x_test))\n"," autoencoder.trainable = False #freeze autoencoder weights"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"j6jCTcvb0BlX","colab_type":"text"},"source":["# Regression using MLP"]},{"cell_type":"code","metadata":{"scrolled":false,"trusted":true,"id":"HK5d2ubz0BlY","colab_type":"code","colab":{}},"source":["# MLP Multi-output Regression code goes here...\n","\n","num_hidden = encoding_dim2\n","with tf.device('/gpu:0'): \n"," x = autoencoder.get_layer('encoder2').output\n"," x = Dropout(0.2)(x) # adding 20% dropout\n"," h = Dense(int(num_hidden * 3), activation='relu', name='hidden1')(x)\n"," h = Dropout(0.5)(h) # adding 50% dropout\n"," h = Dense(int(num_hidden * 5), activation='relu', name='hidden2')(h)\n"," h = Dropout(0.5)(h) # adding 50% dropout\n"," y = Dense(num_out_neurons, activation='linear', name='prediction')(h)\n"," mlpRegressor = Model(inputs=autoencoder.inputs, outputs=y)\n","\n"," # Compile model\n"," mlpRegressor.compile(loss='mse', optimizer='adam', metrics=['accuracy']) # or loss='mae'\n"," \n"," # Fit the model\n"," print('training the MLP multi-output regressor')\n"," mlpRegressor.fit(x_train, y_train, epochs=50, batch_size=8)\n"," \n"," y_pred = mlpRegressor.predict(x_test)\n"," \n"," actual_mean = pd.DataFrame(y_test.mean(axis=0))\n"," pred_mean = pd.DataFrame(y_pred.mean(axis=0))"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"hHoR5G3B0Bld","colab_type":"text"},"source":["# Results"]},{"cell_type":"code","metadata":{"scrolled":true,"trusted":true,"id":"5cyG1HyB0Blf","colab_type":"code","colab":{}},"source":["print('MSE: (Actual Vs. Predicted)', mean_squared_error(y_test, y_pred))\n","print('r^2 value: (Mean of actual Vs. Mean of Predicted)', r2_score(actual_mean, pred_mean))"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"wlEDWBYz0Blj","colab_type":"text"},"source":["Plotting predicted Vs. Actual"]},{"cell_type":"code","metadata":{"trusted":true,"id":"jFNyH3TE0Blk","colab_type":"code","colab":{}},"source":["act=actual_mean.values.flatten()\n","pred=pred_mean.values.flatten()\n","\n","s1 = pd.Series(act)\n","s2 = pd.Series(pred)\n","\n","plt.figure(figsize=(20,10))\n","ax = plt.subplot(111)\n","plt.title('Average of actual and predicted gene expression values across all samples')\n","plt.xlabel('No. of features (genes)')\n","plt.ylabel('Average of gene expression values across samples')\n","ax.plot(s1, 'b--', label='Actual')\n","ax.plot(s2, 'r--', label='Predicted')\n","ax.legend()\n","plt.grid(True)\n","plt.show()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"WGEmDVRk0Blp","colab_type":"text"},"source":["Plotting first 100 features"]},{"cell_type":"code","metadata":{"trusted":true,"id":"1WD-GAyl0Blr","colab_type":"code","colab":{}},"source":["act=actual_mean[0:100].values.flatten()\n","pred=pred_mean[0:100].values.flatten()\n","\n","s1 = pd.Series(act)\n","s2 = pd.Series(pred)\n","\n","plt.figure(figsize=(10,5))\n","ax = plt.subplot(111)\n","plt.title('DDAE-MLP')\n","plt.xlabel('No. of features (genes)')\n","plt.ylabel('Average of gene expression values across samples')\n","ax.plot(s1, 'b--', label='Actual')\n","ax.plot(s2, 'r--', label='Predicted')\n","ax.legend()\n","plt.grid(True)\n","plt.show()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"3waJ5f9n0Blv","colab_type":"text"},"source":["Plotting correlation scatter plot for mean of actual Vs. mean of predicted gene expressions"]},{"cell_type":"code","metadata":{"trusted":true,"id":"uO3k2InL0Blx","colab_type":"code","colab":{}},"source":["plt.figure(figsize=(20,10))\n","plt.scatter(actual_mean, pred_mean)\n","plt.title('Correlation between mean of actual and mean predicted gene expression across all samples')\n","plt.xlabel('Average of true gene expressions across samples')\n","plt.ylabel('Average of predicted gene expressions across samples')\n","plt.grid(True)\n","plt.show()\n"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"mz8F8tuZ0Bl1","colab_type":"text"},"source":["# Classification of Tumor and Normal samples using MLP"]},{"cell_type":"markdown","metadata":{"id":"Kayc51Va0Bl2","colab_type":"text"},"source":["Importing libraries"]},{"cell_type":"code","metadata":{"trusted":true,"id":"6i-ullSj0Bl3","colab_type":"code","colab":{}},"source":["from sklearn.metrics import classification_report\n","from sklearn.metrics import confusion_matrix\n","from sklearn.metrics import recall_score"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"__PGqiLD0Bl8","colab_type":"text"},"source":["MLP-classifier"]},{"cell_type":"code","metadata":{"trusted":true,"id":"ed6Xte-h0Bl9","colab_type":"code","colab":{}},"source":["num_hidden = encoding_dim2\n","with tf.device('/gpu:0'): \n"," x = autoencoder.get_layer('encoder2').output\n"," x = Dropout(0.2)(x) # adding 20% dropout\n"," h = Dense(int(num_hidden * 3), activation='relu', name='hidden1')(x)\n"," h = Dropout(0.5)(h) # adding 50% dropout\n"," h = Dense(int(num_hidden * 5), activation='relu', name='hidden2')(h)\n"," h = Dropout(0.5)(h) # adding 50% dropout\n"," y = Dense(1, activation='sigmoid', name='predictions')(h)\n","\n"," classifier = Model(inputs=autoencoder.inputs, outputs=y)\n"," # Compile model\n"," classifier.compile(loss='binary_crossentropy', optimizer='adam',\n"," metrics=['accuracy'])\n"," # Fit the model\n"," classifier.fit(x_train, labels_train, epochs=25, batch_size=8)\n","\n"," print('Now making predictions')\n"," predictions = classifier.predict(x_test)\n"," rounded_predictions = [round(x[0]) for x in predictions]"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"bgbNFdwI0BmB","colab_type":"text"},"source":["Evaluating the model"]},{"cell_type":"code","metadata":{"trusted":true,"id":"L3USITmc0BmC","colab_type":"code","colab":{}},"source":["_, train_acc = classifier.evaluate(x_train, labels_train, verbose=0)\n","_, test_acc = classifier.evaluate(x_test, labels_test, verbose=0)\n","print('\\nTraining accuracy: %.3f, Testing accuracy: %.3f' % (train_acc, test_acc))\n","print(\"Recall score = \",recall_score(labels_test, rounded_predictions))\n","cm = confusion_matrix(labels_test, rounded_predictions)\n","print(\"Confusion matrix:\")\n","print(cm)\n","report = classification_report(labels_test, rounded_predictions)\n","print(\"classification_report\")\n","print(report)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"icrX6klW0BmF","colab_type":"text"},"source":["# Comparing regression results with other standard methods"]},{"cell_type":"markdown","metadata":{"id":"xRygnqFe0BmH","colab_type":"text"},"source":["Evaluating the mean of actual y values"]},{"cell_type":"code","metadata":{"trusted":true,"id":"0Zks4RtD0BmJ","colab_type":"code","colab":{}},"source":["actual_mean = pd.DataFrame(y_test.mean(axis=0))"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"h2IxiBv60BmO","colab_type":"text"},"source":["# 1. Linear Regression"]},{"cell_type":"markdown","metadata":{"id":"I9OhPUaF0BmQ","colab_type":"text"},"source":["Importing libraries"]},{"cell_type":"code","metadata":{"trusted":true,"id":"kP-q1S-r0BmR","colab_type":"code","colab":{}},"source":["from sklearn.metrics import r2_score \n","from sklearn.metrics import mean_squared_error\n","from sklearn.linear_model import LinearRegression"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"1PCtFmEh0BmV","colab_type":"text"},"source":["Multi-output regression using Linear Regression (OLS) (sk-learn)"]},{"cell_type":"code","metadata":{"trusted":true,"id":"xj0tTIcM0BmV","colab_type":"code","colab":{}},"source":["with tf.device('/gpu:0'):\n"," linear_Regr = LinearRegression(normalize=True)\n"," linear_Regr.fit(x_train, y_train)\n"," y_pred = linear_Regr.predict(x_test)\n"," pred_mean = pd.DataFrame(y_pred.mean(axis=0))\n"," y_mse = mean_squared_error(y_test, y_pred)\n"," y_r2score = r2_score(actual_mean, pred_mean)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"3apegKi00BmZ","colab_type":"code","colab":{}},"source":["print(\"Mean Squared Error (y_test Vs. y_pred): \", y_mse)\n","print(\"r2 Score (y_test_mean Vs. y_pred_mean): \", y_r2score)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"W5EAICAZ0Bmd","colab_type":"text"},"source":["Plotting first 100 features"]},{"cell_type":"code","metadata":{"trusted":true,"id":"rpI2SL5F0Bmd","colab_type":"code","colab":{}},"source":["act=actual_mean[0:100].values.flatten()\n","pred=pred_mean[0:100].values.flatten()\n","\n","s1 = pd.Series(act)\n","s2 = pd.Series(pred)\n","\n","plt.figure(figsize=(10,5))\n","ax = plt.subplot(111)\n","plt.title('Linear Regression')\n","plt.xlabel('No. of features (genes)')\n","plt.ylabel('Average of gene expression values across samples')\n","ax.plot(s1, 'b--', label='Actual')\n","ax.plot(s2, 'r--', label='Predicted')\n","ax.legend()\n","plt.grid(True)\n","plt.show()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"J3ZAbV6T0Bmh","colab_type":"text"},"source":["# 2. Lasso"]},{"cell_type":"markdown","metadata":{"id":"YXK8Zqxl0Bmi","colab_type":"text"},"source":["Importing libraries"]},{"cell_type":"code","metadata":{"trusted":true,"id":"9D2dAWfb0Bmj","colab_type":"code","colab":{}},"source":["from sklearn.metrics import r2_score \n","from sklearn.metrics import mean_squared_error\n","from sklearn.linear_model import Lasso"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"SQXYxyp00Bmn","colab_type":"text"},"source":["Multi-output regression using Lasso (sk-learn)"]},{"cell_type":"code","metadata":{"trusted":true,"id":"Xyp0yST-0Bmo","colab_type":"code","colab":{}},"source":["y_mse=[]\n","y_r2score=[]\n","with tf.device('/gpu:0'):\n"," #for alp in [0.1, 0.2, 0.3, 0.4, 0.5]\n"," for alp in [0.01,0.1,0.5,1,5]:\n"," print('Working with alpha=',alp)\n"," Lasso_Regr = Lasso(alpha=alp, normalize=True, random_state=42)\n"," Lasso_Regr.fit(x_train, y_train)\n"," y_pred = Lasso_Regr.predict(x_test)\n"," pred_mean = pd.DataFrame(y_pred.mean(axis=0))\n"," y_mse.append(mean_squared_error(y_test, y_pred))\n"," y_r2score.append(r2_score(actual_mean, pred_mean))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"fVU3HJIP0Bmr","colab_type":"code","colab":{}},"source":["print(\"Mean Squared Error (y_test Vs. y_pred): \", y_mse)\n","print(\"r2 Score (y_test_mean Vs. y_pred_mean): \", y_r2score)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"IXZ92BsA0Bmu","colab_type":"text"},"source":["Plotting first 100 features"]},{"cell_type":"code","metadata":{"trusted":true,"id":"Xt5NGL2f0Bmu","colab_type":"code","colab":{}},"source":["act=actual_mean[0:100].values.flatten()\n","pred=pred_mean[0:100].values.flatten()\n","\n","s1 = pd.Series(act)\n","s2 = pd.Series(pred)\n","\n","plt.figure(figsize=(10,5))\n","ax = plt.subplot(111)\n","plt.title('Lasso with alpha = 1.5')\n","plt.xlabel('No. of features (genes)')\n","plt.ylabel('Average of gene expression values across samples')\n","ax.plot(s1, 'b--', label='Actual')\n","ax.plot(s2, 'r--', label='Predicted')\n","ax.legend()\n","plt.grid(True)\n","plt.show()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"MNuYCwNJ0Bmy","colab_type":"text"},"source":["# 3. Ridge"]},{"cell_type":"markdown","metadata":{"id":"2u3njJvr0Bmz","colab_type":"text"},"source":["Importing libraries"]},{"cell_type":"code","metadata":{"trusted":true,"id":"2zLplmf20Bmz","colab_type":"code","colab":{}},"source":["from sklearn.linear_model import Ridge"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"WRgznSR-0Bm3","colab_type":"text"},"source":["Multi-output regression using Ridge (sk-learn)"]},{"cell_type":"code","metadata":{"trusted":true,"id":"0nQzkzyK0Bm3","colab_type":"code","colab":{}},"source":["y_mse=[]\n","y_r2score=[]\n","with tf.device('/gpu:0'):\n"," for alp in [0.01,0.1,0.5,1,1.5]:\n"," print('Working with alpha = ',alp)\n"," Ridge_Regr = Ridge(alpha=alp, normalize=True)\n"," Ridge_Regr.fit(x_train, y_train)\n"," y_pred = Ridge_Regr.predict(x_test)\n"," pred_mean = pd.DataFrame(y_pred.mean(axis=0))\n"," y_mse.append(mean_squared_error(y_test, y_pred))\n"," y_r2score.append(r2_score(actual_mean, pred_mean))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"dsO8jc480Bm7","colab_type":"code","colab":{}},"source":["print(\"Mean Squared Error (y_test Vs. y_pred): \", y_mse)\n","print(\"r2 Score (y_test_mean Vs. y_pred_mean): \", y_r2score)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"1EHmSjb50Bm-","colab_type":"text"},"source":["Plotting first 100 features"]},{"cell_type":"code","metadata":{"trusted":true,"id":"BpMX0T4-0BnA","colab_type":"code","colab":{}},"source":["act=actual_mean[0:100].values.flatten()\n","pred=pred_mean[0:100].values.flatten()\n","\n","s1 = pd.Series(act)\n","s2 = pd.Series(pred)\n","\n","plt.figure(figsize=(10,5))\n","ax = plt.subplot(111)\n","plt.title('Ridge Regression with alpha=1.5')\n","plt.xlabel('No. of features (genes)')\n","plt.ylabel('Average of gene expression values across samples')\n","ax.plot(s1, 'b--', label='Actual')\n","ax.plot(s2, 'r--', label='Predicted')\n","ax.legend()\n","plt.grid(True)\n","plt.show()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"VhlDwdPD0BnF","colab_type":"text"},"source":["# 4. PCA - Random Forest (PCA-RF)"]},{"cell_type":"markdown","metadata":{"id":"8ZLv1nDn0BnF","colab_type":"text"},"source":["Importing libraries"]},{"cell_type":"code","metadata":{"trusted":true,"id":"KBIpnfjS0BnH","colab_type":"code","colab":{}},"source":["from sklearn.ensemble import RandomForestRegressor\n","from sklearn.decomposition import PCA"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"6nQMUdNo0BnM","colab_type":"code","colab":{}},"source":["n=200\n","pca = PCA(n_components=n)\n","pca.fit(x_train)\n","x_train = pca.transform(x_train)\n","x_test = pca.transform(x_test)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"0idYs_oA0BnO","colab_type":"text"},"source":["Multi-output regression using Random Forest (sk-learn)"]},{"cell_type":"code","metadata":{"trusted":true,"id":"Jjwgxai90BnP","colab_type":"code","colab":{}},"source":["y_mse=[]\n","y_r2score=[]\n","with tf.device('/gpu:0'):\n"," for est in [10,50,100,150,200]:\n"," print('estimators = ',est)\n"," rf_Regr = RandomForestRegressor(n_estimators=est, n_jobs=-1)\n"," rf_Regr.fit(x_train, y_train)\n"," y_pred = rf_Regr.predict(x_test)\n"," pred_mean = pd.DataFrame(y_pred.mean(axis=0))\n"," y_mse.append(mean_squared_error(y_test, y_pred))\n"," y_r2score.append(r2_score(actual_mean, pred_mean))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"Sec2ULNv0BnR","colab_type":"code","colab":{}},"source":["print(\"Mean Squared Error: \", y_mse)\n","print(\"r2 Score (y_test_mean Vs. y_pred_mean): \", y_r2score)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"yiEV7OwE0BnV","colab_type":"text"},"source":["Plotting first 100 features"]},{"cell_type":"code","metadata":{"trusted":true,"id":"25x1RArE0Bnk","colab_type":"code","colab":{}},"source":["act=actual_mean[0:100].values.flatten()\n","pred=pred_mean[0:100].values.flatten()\n","\n","s1 = pd.Series(act)\n","s2 = pd.Series(pred)\n","\n","plt.figure(figsize=(10,5))\n","ax = plt.subplot(111)\n","plt.title('PCA-RF with 250 features and 100 estimators')\n","plt.xlabel('No. of features (genes)')\n","plt.ylabel('Average of gene expression values across samples')\n","ax.plot(s1, 'b--', label='Actual')\n","ax.plot(s2, 'r--', label='Predicted')\n","ax.legend()\n","plt.grid(True)\n","plt.show()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"UPwG6tW30Bnn","colab_type":"text"},"source":["# 5. k-Nearest Neighbor (kNN)"]},{"cell_type":"markdown","metadata":{"id":"IloQzOFC0Bno","colab_type":"text"},"source":["Importing libraries"]},{"cell_type":"code","metadata":{"trusted":true,"id":"M9u1lMOM0Bnp","colab_type":"code","colab":{}},"source":["from sklearn.neighbors import KNeighborsRegressor"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"xHB9yJyU0Bns","colab_type":"text"},"source":["Multi-output regression using kNN (sk-learn)"]},{"cell_type":"code","metadata":{"trusted":true,"id":"YdNZ8A5h0Bnu","colab_type":"code","colab":{}},"source":["y_mse=[]\n","y_r2score=[]\n","with tf.device('/gpu:0'):\n"," for k in [5,10,15,20,25]:\n"," print('k=',k)\n"," knn_Regr = KNeighborsRegressor(n_neighbors=k, n_jobs=-1)\n"," knn_Regr.fit(x_train, y_train)\n"," y_pred = knn_Regr.predict(x_test)\n"," pred_mean = pd.DataFrame(y_pred.mean(axis=0))\n"," y_mse.append(mean_squared_error(y_test, y_pred))\n"," y_r2score.append(r2_score(actual_mean, pred_mean))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"Rxk455040Bnx","colab_type":"code","colab":{}},"source":["print(\"Mean Squared Error: \", y_mse)\n","print(\"r2 Score (y_test_mean Vs. y_pred_mean): \", y_r2score)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"LwPD9EDW0Bnz","colab_type":"text"},"source":["Plotting first 100 features"]},{"cell_type":"code","metadata":{"trusted":true,"id":"yQMRI5KJ0Bn0","colab_type":"code","colab":{}},"source":["act=actual_mean[0:100].values.flatten()\n","pred=pred_mean[0:100].values.flatten()\n","\n","s1 = pd.Series(act)\n","s2 = pd.Series(pred)\n","\n","plt.figure(figsize=(10,5))\n","ax = plt.subplot(111)\n","plt.title('k-NN with k=10')\n","plt.xlabel('No. of features (genes)')\n","plt.ylabel('Average of gene expression values across samples')\n","ax.plot(s1, 'b--', label='Actual')\n","ax.plot(s2, 'r--', label='Predicted')\n","ax.legend()\n","plt.grid(True)\n","plt.show()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"Pwd-AWax0Bn4","colab_type":"text"},"source":["# 6. PCA - Support Vector Regression (PCA-SVR)"]},{"cell_type":"code","metadata":{"trusted":true,"id":"IMBKQ9Oj0Bn5","colab_type":"code","colab":{}},"source":["from sklearn.svm import SVR\n","from sklearn.multioutput import MultiOutputRegressor\n","from sklearn.decomposition import PCA"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"tDpMdvy30Bn_","colab_type":"code","colab":{}},"source":["n=200\n","pca = PCA(n_components=n)\n","pca.fit(x_train)\n","x_train = pca.transform(x_train)\n","x_test = pca.transform(x_test)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"Yvz69XKX0BoC","colab_type":"code","colab":{}},"source":["with tf.device('/gpu:0'):\n"," y_mse=[]\n"," y_r2score = []\n"," for k in ['linear','poly','rbf','sigmoid']:\n"," print('kernel = ',k)\n"," mo_svr = MultiOutputRegressor(SVR(kernel=k,gamma='auto'))\n"," mo_svr.fit(x_train, y_train)\n"," y_pred = mo_svr.predict(x_test)\n"," pred_mean = pd.DataFrame(y_pred.mean(axis=0))\n"," y_mse.append(mean_squared_error(y_test, y_pred))\n"," y_r2score.append(r2_score(actual_mean, pred_mean))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"trusted":true,"id":"c-ICBluk0BoE","colab_type":"code","colab":{}},"source":["print(\"Mean Squared Error: \", y_mse)\n","print(\"r2 Score (y_test_mean Vs. y_pred_mean): \", y_r2score)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"BXGpN6Vh0BoG","colab_type":"text"},"source":["Plotting first 100 features"]},{"cell_type":"code","metadata":{"trusted":true,"id":"MEUvOBqb0BoH","colab_type":"code","colab":{}},"source":["act=actual_mean[0:100].values.flatten()\n","pred=pred_mean[0:100].values.flatten()\n","\n","s1 = pd.Series(act)\n","s2 = pd.Series(pred)\n","\n","plt.figure(figsize=(10,5))\n","ax = plt.subplot(111)\n","plt.title('PCA-RF with 250 features and linear kernel')\n","plt.xlabel('No. of features (genes)')\n","plt.ylabel('Average of gene expression values across samples')\n","ax.plot(s1, 'b--', label='Actual')\n","ax.plot(s2, 'r--', label='Predicted')\n","ax.legend()\n","plt.grid(True)\n","plt.show()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"d_lQ7fJA0BoK","colab_type":"text"},"source":["# Comparison regression results from AE-MLP with PCA-MLP"]},{"cell_type":"markdown","metadata":{"id":"Uroy8EG20BoL","colab_type":"text"},"source":["Importing libraries"]},{"cell_type":"code","metadata":{"trusted":false,"id":"CuvDm03W0BoM","colab_type":"code","colab":{}},"source":["from sklearn.decomposition import PCA"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"DgMI_5sl0BoO","colab_type":"text"},"source":["PCA-MLP"]},{"cell_type":"code","metadata":{"trusted":false,"id":"6KM2qEmB0BoQ","colab_type":"code","colab":{}},"source":["n=100\n","with tf.device('/gpu:0'):\n"," #pca\n"," pca = PCA(n_components=n)\n"," pca.fit(x_train)\n"," x_train = pca.transform(x_train)\n"," x_test = pca.transform(x_test)\n"," \n"," # MLP Multi-output Regression code goes here...\n"," num = n\n"," input_data = Input(shape=(num,))\n"," x = Dropout(0.2)(input_data) # adding 20% dropout\n"," h = Dense(int(num * 3), activation='relu', name='hidden1')(x)\n"," h = Dropout(0.5)(h) # adding 50% dropout\n"," h = Dense(int(num * 5), activation='relu', name='hidden2')(h)\n"," h = Dropout(0.5)(h) # adding 50% dropout\n"," y = Dense(num_out_neurons, activation='linear', name='prediction')(h)\n"," mlpRegressor = Model(inputs=input_data, outputs=y)\n"," \n"," # Compile model\n"," mlpRegressor.compile(loss='mse', optimizer='adam', metrics=['accuracy']) # or loss='mae'\n"," # Fit the model\n"," print('training the MLP multi-output regressor')\n"," mlpRegressor.fit(x_train, y_train, epochs=50, batch_size=8)\n"," y_pred = mlpRegressor.predict(x_test)\n"," actual_mean = pd.DataFrame(y_test.mean(axis=0))\n"," pred_mean = pd.DataFrame(y_pred.mean(axis=0))"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"aUkxWs2U0BoR","colab_type":"text"},"source":["Printing results"]},{"cell_type":"code","metadata":{"trusted":true,"id":"0fbbI4US0BoS","colab_type":"code","colab":{}},"source":["print('MSE: (Actual Vs. Predicted)', mean_squared_error(y_test, y_pred))\n","print('r^2 value: (Mean of actual Vs. Mean of Predicted)', r2_score(actual_mean, pred_mean))"],"execution_count":0,"outputs":[]}]}