diff --git a/Model_development.ipynb b/Model_development.ipynb
new file mode 100644
index 0000000..4ee8d84
--- /dev/null
+++ b/Model_development.ipynb
@@ -0,0 +1,770 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Model Development \n",
+ "\n",
+ "This file is composed of components of the module development process for preliminary exploration of your data. This code is not a complete module development, but rather a preliminary examination of data. Please see the Table of Contents to explore different areas of MD.\n",
+ "***\n",
+ "\n",
+ "##### **Input:** .csv file with entire dataset. Will need to interpolate prior to using unsupervised learning if NaN exist in your dataset\n",
+ "##### **Output:** Figures for EDA\n",
+ "##### **Dependencies:** \n",
+ "***\n",
+ "\n",
+ "##### Format of input: \n",
+ ".csv file with entire dataset \n",
+ "***\n",
+ "\n",
+ "**Check:** \n",
+ "* Will need to interpolate data/remove NaN before doing any unsupervised learning for EDA\n",
+ "\n",
+ "**Sources:**\n",
+ "\n",
+ "***\n",
+ "***"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Table of Contents\n",
+ "\n",
+ "#### ML classification\n",
+ "* SVM\n",
+ "* Random Forest\n",
+ "* XGBoost\n",
+ "\n",
+ "#### Plot Visualization\n",
+ "* ROC-plot\n",
+ "* LOSO-CV\n",
+ "\n",
+ "#### Unsupervised Learning\n",
+ "* [Clustering](#cluster)\n",
+ " * [KNN Clustering](#knn)\n",
+ " * [Hierarchical Clustering](#hic)\n",
+ "* [Principal Component Analysis (PCA)](#pca)\n",
+ "\n",
+ "\n",
+ "***"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Read data:\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "NameError",
+ "evalue": "name 'filename' is not defined",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m#Change filename\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[0;31mNameError\u001b[0m: name 'filename' is not defined"
+ ]
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "data = pd.read_csv('/Users/christinayu/Desktop/AppleWatch.csv') "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Preliminary Exploratory Data Analysis:\n",
+ "\n",
+ "https://github.com/dformoso/sklearn-classification/blob/master/Data%20Science%20Workbook%20-%20Census%20Income%20Dataset.ipynb"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "238595"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(data)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " ECG | \n",
+ " Apple Watch | \n",
+ " Empatica | \n",
+ " Garmin | \n",
+ " Fitbit | \n",
+ " Miband | \n",
+ " Biovotion | \n",
+ " Skin Tone | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | count | \n",
+ " 221475.000000 | \n",
+ " 12791.000000 | \n",
+ " 138252.000000 | \n",
+ " 36625.000000 | \n",
+ " 10861.000000 | \n",
+ " 20632.000000 | \n",
+ " 160841.000000 | \n",
+ " 238595.000000 | \n",
+ "
\n",
+ " \n",
+ " | mean | \n",
+ " 90.549726 | \n",
+ " 89.579235 | \n",
+ " 88.962121 | \n",
+ " 84.418212 | \n",
+ " 84.253384 | \n",
+ " 86.713794 | \n",
+ " 86.938579 | \n",
+ " 3.638509 | \n",
+ "
\n",
+ " \n",
+ " | std | \n",
+ " 20.568018 | \n",
+ " 17.021518 | \n",
+ " 15.873166 | \n",
+ " 15.430226 | \n",
+ " 16.898867 | \n",
+ " 14.536440 | \n",
+ " 16.982374 | \n",
+ " 1.669205 | \n",
+ "
\n",
+ " \n",
+ " | min | \n",
+ " 24.174000 | \n",
+ " 36.000000 | \n",
+ " 48.200000 | \n",
+ " 39.000000 | \n",
+ " 46.000000 | \n",
+ " 45.000000 | \n",
+ " 45.000000 | \n",
+ " 1.000000 | \n",
+ "
\n",
+ " \n",
+ " | 25% | \n",
+ " 76.355000 | \n",
+ " 78.000000 | \n",
+ " 77.630000 | \n",
+ " 73.000000 | \n",
+ " 70.000000 | \n",
+ " 74.000000 | \n",
+ " 75.000000 | \n",
+ " 2.000000 | \n",
+ "
\n",
+ " \n",
+ " | 50% | \n",
+ " 89.291000 | \n",
+ " 89.000000 | \n",
+ " 87.430000 | \n",
+ " 84.000000 | \n",
+ " 81.000000 | \n",
+ " 87.000000 | \n",
+ " 86.000000 | \n",
+ " 4.000000 | \n",
+ "
\n",
+ " \n",
+ " | 75% | \n",
+ " 101.030000 | \n",
+ " 100.000000 | \n",
+ " 99.120000 | \n",
+ " 96.000000 | \n",
+ " 95.000000 | \n",
+ " 98.000000 | \n",
+ " 98.000000 | \n",
+ " 5.000000 | \n",
+ "
\n",
+ " \n",
+ " | max | \n",
+ " 240.000000 | \n",
+ " 155.000000 | \n",
+ " 178.740000 | \n",
+ " 134.000000 | \n",
+ " 180.000000 | \n",
+ " 128.000000 | \n",
+ " 168.000000 | \n",
+ " 6.000000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " ECG Apple Watch Empatica Garmin Fitbit \\\n",
+ "count 221475.000000 12791.000000 138252.000000 36625.000000 10861.000000 \n",
+ "mean 90.549726 89.579235 88.962121 84.418212 84.253384 \n",
+ "std 20.568018 17.021518 15.873166 15.430226 16.898867 \n",
+ "min 24.174000 36.000000 48.200000 39.000000 46.000000 \n",
+ "25% 76.355000 78.000000 77.630000 73.000000 70.000000 \n",
+ "50% 89.291000 89.000000 87.430000 84.000000 81.000000 \n",
+ "75% 101.030000 100.000000 99.120000 96.000000 95.000000 \n",
+ "max 240.000000 155.000000 178.740000 134.000000 180.000000 \n",
+ "\n",
+ " Miband Biovotion Skin Tone \n",
+ "count 20632.000000 160841.000000 238595.000000 \n",
+ "mean 86.713794 86.938579 3.638509 \n",
+ "std 14.536440 16.982374 1.669205 \n",
+ "min 45.000000 45.000000 1.000000 \n",
+ "25% 74.000000 75.000000 2.000000 \n",
+ "50% 87.000000 86.000000 4.000000 \n",
+ "75% 98.000000 98.000000 5.000000 \n",
+ "max 128.000000 168.000000 6.000000 "
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.describe()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Correlation Plots\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import seaborn as sns\n",
+ "corr = data.corr()\n",
+ "sns.heatmap(corr, \n",
+ " xticklabels=corr.columns,\n",
+ " yticklabels=corr.columns)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Unsupervised Learning Section- "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Clustering\n",
+ "\n",
+ "\n",
+ "https://www.neuroelectrics.com/blog/clustering-methods-in-exploratory-analysis/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "dfc = data.drop(columns=[]) # drop all non-numeric columns\n",
+ "dfc.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### KNN Clustering:\n",
+ ""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.cluster import KMeans\n",
+ "# create kmeans object\n",
+ "kmeans = KMeans(n_clusters=3)# fit kmeans object to data\n",
+ "kmeans.fit(dfc)# print location of clusters learned by kmeans object\n",
+ "#print(kmeans.cluster_centers_)# save new clusters for chart\n",
+ "y_km = kmeans.fit_predict(dfc)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "labels = kmeans.labels_\n",
+ "dfc['clusters'] = labels"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Hierarchical Clustering\n",
+ "\n",
+ "\n",
+ "*Agglomerative (data points are clustered using a bottim-up approach starting with individual data points)\n",
+ "\n",
+ "\n",
+ "https://stackabuse.com/hierarchical-clustering-with-python-and-scikit-learn/"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import scipy.cluster.hierarchy as shc\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "plt.figure(figsize=(10, 7))\n",
+ "plt.title(\"Data Dendograms\")\n",
+ "dend = shc.dendrogram(shc.linkage(dfc, method='ward'))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.cluster import AgglomerativeClustering\n",
+ "from scipy.cluster.hierarchy import dendrogram, linkage\n",
+ "\n",
+ "cluster = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='ward')\n",
+ "cluster.fit_predict(dfc)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "print(cluster.labels_)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## PCA (Prinicipal Component Analysis)\n",
+ "\n",
+ "https://cmdlinetips.com/2018/03/pca-example-in-python-with-scikit-learn/\n",
+ "\n",
+ "https://scikit-learn.org/stable/tutorial/statistical_inference/unsupervised_learning.html\n",
+ "\n",
+ "PCA selects the successive components that explain the maximum variance in the signal.\n",
+ "This is useful to us because we have a large amount of features. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Install matplotlib widget Ipython magic: https://github.com/matplotlib/jupyter-matplotlib\n",
+ "\n",
+ "Problems with matplotlib widget not working: https://github.com/matplotlib/jupyter-matplotlib/issues/66"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/christinayu/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/deprecation.py:143: FutureWarning: The sklearn.datasets.samples_generator module is deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.datasets. Anything that cannot be imported from sklearn.datasets is now part of the private API.\n",
+ " warnings.warn(message, FutureWarning)\n",
+ "/Users/christinayu/opt/anaconda3/lib/python3.8/site-packages/matplotlib/collections.py:922: RuntimeWarning: invalid value encountered in sqrt\n",
+ " scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[0.98318212 0.00850037 0.00831751]\n",
+ "[3.78521638 0.03272613 0.03202212]\n",
+ "[0.98318212 0.00850037]\n",
+ "[3.78521638 0.03272613]\n"
+ ]
+ },
+ {
+ "ename": "TypeError",
+ "evalue": "loop of ufunc does not support argument 0 of type NoneType which has no callable sqrt method",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;31mAttributeError\u001b[0m: 'NoneType' object has no attribute 'sqrt'",
+ "\nThe above exception was the direct cause of the following exception:\n",
+ "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0mX_new\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpca\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 26\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_new\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_new\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mmarker\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'o'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 27\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 28\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/matplotlib/pyplot.py\u001b[0m in \u001b[0;36mscatter\u001b[0;34m(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, plotnonfinite, data, **kwargs)\u001b[0m\n\u001b[1;32m 2888\u001b[0m \u001b[0mverts\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcbook\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdeprecation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_deprecated_parameter\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2889\u001b[0m edgecolors=None, *, plotnonfinite=False, data=None, **kwargs):\n\u001b[0;32m-> 2890\u001b[0;31m __ret = gca().scatter(\n\u001b[0m\u001b[1;32m 2891\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmarker\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmarker\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcmap\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnorm\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnorm\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2892\u001b[0m \u001b[0mvmin\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvmin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvmax\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mvmax\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0malpha\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0malpha\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlinewidths\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlinewidths\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/mpl_toolkits/mplot3d/axes3d.py\u001b[0m in \u001b[0;36mscatter\u001b[0;34m(self, xs, ys, zs, zdir, s, c, depthshade, *args, **kwargs)\u001b[0m\n\u001b[1;32m 2310\u001b[0m \u001b[0mzs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mzs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2311\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2312\u001b[0;31m \u001b[0mpatches\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mxs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mys\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0ms\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2313\u001b[0m art3d.patch_collection_2d_to_3d(patches, zs=zs, zdir=zdir,\n\u001b[1;32m 2314\u001b[0m depthshade=depthshade)\n",
+ "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/matplotlib/__init__.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(ax, data, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1436\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0minner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1437\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1438\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0mmap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msanitize_sequence\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1439\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1440\u001b[0m \u001b[0mbound\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_sig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbind\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/matplotlib/cbook/deprecation.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*inner_args, **inner_kwargs)\u001b[0m\n\u001b[1;32m 409\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mdeprecation_addendum\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 410\u001b[0m **kwargs)\n\u001b[0;32m--> 411\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0minner_args\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0minner_kwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 412\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 413\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36mscatter\u001b[0;34m(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, plotnonfinite, **kwargs)\u001b[0m\n\u001b[1;32m 4486\u001b[0m \u001b[0moffsets\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumn_stack\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4487\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4488\u001b[0;31m collection = mcoll.PathCollection(\n\u001b[0m\u001b[1;32m 4489\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscales\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4490\u001b[0m \u001b[0mfacecolors\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcolors\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/matplotlib/collections.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, paths, sizes, **kwargs)\u001b[0m\n\u001b[1;32m 953\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 954\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_paths\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpaths\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 955\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_sizes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msizes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 956\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstale\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 957\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;32m~/opt/anaconda3/lib/python3.8/site-packages/matplotlib/collections.py\u001b[0m in \u001b[0;36mset_sizes\u001b[0;34m(self, sizes, dpi)\u001b[0m\n\u001b[1;32m 920\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_sizes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0masarray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msizes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 921\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_transforms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_sizes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 922\u001b[0;31m \u001b[0mscale\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_sizes\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mdpi\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0;36m72.0\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_factor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 923\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_transforms\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscale\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 924\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_transforms\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscale\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;31mTypeError\u001b[0m: loop of ufunc does not support argument 0 of type NoneType which has no callable sqrt method"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/Users/christinayu/opt/anaconda3/lib/python3.8/site-packages/matplotlib/collections.py:922: RuntimeWarning: invalid value encountered in sqrt\n",
+ " scale = np.sqrt(self._sizes) * dpi / 72.0 * self._factor\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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Vwo5YkeGRyfygx/8AG63G9/85jeXdAwvv/wyLr300rg5s9/+9rcxMTEBYLHLgHQ0PP3009wcg5WM7aaJImyrjdtuuw233norrr76ai5rd/z4cXR1daGrqwt9fX0wGAzo6OjgxK61tXXFa+xmZ2dht9uzUuDKbyki/0j/5FKbxUl7l9iqMhekEjuSbb/11lvx2muv5dV82DxBEbbVhs/nk4yrsSwLl8uF48ePc90Tg4ODKC4u5oRu586daGpqWrakQ6otaDYQahbPxMuup6cHZWVled96RMTO7XbjS1/6Eo4dOwaWZXHZZZdh165duPXWW/PaomqFUYTtfIBlWczPz6Orq4uL2Y2NjaGqqoqrsdu1axfWrVu3ZLFjWRanT59GXV3ditvXpOtl53Q6MTY2ho6OjlWV4Tt16hS+8IUv4Omnn0ZfXx+OHz+OG2+8Ma0t/xpHEbbzFZZlMT09HSd2pFaJrOp27dqFioqKtC76XMarhJDa1jmdTmzatAllZWV5NadACoZhcN111+F73/te2i1Nclqn8nhASzoowqZwDoZhMDY2xlk7dXV1wW63o6WlJW4bW1xcLCh2xLNuz549eVGNLwbDMDh79iyi0Si0Wm3cnAL+yi7X9YFC/P73v8crr7yCn/70p2k/Vk7r1KFDh3D//fevmgEtIiidBwrnUKlUaG5uRnNzM+flRdM0BgcHcfToUTzzzDM4cOAAfD4fWltbk2rsvv71r+MTn/hEXosasOiz5vP54uas8oey8CdQJboU51Ls/H4/HnjgATz33HMZPb6mpobrFDCbzdiyZQump6fzZnW93CgrNgVJYrEYenp6uOTEqVOn4Ha7UVRUhHe84x3o7OzEjh07BHtGcw3Lsjhx4gQ2bNgQN4BFiHzzsvv617+O6upqfOITn1jyc42NjeGyyy7jukEIhw4dws0334y6urpVMaBFBGUrqrB0pqencd111+HBBx9Eb28vjh07hjNnzgAAtm/fzq3stm3blnMbIDIib/PmzRk9XsjLTq1WJ4ldtgV9bGwMt912G1577bWstE696U1vwj333JPUZZDHA1rSQRE2haXz6KOPoqKiIq6th9SenTx5knM76enpgU6nw86dO9HR0YHdu3ejtbV1xbauxA8u2zHA5fayY1kWt956K/7zP/8TV1111ZKONRqN4vrrr8fVV1+NT33qUynv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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "from mpl_toolkits.mplot3d import Axes3D\n",
+ "from sklearn.datasets.samples_generator import make_blobs\n",
+ "\n",
+ "X, y = make_blobs(n_samples=10000, n_features=3, centers=[[3,3, 3], [0,0,0], [1,1,1], [2,2,2]], cluster_std=[0.2, 0.1, 0.2, 0.2], \n",
+ " random_state =9)\n",
+ "fig = plt.figure()\n",
+ "ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)\n",
+ "plt.scatter(X[:, 0], X[:, 1], X[:, 2],marker='o')\n",
+ "\n",
+ "\n",
+ "from sklearn.decomposition import PCA\n",
+ "pca = PCA(n_components=3)\n",
+ "pca.fit(X)\n",
+ "print (pca.explained_variance_ratio_)\n",
+ "print (pca.explained_variance_)\n",
+ "\n",
+ "\n",
+ "pca = PCA(n_components=2)\n",
+ "pca.fit(X)\n",
+ "print (pca.explained_variance_ratio_)\n",
+ "print (pca.explained_variance_)\n",
+ "\n",
+ "X_new = pca.transform(X)\n",
+ "plt.scatter(X_new[:, 0], X_new[:, 1],marker='o')\n",
+ "plt.show()\n",
+ "\n",
+ "pca = PCA(n_components=0.95)\n",
+ "pca.fit(X)\n",
+ "print (pca.explained_variance_ratio_)\n",
+ "print (pca.explained_variance_)\n",
+ "print (pca.n_components_)\n",
+ "\n",
+ "pca = PCA(n_components='mle')\n",
+ "pca.fit(X)\n",
+ "print (pca.explained_variance_ratio_)\n",
+ "print (pca.explained_variance_)\n",
+ "print (pca.n_components_)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Random Forest\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "x=df.iloc[:,:-1]\n",
+ "y=df.iloc[:,-1:]\n",
+ "\n",
+ "\n",
+ "from sklearn.ensemble import RandomForestRegressor\n",
+ "\n",
+ "regressor = RandomForestRegressor(n_estimators = 100, random_state = 0)\n",
+ "# regression fit\n",
+ "regressor.fit(x,y)\n",
+ "\n",
+ "# predict the result\n",
+ "Y_pred = regressor.predict(np.array([6.5]).reshape(1,1))\n",
+ "\n",
+ "# Visualization\n",
+ "X_grid = np.arrange(min(x), max(x), 0.01)\n",
+ "X_grid = X_grid.reshape((len(X_grid),1))\n",
+ "plt.scatter(x,y,color = 'blue')\n",
+ "\n",
+ "ply.plot(X_grid, regressor.predict(X_grid), color = 'green')\n",
+ "plt.title('Random Forest Regression')\n",
+ "plt.xlabel('Wearable Devices')\n",
+ "plt.ylabel('Medical Stats')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## SVM\n",
+ "\n",
+ "Support Vector regression is a type of Support vector machine that supports linear and non-linear regression\n",
+ "see tutorial here: https://medium.com/pursuitnotes/support-vector-regression-in-6-steps-with-python-c4569acd062d\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Feature Scaling\n",
+ "from sklearn.preprocessing import StandardScaler\n",
+ "sc_X = StandardScaler()\n",
+ "sc_y = StandardScaler()\n",
+ "X = sc_X.fit_transform(X)\n",
+ "y = sc_y.fit_transform(y)\n",
+ "\n",
+ "# Fitting the Support Vector Regression Model to the data\n",
+ "from sklearn.svm import SVR\n",
+ "regressor = SVR(kernel='rbf')\n",
+ "regressor.fit(X,y)\n",
+ "#5 Predicting a new result\n",
+ "y_pred = regressor.predict(6.5)\n",
+ "\n",
+ "#6 Visualization\n",
+ "plt.scatter(X, y, color = 'red')\n",
+ "plt.plot(X, regressor.predict(X), color = 'green')\n",
+ "plt.title('Medical Data for SVM/SVR Model')\n",
+ "plt.xlabel('Wearable Devices')\n",
+ "plt.ylabel('Medical Stats')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## XGBoost\n",
+ "\n",
+ "The results of the regression problems are continuous or real values. Some commonly used regression algorithms are Linear Regression and Decision Tree"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import xgboost as xg\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.metrics import mean_squared_error as MSE\n",
+ "\n",
+ "X, y = dataset.iloc[:, :-1], dataset.iloc[:, -1]\n",
+ "\n",
+ "# Splitting\n",
+ "train_X, test_X, train_y, test_y = train_test_split(X, y, test_size = 0.3, random_state = 123)\n",
+ " \n",
+ "xgb_r = xg.XGBRegressor(objective ='reg:linear', n_estimators = 10, seed = 123)\n",
+ " \n",
+ "# Fit the model\n",
+ "xgb_r.fit(train_X, train_y)\n",
+ " \n",
+ "# Prediction\n",
+ "pred = xgb_r.predict(test_X)\n",
+ "\n",
+ "rmse = np.sqrt(MSE(test_y, pred))\n",
+ "print(\"RMSE : % f\" %(rmse))\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## ROC and PR Curves\n",
+ "\n",
+ "Interpret the results of classification using Receiver Operating Characteristics (ROC) and Precision-Recall (PR) Curves in Python\n",
+ "\n",
+ "Sensitivity: The probability that the model predicts a positive outcome for an observation when indeed the outcome is positive. This is also called the “true positive rate.”\n",
+ "Specificity: The probability that the model predicts a negative outcome for an observation when indeed the outcome is negative. This is also called the “true negative rate.”"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "ModuleNotFoundError",
+ "evalue": "No module named 'plotly'",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
+ "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mplotly\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpress\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mpx\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlinear_model\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mLogisticRegression\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mroc_curve\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mauc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdatasets\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmake_classification\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+ "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'plotly'"
+ ]
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "from sklearn.linear_model import LogisticRegression\n",
+ "from sklearn import metrics\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "# we use the dataset from previous \n",
+ "X = data['Time']\n",
+ "y = data['Rate']\n",
+ "\n",
+ "#split the dataset into training (80%) and testing (20%) sets\n",
+ "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0) \n",
+ "\n",
+ "#instantiate the model\n",
+ "log_regression = LogisticRegression()\n",
+ "\n",
+ "#fit the model using the training data\n",
+ "log_regression.fit(X_train,y_train)\n",
+ "\n",
+ "#define metrics\n",
+ "y_pred_probaldata = log_regression.predict_proba(X_test)[::,1]\n",
+ "fpr, tpr, _ = metrics.roc_curve(y_test, y_pred_probaldata)\n",
+ "\n",
+ "#plot ROC curve\n",
+ "plt.plot(fpr,tpr)\n",
+ "plt.ylabel('True Positive Rate')\n",
+ "plt.xlabel('False Positive Rate')\n",
+ "plt.show()\n",
+ "\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "c2a0d16ab2ef21d9ffd61da4743bf5eccc7864478b6988e54f4be7517ca730a8"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.8.5 ('base')",
+ "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.8.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}