Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save kaveenkumar/c8e02ebcd957b8d35eb3235afa8bc320 to your computer and use it in GitHub Desktop.
Save kaveenkumar/c8e02ebcd957b8d35eb3235afa8bc320 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# AI@University - Preparation Material\n",
"This preparation material aims to give you an intuition on the activities and skills needed during the upcoming workshop at your university. The center piece of this workshop will be a compact hacking competition, in which you solve a given customer case in small groups, using Machine Learning. This notebook illustrates the general approach to solving such a case study, and it is recommended to follow a similar structure during the hacking competition of the workshop.\n",
"\n",
"### Prerequisites\n",
"Familiarity with the **Python 3** programming language, related libraries, such as **pandas**, **numpy** or **scikit-learn**, as well as **Jupyter Notebooks** are required. So before the workshop, please make sure that you have installed Python 3 and Juypter Notebooks, preferrably using the [Anaconda distribution](https://www.anaconda.com/download/#macos), as it already contains a set of useful Data Science libraries.\n",
"\n",
"**Note**:\n",
"* When downloading this file to macOS, it automatically gets converted to a text file. To be able to open it as a Jupyter Notebook, select the file and press `command` + `i`. In the opening detail view, delte the file ending `.txt`\n",
"\n",
"# Case Study: Thomas J. Watson Hospital - Oncology Department\n",
"You have been hired as a consulting team of Data Scientists by the oncology department of the **Thomas J. \n",
"Watson Hospital** in **Berlin**.\n",
"\n",
"The oncology department is highly recognized and attracts patients from all over the world\n",
"due to its exceptional and effective treatment methods.\n",
"\n",
"To maintain its excellent reputation and pioneer in the area of cancer treatment, the Thomas J. Watson hospital\n",
"setup a new Technology Council with the goal to investigate future-oriented technologies to support its oncologists. Concretely, the Council agreed to target the identification of breast cancer in its early stages, which enables treating the disease more effectively.\n",
"\n",
"You have been engaged by the Technology Counsil to find a solution that assists the oncologists in classifying whether a breast tumor is \n",
"**malignant** or **benign**.\n",
"\n",
"You should present your results to the hospital board coming Friday. Keep in mind to present your findings in a way\n",
"that both business and technical stakeholders feel addressed.\n",
"\n",
"### Data\n",
"This breast cancer databases was obtained from the University of Wisconsin Hospitals, Madison from Dr. William H. Wolberg:\n",
"\n",
"**Wisconsin Breast Cancer Database** (January 8, 1991), O. L. Mangasarian and W. H. Wolberg: \"Cancer diagnosis via linear programming\", SIAM News, Volume 23, Number 5, September 1990, pp 1 & 18, link: https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/\n",
"\n",
"### Data Dictionary\n",
"All attributes, except the target value (`class`) are numeric and range from `1` to `10`.\n",
"\n",
"Attribute|Description\n",
"---|---\n",
"sample_code_number|ID number of sample\n",
"clump_thickness|In the Clump thickness benign cells tend to be grouped in monolayers, while cancerous cells are often grouped in multilayer.\n",
"uniformity_of_cell_size|While in the Uniformity of cell size/shape the cancer cells tend to vary in size and shape. That is why these parameters are valuable in determining whether the cells are cancerous or not. \n",
"uniformity_of_cell_shape|see above\n",
"marginal_adhesion|In the case of Marginal adhesion the normal cells tend to stick together, where cancer cells tend to lose this ability. So loss of adhesion is a sign of malignancy.\n",
"single_epithelial_cell_size|In the Single epithelial cell size the size is related to the uniformity mentioned above. Epithelial cells that are significantly enlarged may be a malignant cell.\n",
"bare_nuclei|The Bare nuclei is a term used for nuclei that is not surrounded by cytoplasm (the rest of the cell). Those are typically seen in benign tumors. \n",
"bland_chromatin|The Bland Chromatin describes a uniform \"texture\" of the nucleus seen in benign cells. In cancer cells the chromatin tends to be coarser. \n",
"normal_nucleoli|The Normal nucleoli are small structures seen in the nucleus. In normal cells the nucleolus is usually very small if visible. In cancer cells the nucleoli become more prominent, and sometimes there are more of them. \n",
"mitoses|Finally, Mitoses is nuclear division plus cytokines and produce two identical daughter cells during prophase. It is the process in which the cell divides and replicates. Pathologists can determine the grade of cancer by counting the number of mitoses\n",
"class|Label: Benign=2, Malignant=4\n",
"\n",
"### Medical Background\n",
"Breast cancer is the most common cancer among women and one of the major causes of death worldwide.\n",
"Every year approximately 124 out of 100,000 women are diagnosed with breast cancer, and the estimation is that 23 out of the 124 women will die of this disease. When detected in its early stages, there is a 30% chance that the cancer can be treated effectively, but the late detection of advanced-stage tumors makes the treatment more difficult."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Setup"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from time import time\n",
"from collections import Counter\n",
"from pathlib import Path\n",
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.svm import LinearSVC\n",
"from sklearn.model_selection import train_test_split, ShuffleSplit, cross_validate\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"%matplotlib inline\n",
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data\n",
"Specify in which directory the input data is kept."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data_directory = Path('../raw_data/challenge_data')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Training Data"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10 features and 559 training examples\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>sample_code_number</th>\n",
" <th>uniformity_of_cell_shape</th>\n",
" <th>uniformity_of_cell_size</th>\n",
" <th>clump_thickness</th>\n",
" <th>bare_nuclei</th>\n",
" <th>cell_size</th>\n",
" <th>normal_nucleoli</th>\n",
" <th>clump_cohesiveness</th>\n",
" <th>nuclear_chromatin</th>\n",
" <th>mitoses</th>\n",
" <th>class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>557583</td>\n",
" <td>5</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1230688</td>\n",
" <td>7</td>\n",
" <td>4</td>\n",
" <td>7</td>\n",
" <td>4</td>\n",
" <td>3</td>\n",
" <td>7</td>\n",
" <td>7</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>787451</td>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1238777</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1371026</td>\n",
" <td>5</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" <td>5</td>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" sample_code_number uniformity_of_cell_shape uniformity_of_cell_size \\\n",
"0 557583 5 10 \n",
"1 1230688 7 4 \n",
"2 787451 5 1 \n",
"3 1238777 1 1 \n",
"4 1371026 5 10 \n",
"\n",
" clump_thickness bare_nuclei cell_size normal_nucleoli \\\n",
"0 10 10 10 10 \n",
"1 7 4 3 7 \n",
"2 2 1 2 1 \n",
"3 1 1 2 1 \n",
"4 10 10 4 10 \n",
"\n",
" clump_cohesiveness nuclear_chromatin mitoses class \n",
"0 10 1 1 4 \n",
"1 7 6 1 4 \n",
"2 1 1 1 2 \n",
"3 1 1 1 2 \n",
"4 5 6 3 4 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = pd.read_csv(data_directory / 'breast_cancer_train.csv')\n",
"print(data.shape[1] - 1,'features and',data.shape[0],'training examples')\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Validation Data\n",
"As we can see, that validation data is missing values for the target value `class`, which should be predicted by our algorithm."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10 features and 140 validation examples\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>sample_code_number</th>\n",
" <th>uniformity_of_cell_shape</th>\n",
" <th>uniformity_of_cell_size</th>\n",
" <th>clump_thickness</th>\n",
" <th>bare_nuclei</th>\n",
" <th>cell_size</th>\n",
" <th>normal_nucleoli</th>\n",
" <th>clump_cohesiveness</th>\n",
" <th>nuclear_chromatin</th>\n",
" <th>mitoses</th>\n",
" <th>class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1056171</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1179818</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1334015</td>\n",
" <td>7</td>\n",
" <td>8</td>\n",
" <td>8</td>\n",
" <td>7</td>\n",
" <td>3</td>\n",
" <td>10</td>\n",
" <td>7</td>\n",
" <td>2</td>\n",
" <td>3</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1287282</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1265899</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" sample_code_number uniformity_of_cell_shape uniformity_of_cell_size \\\n",
"0 1056171 2 1 \n",
"1 1179818 2 1 \n",
"2 1334015 7 8 \n",
"3 1287282 3 1 \n",
"4 1265899 4 1 \n",
"\n",
" clump_thickness bare_nuclei cell_size normal_nucleoli \\\n",
"0 1 1 2 1 \n",
"1 1 1 2 1 \n",
"2 8 7 3 10 \n",
"3 1 1 2 1 \n",
"4 1 1 2 1 \n",
"\n",
" clump_cohesiveness nuclear_chromatin mitoses class \n",
"0 2 1 1 NaN \n",
"1 3 1 1 NaN \n",
"2 7 2 3 NaN \n",
"3 1 1 1 NaN \n",
"4 3 1 1 NaN "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_validation = pd.read_csv(data_directory / 'breast_cancer_validation.csv')\n",
"print(data.shape[1] - 1,'features and',data_validation.shape[0],'validation examples')\n",
"data_validation.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data Preparation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Concatenate `data` and `validation data` in a list to process them simultaneously."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"data_preprocessor = [data, data_validation]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Feature Selection\n",
"Drop features that do not hold any value for the analysis."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"for dataset in data_preprocessor:\n",
" dataset.drop('sample_code_number',axis=1,inplace=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Imputation\n",
"Check whether the data contains any null / NaN values or if any values do not correspond to the anticipated datatypes."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"uniformity_of_cell_shape 0\n",
"uniformity_of_cell_size 0\n",
"clump_thickness 0\n",
"bare_nuclei 0\n",
"cell_size 0\n",
"normal_nucleoli 0\n",
"clump_cohesiveness 0\n",
"nuclear_chromatin 0\n",
"mitoses 0\n",
"class 0\n",
"dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"uniformity_of_cell_shape int64\n",
"uniformity_of_cell_size int64\n",
"clump_thickness int64\n",
"bare_nuclei int64\n",
"cell_size int64\n",
"normal_nucleoli object\n",
"clump_cohesiveness int64\n",
"nuclear_chromatin int64\n",
"mitoses int64\n",
"class int64\n",
"dtype: object"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The feature column `normal_nucleoli` is of datatype `object`, although it should contain only digits. Let's check which non-digit values can be found in the dataframe using the `isdigit()` function of pandas."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>normal_nucleoli</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>?</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>?</td>\n",
" </tr>\n",
" <tr>\n",
" <th>65</th>\n",
" <td>?</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89</th>\n",
" <td>?</td>\n",
" </tr>\n",
" <tr>\n",
" <th>104</th>\n",
" <td>?</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" normal_nucleoli\n",
"33 ?\n",
"48 ?\n",
"65 ?\n",
"89 ?\n",
"104 ?"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data[~data['normal_nucleoli'].str.isdigit()][['normal_nucleoli']].head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Subsequently, let's replace all non-digit values with the median value and make the column numerical."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pattern = r'(\\D+)'\n",
"replacement = str(int(data[data['normal_nucleoli'].str.isdigit()]['normal_nucleoli'].astype(int).median()))\n",
"\n",
"for dataset in data_preprocessor:\n",
" dataset['normal_nucleoli'] = dataset['normal_nucleoli'].str.replace(pat = pattern, repl = replacement).astype(int)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generally, in the data preparation phase, you should focus on **Correcting**, **Completing** and **Converting** your existing data, as well as considering **Creating** new data (*feature engineering*) which might improve your predictions."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Data Exploration"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Target Distribtion\n",
"Check whether the target distribution is skewed."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2 369\n",
"4 190\n",
"Name: class, dtype: int64"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data['class'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Feature Correlations\n",
"Check the correlation amongst the attributes to determine strong predictors amongst the features. This help to put the model's output into context and start further investigations to improve the performance."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"correlation_matrix = data.corr()"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x121cef2b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize=(10, 7))\n",
"ax = plt.axes()\n",
"ax = sns.heatmap(correlation_matrix, mask=np.zeros_like(correlation_matrix, dtype=np.bool), cmap=\"Blues\", square=True, ax = ax)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Modeling"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Define Features and Target\n",
"Specify for the training set which columns contain the features (`X`) and which column contains the target (`y`). Note, that for the validation set we only need to specify the feature columns (`X_validation`) we use for prediction, since the target is not know to us and has to be predicted by our model."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"X = data[data.columns[:-1]]\n",
"y = data[data.columns[-1]]\n",
"\n",
"X_validation = data_validation[data_validation.columns[:-1]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model Selection\n",
"Define a list of algorithm classes that should be investigated. For this example, we are only considering a Support Vector Machine with a linear kernel. Feel free to consider more algorithms by importing the respective module and adding the respective model class to the `algorithms` list."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"algorithms = [\n",
" LinearSVC()\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def model_selection(X, y, algorithms, n_splits=10, test_size=.3, train_size=.6, random_state=0):\n",
" \"\"\"Select the most accurate machine learning model from a given list.\n",
"\n",
" Parameters\n",
" ----------\n",
" X : array-like\n",
" dataFrame to fit\n",
" y : array-like\n",
" target variable to predict\n",
" algorithms : array-like\n",
" scikit-learn model objects\n",
" n_splits : int\n",
" number of re-shuffling & splitting iterations\n",
" test_size : float, int\n",
" proportion of the dataset to include in the test split\n",
" train_size : float, int\n",
" proportion of the dataset to include in the train split\n",
" random_state : int\n",
" random seed\n",
" \n",
" Returns\n",
" -------\n",
" algorithm_comparision : array-like\n",
" dataframe containing the algorithm's attributes and accuracy \n",
" \"\"\"\n",
" # Define the cross-validation split, leaving out 10%\n",
" cv_split = ShuffleSplit(n_splits=n_splits,test_size=test_size,\n",
" train_size=train_size,random_state=random_state)\n",
" \n",
" # Create a table to compare the algorithm's metrics and predictions\n",
" columns = ['name','params','mean_train_accuracy','mean_test_accuracy','test_accuracy_3std' ,'time']\n",
" algorithm_comparison = pd.DataFrame(columns = columns)\n",
"\n",
" row_index = 0\n",
" \n",
" for alg in algorithms:\n",
"\n",
" # Set name and parameters of the algorithm\n",
" algorithm_name = alg.__class__.__name__\n",
" algorithm_comparison.loc[row_index, 'name'] = algorithm_name\n",
" algorithm_comparison.loc[row_index, 'params'] = str(alg.get_params())\n",
"\n",
" # Score model with cross validation using the accuracy metric\n",
" cv_results = cross_validate(alg, X, y, cv=cv_split, scoring='accuracy')\n",
" algorithm_comparison.loc[row_index, 'time'] = cv_results['fit_time'].mean()\n",
" algorithm_comparison.loc[row_index, 'mean_train_accuracy'] = cv_results['train_score'].mean()\n",
" algorithm_comparison.loc[row_index, 'mean_test_accuracy'] = cv_results['test_score'].mean() \n",
" algorithm_comparison.loc[row_index, 'test_accuracy_3std'] = cv_results['test_score'].std()*3\n",
"\n",
" row_index+=1\n",
"\n",
" algorithm_comparison.sort_values(by = ['mean_test_accuracy'], ascending = False, inplace = True)\n",
" \n",
" return algorithm_comparison"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>name</th>\n",
" <th>params</th>\n",
" <th>mean_train_accuracy</th>\n",
" <th>mean_test_accuracy</th>\n",
" <th>test_accuracy_3std</th>\n",
" <th>time</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>LinearSVC</td>\n",
" <td>{'C': 1.0, 'class_weight': None, 'dual': True,...</td>\n",
" <td>0.97791</td>\n",
" <td>0.969643</td>\n",
" <td>0.0378386</td>\n",
" <td>0.00544336</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" name params \\\n",
"0 LinearSVC {'C': 1.0, 'class_weight': None, 'dual': True,... \n",
"\n",
" mean_train_accuracy mean_test_accuracy test_accuracy_3std time \n",
"0 0.97791 0.969643 0.0378386 0.00544336 "
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model_selection(X,y,algorithms)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After conducting the model selection, it is possible to conduct a hyperparameter search to improve the model performance even further. As this can be quite time consuming, it is recommended to take the default model parameter values."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Train Final Model\n",
"Before generating the final predictions, we want to train our model on **all** the data we have available."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"model = LinearSVC()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
" intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
" multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
" verbose=0)"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.fit(X,y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Prediction on Validation Set"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, let's put our model to work and predict on the validation data."
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of Predictions: 140\n",
"Prediction Contents: [2 2 4 2 2 4 2 4 4 4]\n"
]
}
],
"source": [
"y_pred = model.predict(X_validation)\n",
"\n",
"print('Number of Predictions:',len(y_pred))\n",
"print('Prediction Contents:',y_pred[:10])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Save the predictions as a csv file and name it after your team, so they can be submitted for evaluation."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"pd.Series(y_pred).to_csv(data_directory / 'YOUR_TEAM_NAME.csv',sep=',',index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Author**: Daniel Jaeck, Data Scientist at IBM ([email protected])\n",
"\n",
"Copyright © IBM Corp. 2018. This notebook and its source code are released under the terms of the MIT License."
]
}
],
"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.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
sample_code_number uniformity_of_cell_shape uniformity_of_cell_size clump_thickness bare_nuclei cell_size normal_nucleoli clump_cohesiveness nuclear_chromatin mitoses class
557583 5 10 10 10 10 10 10 1 1 4
1230688 7 4 7 4 3 7 7 6 1 4
787451 5 1 2 1 2 1 1 1 1 2
1238777 1 1 1 1 2 1 1 1 1 2
1371026 5 10 10 10 4 10 5 6 3 4
1320304 3 1 2 2 2 1 1 1 1 2
1355260 1 1 1 1 2 1 2 1 1 2
1180523 3 1 1 1 2 1 2 2 1 2
1225799 10 6 4 3 10 10 9 10 1 4
1216694 10 8 8 4 10 10 8 1 1 4
1259008 8 8 9 6 6 3 10 10 1 4
1065726 5 2 3 4 2 7 3 6 1 4
1182404 4 1 1 1 2 1 2 1 1 2
1133991 4 1 1 1 1 1 2 1 1 2
1186936 2 1 3 2 2 1 2 1 1 2
1223793 6 10 7 7 6 4 8 10 2 4
743348 3 2 2 1 2 1 2 3 1 2
1000025 5 1 1 1 2 1 3 1 1 2
1318169 9 10 10 10 10 5 10 10 10 4
1223967 6 1 3 1 2 1 3 1 1 2
1181356 5 1 1 1 2 2 3 3 1 2
1253955 8 7 4 4 5 3 5 10 1 4
1196475 3 2 1 1 2 1 2 2 1 2
1200847 6 10 10 10 8 10 10 10 7 4
1135090 4 1 1 1 2 1 2 1 1 2
188336 5 3 2 8 5 10 8 1 2 4
608157 10 4 3 10 4 10 10 1 1 4
1306282 6 6 7 10 3 10 8 10 2 4
1147044 3 1 1 1 2 2 7 1 1 2
888820 5 10 10 3 7 3 8 10 2 4
1071760 2 1 1 1 2 1 3 1 1 2
1277145 5 1 1 1 2 1 1 1 1 2
1115293 1 1 1 1 2 1 1 1 1 2
1183246 1 1 1 1 1 ? 2 1 1 2
76389 10 4 7 2 2 8 6 1 1 4
1313325 4 10 4 7 3 10 9 10 1 4
734111 1 1 1 3 2 3 1 1 1 2
1214556 3 1 1 1 2 1 2 1 1 2
1276091 6 1 1 3 2 1 1 1 1 2
695219 1 1 1 1 2 1 2 1 1 2
1217952 4 1 1 1 2 1 2 1 1 2
1197440 1 1 1 2 1 3 1 1 7 2
733823 5 4 6 10 2 10 4 1 1 4
749653 3 1 1 1 2 1 2 1 1 2
1237674 3 1 2 1 2 1 2 1 1 2
1295508 1 1 1 1 2 4 1 1 1 2
1184241 2 1 1 1 2 1 2 1 1 2
1070522 3 1 1 1 1 1 2 1 1 2
1096800 6 6 6 9 6 ? 7 8 1 2
1184184 1 1 1 1 2 5 1 1 1 2
1145420 6 1 1 1 2 1 2 1 1 2
1218105 5 10 10 9 6 10 7 10 5 4
896404 2 1 1 1 2 1 3 1 1 2
1295186 10 10 10 1 6 1 2 8 1 4
1321942 5 1 1 1 2 1 3 1 1 2
1103608 10 10 10 4 8 1 8 10 1 4
776715 3 1 1 1 3 2 1 1 1 2
704097 1 1 1 1 1 1 2 1 1 2
601265 10 4 4 6 2 10 2 3 1 4
1207986 5 8 4 10 5 8 9 10 1 4
718641 1 1 1 1 5 1 3 1 1 2
1303489 3 1 1 1 2 1 2 1 1 2
666942 1 1 1 1 2 1 3 1 1 2
1257938 3 1 1 1 2 1 1 1 1 2
837480 7 4 4 3 4 10 6 9 1 4
169356 3 1 1 1 2 ? 3 1 1 2
672113 7 5 6 10 4 10 5 3 1 4
1268275 9 8 8 9 6 3 4 1 1 4
1193544 5 7 9 8 6 10 8 10 1 4
805448 1 1 1 1 2 1 1 1 1 2
1321321 5 1 1 3 2 1 1 1 1 2
1232225 10 4 5 5 5 10 4 1 1 4
1277792 4 1 1 1 2 1 1 1 1 2
1343374 10 10 8 10 6 5 10 3 1 4
1325309 4 1 2 1 2 1 2 1 1 2
1182404 4 2 1 1 2 1 1 1 1 2
1368273 1 1 1 1 2 1 1 1 1 2
1151734 10 8 7 4 3 10 7 9 1 4
1299994 5 1 1 1 2 1 1 1 1 2
1184586 4 1 1 1 2 1 2 1 1 2
798429 4 1 1 1 2 1 3 1 1 2
378275 10 9 7 3 4 2 7 7 1 4
1026122 2 1 1 1 2 1 1 1 1 2
1198641 3 1 1 1 2 1 3 1 1 2
1125035 9 4 5 10 6 10 4 8 1 4
1067444 2 1 1 1 2 1 2 1 1 2
1197270 3 1 1 1 2 1 3 1 1 2
814911 1 1 1 1 2 1 1 1 1 2
1354840 2 1 1 1 2 1 3 1 1 2
704168 4 6 5 6 7 ? 4 9 1 2
1002504 3 2 2 2 2 1 3 2 1 2
1107684 6 10 5 5 4 10 6 10 1 4
810104 1 1 1 1 2 1 3 1 1 2
1277268 3 3 1 1 2 1 1 1 1 2
535331 3 1 1 1 3 1 2 1 1 2
704097 1 1 1 1 1 1 2 1 1 2
1313658 3 1 1 1 2 1 1 1 1 2
1323477 1 2 1 3 2 1 2 1 1 2
1193210 2 1 1 1 2 1 3 1 1 2
693702 1 1 1 1 2 1 1 1 1 2
1230175 10 10 10 3 10 10 9 10 1 4
657753 3 1 1 4 3 1 2 2 1 2
191250 10 4 4 10 2 10 5 3 3 4
1219859 8 10 8 8 4 8 7 7 1 4
733639 3 1 1 1 2 ? 3 1 1 2
1334659 5 2 4 1 1 1 1 1 1 2
1231853 4 2 2 1 2 1 2 1 1 2
1295529 2 5 7 6 4 10 7 6 1 4
1204898 6 1 1 1 2 1 3 1 1 2
1112209 8 10 10 1 3 6 3 9 1 4
1296025 4 1 2 1 2 1 1 1 1 2
1333104 3 1 2 1 2 1 3 1 1 2
1227081 3 1 1 3 2 1 1 1 1 2
1137156 2 2 2 1 1 1 7 1 1 2
411453 5 1 1 1 2 1 3 1 1 2
709287 6 8 7 8 6 8 8 9 1 4
646904 1 1 1 1 2 1 3 1 1 2
695091 5 10 10 5 4 5 4 4 1 4
1155546 2 1 1 2 3 1 2 1 1 2
1047630 7 4 6 4 6 1 4 3 1 4
488173 1 4 3 10 4 10 5 6 1 4
385103 5 1 2 1 2 1 3 1 1 2
826923 1 1 1 1 2 1 1 1 1 2
1238948 8 5 6 2 3 10 6 6 1 4
792744 1 1 1 1 2 1 1 1 1 2
1299924 3 2 2 2 2 1 4 2 1 2
492561 4 3 2 1 3 1 2 1 1 2
721482 4 4 4 4 6 5 7 3 1 2
1345593 3 1 1 3 2 1 2 1 1 2
1296572 10 9 8 7 6 4 7 10 3 4
144888 8 10 10 8 5 10 7 8 1 4
431495 3 1 1 1 2 1 3 2 1 2
1368267 5 1 1 1 2 1 1 1 1 2
1213784 3 1 1 1 2 1 1 1 1 2
769612 4 1 1 1 2 1 1 1 1 2
1017023 4 1 1 3 2 1 3 1 1 2
1115293 1 1 1 1 2 2 2 1 1 2
666090 1 1 1 1 2 1 3 1 1 2
13454352 1 1 3 1 2 1 2 1 1 2
1267898 5 1 3 1 2 1 1 1 1 2
780555 5 1 1 6 3 1 2 1 1 2
1365075 4 1 4 1 2 1 1 1 1 2
1133041 5 3 1 2 2 1 2 1 1 2
1166654 10 3 5 1 10 5 3 10 2 4
492268 10 4 6 1 2 10 5 3 1 4
1168736 5 6 6 2 4 10 3 6 1 4
1197979 4 1 1 1 2 2 3 2 1 2
1202812 5 3 3 3 6 10 3 1 1 4
536708 1 1 1 1 2 1 1 1 1 2
1235807 5 1 1 1 2 1 2 1 1 2
1201870 4 1 1 3 1 1 2 1 1 2
1266124 5 1 2 1 2 1 1 1 1 2
1113038 8 2 4 1 5 1 5 4 4 4
688033 1 1 1 1 2 1 1 1 1 2
1121919 5 1 3 1 2 1 2 1 1 2
1228311 1 1 1 1 1 1 3 1 1 2
1110102 10 3 6 2 3 5 4 10 2 4
846423 10 6 3 6 4 10 7 8 4 4
1280258 4 1 1 1 2 1 1 2 1 2
824249 1 1 1 1 2 1 3 1 1 2
1170420 1 6 8 10 8 10 5 7 1 4
1056784 3 1 1 1 2 1 2 1 1 2
1105257 3 7 7 4 4 9 4 8 1 4
1158157 5 1 1 1 2 2 2 1 1 2
1297327 5 1 1 1 2 1 1 1 1 2
1330439 4 7 8 3 4 10 9 1 1 4
1084584 5 4 4 9 2 10 5 6 1 4
1043999 1 1 1 1 2 3 3 1 1 2
1183911 2 1 1 1 2 1 1 1 1 2
1189286 10 10 8 6 4 5 8 10 1 4
558538 4 1 3 3 2 1 1 1 1 2
1212422 3 1 1 1 2 1 3 1 1 2
763235 3 1 1 1 2 1 2 1 2 2
616240 5 3 4 3 4 5 4 7 1 2
1169049 7 3 4 4 3 3 3 2 7 4
1177512 1 1 1 1 10 1 1 1 1 2
1257470 10 6 5 8 5 10 8 6 1 4
1070935 1 1 3 1 2 1 1 1 1 2
1017122 8 10 10 8 7 10 9 7 1 4
324382 1 1 1 1 2 1 2 1 1 2
1223282 1 1 1 1 2 1 2 1 1 2
563649 8 8 8 1 2 ? 6 10 1 4
1223003 5 3 3 1 2 1 2 1 1 2
1324572 5 1 1 1 2 1 2 2 1 2
1116715 5 1 1 1 3 2 2 2 1 2
1106095 4 1 1 3 2 1 3 1 1 2
756136 1 1 1 1 2 1 2 1 1 2
1147699 3 5 7 8 8 9 7 10 7 4
740492 1 1 1 1 2 1 3 1 1 2
1328755 3 1 1 1 2 1 2 1 1 2
1258549 9 10 10 10 10 10 10 10 1 4
1202253 5 1 1 1 2 1 1 1 1 2
1294413 1 1 1 1 2 1 1 1 1 2
1116192 1 1 1 1 2 1 2 1 1 2
1204242 1 1 1 1 2 1 1 1 1 2
1041801 5 3 3 3 2 3 4 4 1 4
760239 10 4 6 4 5 10 7 1 1 4
1286943 8 10 10 10 7 5 4 8 7 4
1231387 6 8 7 5 6 8 8 9 2 4
1319609 3 1 1 2 3 4 1 1 1 2
1165926 9 6 9 2 10 6 2 9 10 4
1275807 4 2 4 3 2 2 2 1 1 2
1199983 1 1 1 1 2 1 3 1 1 2
1199731 3 1 1 1 2 1 1 1 1 2
667204 7 8 7 6 4 3 8 8 4 4
1219525 8 10 10 10 5 10 8 10 6 4
1099510 10 4 3 1 3 3 6 5 2 4
1115282 5 3 5 5 3 3 4 10 1 4
809912 10 3 3 1 2 10 7 6 1 4
1296263 4 1 1 1 2 1 1 1 1 2
1103722 1 1 1 1 2 1 2 1 2 2
1321348 2 1 1 1 2 1 2 1 1 2
1142706 5 10 10 10 6 10 6 5 2 4
1072179 10 7 7 3 8 5 7 4 3 4
1197527 5 1 1 1 2 1 2 1 1 2
888523 4 4 4 2 2 3 2 1 1 2
1241559 10 8 8 2 8 10 4 8 10 4
764974 5 1 1 1 2 1 3 1 2 2
636375 5 1 1 1 2 1 1 1 1 2
1206695 1 5 8 6 5 8 7 10 1 4
1242364 8 10 10 8 6 9 3 10 10 4
1192325 5 5 5 6 3 10 3 1 1 4
167528 4 1 1 1 2 1 3 6 1 2
1240603 2 1 1 1 1 1 1 1 1 2
1147748 5 10 6 1 10 4 4 10 10 4
1155967 5 1 2 10 4 5 2 1 1 2
850831 2 7 10 10 7 10 4 9 4 4
1100524 6 10 10 2 8 10 7 3 3 4
1212232 5 1 1 1 2 1 2 1 1 2
1226012 4 1 1 3 1 5 2 1 1 4
1183240 4 1 2 1 2 1 2 1 1 2
432809 3 1 3 1 2 ? 2 1 1 2
1227210 10 5 5 6 3 10 7 9 2 4
1173509 4 5 5 10 4 10 7 5 8 4
1333877 5 4 5 1 8 1 3 6 1 2
857774 4 1 1 1 3 1 2 2 1 2
560680 1 1 1 1 2 1 1 1 1 2
1158405 1 2 3 1 2 1 2 1 1 2
877943 3 10 3 10 6 10 5 1 4 4
1206841 10 5 6 10 6 10 7 7 10 4
1111249 10 6 6 3 4 5 3 6 1 4
1212422 4 1 1 1 2 1 3 1 1 2
1148873 3 6 6 6 5 10 6 8 3 4
1080233 7 6 6 3 2 10 7 1 1 4
1238915 5 1 2 1 2 1 3 1 1 2
1115762 3 1 1 1 2 1 1 1 1 2
1253505 2 3 1 1 5 1 1 1 1 2
1073960 10 10 10 10 6 10 8 1 5 4
1236043 3 3 2 1 3 1 3 6 1 2
1118039 5 3 4 1 8 10 4 9 1 4
1113483 5 2 3 1 6 10 5 1 1 4
486662 2 1 1 2 2 1 3 1 1 2
1222464 6 10 10 10 4 10 7 10 1 4
1230994 4 5 5 8 6 10 10 7 1 4
353098 4 1 1 2 2 1 1 1 1 2
1132347 1 1 4 1 2 1 2 1 1 2
476903 10 5 7 3 3 7 3 3 8 4
1002945 5 4 4 5 7 10 3 2 1 2
493452 4 1 2 1 2 1 2 1 1 2
466906 1 1 1 1 2 1 1 1 1 2
1254538 8 10 10 10 6 10 10 10 1 4
1268952 10 10 7 8 7 1 10 10 3 4
685977 5 3 4 1 4 1 3 1 1 2
529329 10 10 10 10 10 10 4 10 10 4
1165297 2 1 1 2 2 1 1 1 1 2
734111 1 1 1 1 2 2 1 1 1 2
412300 10 4 5 4 3 5 7 3 1 4
1287775 5 1 1 2 2 2 3 1 1 2
1123061 6 10 2 8 10 2 7 8 10 4
1333063 5 1 3 1 2 1 3 1 1 2
1016634 2 3 1 1 2 1 2 1 1 2
1272039 1 1 1 1 2 1 2 1 1 2
1102573 5 6 5 6 10 1 3 1 1 4
1266154 8 7 8 2 4 2 5 10 1 4
1018099 1 1 1 1 2 10 3 1 1 2
1350319 5 7 4 1 6 1 7 10 3 4
1057013 8 4 5 1 2 ? 7 3 1 4
1238777 6 1 1 3 2 1 1 1 1 2
1190485 1 1 1 1 2 1 1 1 1 2
673637 3 1 1 1 2 5 5 1 1 2
1002025 1 1 1 3 1 3 1 1 1 2
1369821 10 10 10 10 5 10 10 10 7 4
1174057 1 1 2 2 2 1 3 1 1 2
1174841 5 3 1 1 2 1 1 1 1 2
1168736 10 10 10 10 10 1 8 8 8 4
770066 5 2 2 2 2 1 2 2 1 2
1114570 2 1 1 1 2 1 2 2 1 2
1171710 6 5 4 4 3 9 7 8 3 4
1334667 1 1 1 1 2 1 1 1 1 2
1214966 9 7 7 5 5 10 7 8 3 4
1054593 10 5 5 3 6 7 7 10 1 4
1205138 5 8 8 8 5 10 7 8 1 4
452264 1 1 1 1 2 1 2 1 1 2
314428 7 9 4 10 10 3 5 3 3 4
1105524 1 1 1 1 2 1 2 1 1 2
1143978 4 1 1 2 2 1 2 1 1 2
1116116 9 10 10 1 10 8 3 3 1 4
1117152 4 1 1 1 2 1 3 1 1 2
1048672 4 1 1 1 2 1 2 1 1 2
1258556 5 3 6 1 2 1 1 1 1 2
1173514 1 1 1 1 4 3 1 1 1 2
1042252 3 1 1 1 2 1 2 1 1 2
428598 1 1 3 1 1 1 2 1 1 2
1320077 1 1 1 1 1 1 2 1 1 2
1116132 6 3 4 1 5 2 3 9 1 4
1221863 10 10 10 10 7 10 7 10 4 4
1070935 3 1 1 1 1 1 2 1 1 2
1106829 7 8 7 2 4 8 3 8 2 4
897172 2 1 1 1 2 1 2 1 1 2
1345452 1 1 3 1 2 1 2 1 1 2
183936 3 1 1 1 2 1 2 1 1 2
625201 8 2 1 1 5 1 1 1 1 2
1211594 3 1 1 1 1 1 2 1 1 2
1213383 5 1 1 4 2 1 3 1 1 2
1299924 5 1 1 1 2 1 2 1 1 2
474162 8 7 8 5 5 10 9 10 1 4
1336798 3 1 1 1 2 1 2 1 1 2
1238021 1 1 1 1 2 1 2 1 1 2
1298416 10 6 6 2 4 10 9 7 1 4
1239420 1 1 1 1 2 1 1 1 1 2
752904 10 1 1 1 2 10 5 4 1 4
654546 1 1 1 1 2 1 1 1 8 2
1044572 8 7 5 10 7 9 5 5 4 4
636437 1 1 1 1 2 1 1 1 1 2
560680 3 1 2 1 2 1 2 1 1 2
760001 8 10 3 2 6 4 3 10 1 4
1321931 5 1 1 1 2 1 2 1 1 2
555977 5 6 6 8 6 10 4 10 4 4
1276091 1 3 1 1 2 1 2 2 1 2
1293439 3 2 2 3 2 1 1 1 1 2
1182404 3 1 1 1 2 1 2 1 1 2
1347943 5 2 2 2 2 1 1 1 2 2
1347749 1 1 1 1 2 1 1 1 1 2
803531 5 10 10 10 5 2 8 5 1 4
1100524 6 10 10 2 8 10 7 3 3 4
1257648 4 3 3 1 2 1 3 3 1 2
1061990 1 1 3 2 2 1 3 1 1 2
1268766 1 1 1 1 2 1 1 1 1 2
1253917 4 1 1 2 2 1 2 1 1 2
1330361 5 1 1 1 2 1 2 1 1 2
1211202 7 5 10 10 10 10 4 10 3 4
1217264 1 1 1 1 2 1 3 1 1 2
822829 8 10 10 10 6 10 10 10 10 4
1238464 1 1 1 1 1 ? 2 1 1 2
1325159 3 1 1 1 2 1 3 1 1 2
63375 9 1 2 6 4 10 7 7 2 4
1022257 2 1 1 1 2 1 1 1 1 2
1157734 4 1 1 1 2 1 3 1 1 2
1239347 8 7 8 5 10 10 7 2 1 4
871549 5 1 2 1 2 1 2 1 1 2
1116192 5 1 2 1 2 1 3 1 1 2
867392 4 2 2 1 2 1 2 1 1 2
873549 10 3 5 4 3 7 3 5 3 4
1208301 1 2 3 1 2 1 3 1 1 2
1197993 5 6 7 8 8 10 3 10 3 4
1299596 2 1 1 1 2 1 1 1 1 2
1219406 5 1 1 1 1 1 3 1 1 2
606722 5 5 7 8 6 10 7 4 1 4
1255384 3 2 2 3 2 3 3 1 1 2
1277792 5 1 1 3 2 1 1 1 1 2
1017023 6 3 3 5 3 10 3 5 3 2
1183596 3 1 3 1 3 4 1 1 1 2
841769 2 1 1 1 2 1 1 1 1 2
1302428 5 3 2 4 2 1 1 1 1 2
1315807 5 10 10 10 10 2 10 10 10 4
1311108 1 1 1 3 2 1 1 1 1 2
1182410 3 1 1 1 2 1 1 1 1 2
1290203 3 1 1 1 2 1 2 1 1 2
640712 1 1 1 1 2 1 2 1 1 2
1241679 9 8 8 5 6 2 4 10 4 4
1071084 3 3 2 2 3 1 1 2 3 2
798429 1 1 1 1 2 1 3 1 1 2
128059 1 1 1 1 2 5 5 1 1 2
486283 3 1 1 1 2 1 3 1 1 2
1339781 4 1 1 1 2 1 3 1 1 2
1074610 2 1 1 2 2 1 3 1 1 2
390840 8 4 7 1 3 10 3 9 2 4
1176881 7 5 3 7 4 10 7 5 5 4
1315506 4 8 6 3 4 10 7 1 1 4
1080185 10 10 10 8 6 1 8 9 1 4
342245 1 1 3 1 2 1 1 1 1 2
1324681 4 1 1 1 2 1 2 1 1 2
869828 1 1 1 1 1 1 3 1 1 2
1058849 5 1 1 1 2 1 1 1 1 2
1113906 9 5 5 2 2 2 5 1 1 4
1196263 4 1 1 1 2 1 1 1 1 2
1240337 5 2 2 2 2 2 3 2 2 2
1108449 5 3 3 4 2 4 3 4 1 4
1288608 3 1 1 1 2 1 2 1 1 2
1223426 1 1 1 1 2 1 3 1 1 2
1298360 1 1 1 1 2 1 1 1 1 2
769612 3 1 1 2 2 1 1 1 1 2
333093 1 1 1 1 3 1 1 1 1 2
434518 3 1 1 1 2 1 2 1 1 2
1084139 6 3 2 1 3 4 4 1 1 4
1158247 1 1 1 1 1 1 1 1 1 2
1236837 2 3 2 2 2 2 3 1 1 2
521441 5 1 1 2 2 1 2 1 1 2
1241232 3 1 4 1 2 ? 3 1 1 2
684955 2 1 1 1 3 1 2 1 1 2
1206089 2 1 1 1 1 1 3 1 1 2
1218860 1 1 1 1 1 1 3 1 1 2
1105524 4 1 1 1 2 1 1 1 1 2
1173235 3 3 2 1 2 3 3 1 1 2
1354840 5 3 2 1 3 1 1 1 1 2
1187805 8 8 7 4 10 10 7 8 7 4
1352663 5 4 6 8 4 1 8 10 1 4
1238410 2 3 1 1 3 1 1 1 1 2
142932 7 6 10 5 3 10 9 10 2 4
411453 1 1 1 1 2 1 1 1 1 2
1261751 5 1 1 1 2 1 2 2 1 2
1200952 5 8 7 7 10 10 5 7 1 4
1174131 10 10 10 2 10 10 5 3 3 4
1239232 3 3 2 6 3 3 3 5 1 2
543558 6 1 3 1 4 5 5 10 1 4
1114570 5 3 3 2 3 1 3 1 1 2
1350423 5 10 10 8 5 5 7 10 1 4
1079304 2 1 1 1 2 1 2 1 1 2
1108370 9 5 8 1 2 3 2 1 5 4
183913 1 2 2 1 2 1 1 1 1 2
1049837 1 1 1 1 2 1 1 1 1 2
832567 4 2 3 5 3 8 7 6 1 4
1276091 5 1 1 3 4 1 3 2 1 2
1031608 2 1 1 1 1 1 2 1 1 2
866325 8 10 5 3 8 4 4 10 3 4
1212251 1 1 1 1 2 1 3 1 1 2
1165790 5 1 1 1 2 1 3 1 1 2
1199219 1 1 1 2 1 1 1 1 1 2
1246562 10 2 2 1 2 6 1 1 2 4
1216947 1 1 1 1 2 1 3 1 1 2
1296593 5 2 1 1 2 1 1 1 1 2
1182404 3 1 1 1 2 1 1 1 1 2
1171710 1 1 1 1 2 1 2 3 1 2
1243256 10 4 3 2 3 10 5 3 2 4
95719 6 10 10 10 8 10 7 10 7 4
1313982 4 3 1 1 2 1 4 8 1 2
1220330 1 1 1 1 2 1 3 1 1 2
1344449 1 1 1 1 1 1 2 1 1 2
1224565 6 1 1 1 2 1 3 1 1 2
1228152 8 9 9 5 3 5 7 7 1 4
1180194 5 10 8 10 8 10 3 6 3 4
428903 7 2 4 1 3 4 3 3 1 4
1204558 4 1 1 1 2 1 2 1 1 2
640744 10 10 10 7 9 10 7 10 10 4
1190394 4 1 1 1 2 3 1 1 1 2
1294562 10 8 10 1 3 10 5 1 1 4
1297522 2 1 1 1 2 1 1 1 1 2
508234 7 4 5 10 2 10 3 8 2 4
1343068 8 4 4 1 6 10 2 5 2 4
1083817 3 1 1 1 2 1 2 1 1 2
1193683 1 1 2 1 3 ? 1 1 1 2
1326892 3 1 1 1 2 1 2 1 1 2
878358 5 7 10 6 5 10 7 5 1 4
603148 4 1 1 1 2 1 1 1 1 2
830690 5 2 2 2 3 1 1 3 1 2
1184840 1 1 3 1 2 ? 2 1 1 2
1197080 4 1 1 1 2 1 3 2 1 2
1311033 1 2 2 1 2 1 1 1 1 2
1050718 6 1 1 1 2 1 3 1 1 2
1222936 8 7 8 7 5 5 5 10 2 4
1339781 1 1 1 1 2 1 2 1 1 2
324427 10 8 8 2 3 4 8 7 8 4
733639 3 1 1 1 2 1 3 1 1 2
1136142 2 1 1 1 3 1 2 1 1 2
1225382 6 2 3 1 2 1 1 1 1 2
1202125 4 1 1 1 2 1 3 1 1 2
1171795 1 3 1 2 2 2 5 3 2 2
636130 1 1 1 1 2 1 3 1 1 2
1177399 8 3 5 4 5 10 1 6 2 4
1160476 2 1 1 1 2 1 3 1 1 2
1091262 2 5 3 3 6 7 7 5 1 4
1238633 10 10 10 6 8 4 8 5 1 4
730881 7 6 3 2 5 10 7 4 6 4
1218982 4 1 1 1 2 1 1 1 1 2
61634 5 4 3 1 2 ? 2 3 1 2
827627 2 1 1 1 2 1 1 1 1 2
1270479 5 1 3 3 2 2 2 3 1 2
1041043 4 1 3 1 2 1 2 1 1 2
831268 1 1 1 1 1 1 1 3 1 2
1168359 8 2 3 1 6 3 7 1 1 4
1193091 1 2 2 1 2 1 2 1 1 2
1059552 1 1 1 1 2 1 3 1 1 2
1293966 4 1 1 1 2 1 1 1 1 2
1260659 3 1 4 1 2 1 1 1 1 2
1081791 6 2 1 1 1 1 7 1 1 2
690557 5 1 1 1 2 1 2 1 1 2
654546 1 1 1 3 2 1 1 1 1 2
1116116 9 10 10 1 10 8 3 3 1 4
160296 5 8 8 10 5 10 8 10 3 4
1116998 10 4 2 1 3 2 4 3 10 4
1173347 1 1 1 1 2 5 1 1 1 2
1131411 1 1 1 2 2 1 2 1 1 2
1190546 2 1 1 1 2 5 1 1 1 2
1170945 3 1 1 1 1 1 2 1 1 2
534555 1 1 1 1 2 1 1 1 1 2
1171578 3 1 1 1 2 1 1 1 1 2
561477 1 1 1 1 2 1 3 1 1 2
1352848 3 10 7 8 5 8 7 4 1 4
1334071 4 1 1 1 2 3 2 1 1 2
1143978 5 2 1 1 2 1 3 1 1 2
369565 4 1 1 1 3 1 1 1 1 2
1213375 8 4 4 5 4 7 7 8 2 2
1110503 5 5 5 8 10 8 7 3 7 4
1200892 8 6 5 4 3 10 6 1 1 4
1365328 1 1 2 1 2 1 2 1 1 2
714039 3 1 1 1 2 1 1 1 1 2
1182404 1 1 1 1 1 1 1 1 1 2
653777 8 3 4 9 3 10 3 3 1 4
527337 4 1 1 1 2 1 1 1 1 2
806423 8 5 5 5 2 10 4 3 1 4
1276091 3 1 1 3 1 1 3 1 1 2
1306339 4 4 2 1 2 5 2 1 2 2
1210963 10 10 10 8 6 8 7 10 1 4
1285722 4 1 1 3 2 1 1 1 1 2
1368882 2 1 1 1 2 1 1 1 1 2
1177027 3 1 1 1 2 1 3 1 1 2
1173216 10 10 10 3 10 8 8 1 1 4
320675 3 3 5 2 3 10 7 1 1 4
1190386 4 6 6 5 7 6 7 7 3 4
1299596 6 6 6 5 4 10 7 6 2 4
1061990 4 1 1 1 2 1 2 1 1 2
888169 3 2 2 1 4 3 2 1 1 2
1158247 1 1 1 1 2 1 2 1 1 2
320675 3 3 5 2 3 10 7 1 1 4
1276091 2 1 1 1 2 1 2 1 1 2
1173681 3 2 1 1 2 2 3 1 1 2
1149548 1 1 1 1 2 1 1 1 1 2
1353092 3 2 1 2 2 1 3 1 1 2
1214092 1 1 1 1 2 1 1 1 1 2
1201936 5 10 10 3 8 1 5 10 3 4
1229929 1 1 1 1 2 1 2 1 1 2
1183983 9 5 5 4 4 5 4 3 3 4
1234554 1 1 1 1 2 1 2 1 1 2
1321264 5 2 2 2 1 1 2 1 1 2
1131294 1 1 2 1 2 2 4 2 1 2
1156272 1 1 1 1 2 1 3 1 1 2
1174057 4 2 1 1 2 2 3 1 1 2
1289391 1 1 1 1 2 1 3 1 1 2
1198641 3 1 1 1 2 1 3 1 1 2
1113061 5 1 1 1 2 1 3 1 1 2
1198128 10 8 10 10 6 1 3 1 10 4
797327 6 5 5 8 4 10 3 4 1 4
242970 5 7 7 1 5 8 3 4 1 2
1331412 5 7 10 10 5 10 10 10 1 4
1170419 10 10 10 8 2 10 4 1 1 4
1176187 3 1 1 1 2 1 3 1 1 2
1152331 4 1 1 1 2 1 3 1 1 2
846832 3 4 5 3 7 3 4 6 1 2
1227244 1 1 1 1 2 1 2 1 1 2
1205579 8 7 6 4 4 10 5 1 1 4
1033078 4 2 1 1 2 1 2 1 1 2
456282 1 1 1 1 2 1 3 1 1 2
1321942 5 1 1 1 2 1 3 1 1 2
1223543 1 2 1 3 2 1 1 2 1 2
566509 5 1 1 1 2 1 1 1 1 2
1350568 4 1 1 1 2 1 2 1 1 2
1073836 5 1 1 1 2 1 2 1 1 2
1217051 5 1 1 1 2 1 3 1 1 2
1110524 10 5 5 6 8 8 7 1 1 4
sample_code_number uniformity_of_cell_shape uniformity_of_cell_size clump_thickness bare_nuclei cell_size normal_nucleoli clump_cohesiveness nuclear_chromatin mitoses class
1056171 2 1 1 1 2 1 2 1 1
1179818 2 1 1 1 2 1 3 1 1
1334015 7 8 8 7 3 10 7 2 3
1287282 3 1 1 1 2 1 1 1 1
1265899 4 1 1 1 2 1 3 1 1
1174428 5 3 5 1 8 10 5 3 1
1133136 3 1 1 1 2 3 3 1 1
1218741 10 10 9 3 7 5 3 5 1
1166630 7 5 6 10 5 10 7 9 4
1198641 10 10 6 3 3 10 4 3 2
677910 5 2 2 4 2 4 1 1 1
897471 4 8 6 4 3 4 10 6 1
1126417 10 6 4 1 3 4 3 2 3
1054590 7 3 2 10 5 10 5 4 4
1203096 1 1 1 1 1 1 3 1 1
706426 5 5 5 2 5 10 4 3 1
836433 5 1 1 3 2 1 1 1 1
1124651 1 3 3 2 2 1 7 2 1
1185609 3 4 5 2 6 8 4 1 1
274137 8 8 9 4 5 10 7 8 1
566346 3 1 1 1 2 1 2 3 1
1016277 6 8 8 1 3 4 3 7 1
1301945 5 1 1 1 1 1 1 1 1
1035283 1 1 1 1 1 1 3 1 1
1257815 5 1 3 1 2 1 2 1 1
1226612 7 5 6 3 3 8 7 4 1
859350 8 10 10 7 10 10 7 3 8
859164 5 3 3 1 3 3 3 3 3
807657 6 1 3 2 2 1 1 1 1
1257608 6 1 1 1 1 1 1 1 1
1227481 10 5 7 4 4 10 8 9 1
466906 1 1 1 1 2 1 1 1 1
1188472 1 1 1 1 1 1 3 1 1
736150 10 4 3 10 3 10 7 1 2
654244 1 1 1 1 1 1 2 1 1
1050670 10 7 7 6 4 10 4 1 2
1328331 1 1 1 1 2 1 3 1 1
1211265 3 10 8 7 6 9 9 3 8
493452 1 1 3 1 2 1 1 1 1
1293439 6 9 7 5 5 8 4 2 1
855524 1 1 1 1 2 1 2 1 1
1298484 10 3 4 5 3 10 4 1 1
1240603 3 1 1 1 1 1 1 1 1
1167471 4 1 2 1 2 1 3 1 1
1320141 5 1 1 1 2 1 2 1 1
1206314 1 2 3 1 2 1 1 1 1
1043068 3 1 1 1 2 1 2 1 1
1239967 1 1 1 1 2 1 2 1 1
1156948 3 1 1 2 2 1 1 1 1
1222047 10 10 10 10 3 10 10 6 1
1174009 5 1 1 2 1 1 2 1 1
385103 1 1 1 1 2 1 3 1 1
837082 2 1 1 1 2 1 3 1 1
1257200 10 10 10 7 10 10 8 2 1
1344121 8 10 4 4 8 10 8 2 1
822829 7 6 4 8 10 10 9 5 3
1238186 4 1 1 1 2 1 2 1 1
1348851 3 1 1 1 2 1 3 1 1
1196295 9 9 10 3 6 10 7 10 6
1223306 3 1 1 1 2 4 1 1 1
1164066 1 1 1 1 2 1 3 1 1
1171845 8 6 4 3 5 9 3 1 1
1311875 5 1 2 1 2 1 1 1 1
145447 8 4 4 1 2 9 3 3 1
1320077 1 1 1 1 1 1 1 1 1
1156017 3 1 1 1 2 1 2 1 1
1049815 4 1 1 1 2 1 3 1 1
263538 5 10 10 6 10 10 10 6 5
877291 6 10 10 10 10 10 8 10 10
1181685 1 1 2 1 2 1 2 1 1
695091 1 1 1 1 2 1 2 1 1
1182404 5 1 4 1 2 1 3 2 1
1185610 1 1 1 1 3 2 2 1 1
1218860 1 1 1 1 1 1 3 1 1
785208 5 4 6 6 4 10 4 3 1
1148278 3 3 6 4 5 8 4 4 1
1187457 3 1 1 3 8 1 5 8 1
785615 8 6 7 3 3 10 3 4 2
1299161 4 8 7 10 4 10 7 5 1
1180831 3 1 1 1 3 1 2 1 1
1121732 1 1 1 1 2 1 3 2 1
1217717 5 1 1 6 3 1 1 1 1
1057067 1 1 1 1 1 ? 1 1 1
897471 4 8 8 5 4 5 10 4 1
1277629 5 1 1 1 2 1 2 2 1
691628 8 6 4 10 10 1 3 5 1
1176406 1 1 1 1 2 1 2 1 1
1066373 3 2 1 1 1 1 2 1 1
1189266 7 2 4 1 6 10 5 4 3
1200772 1 1 1 1 2 1 2 1 1
1241035 7 8 3 7 4 5 7 8 2
1120559 8 3 8 3 4 9 8 9 8
1268804 3 1 1 1 2 5 1 1 1
1172152 10 3 3 10 2 10 7 3 3
1371920 5 1 1 1 2 1 3 2 1
1183516 3 1 1 1 2 1 1 1 1
8233704 4 1 1 1 1 1 2 1 1
1167439 2 3 4 4 2 5 2 5 1
832226 3 4 4 10 5 1 3 3 1
1168278 3 1 1 1 2 1 2 1 1
1119189 5 8 9 4 3 10 7 1 1
1272166 5 1 1 1 2 1 1 1 1
1197510 5 1 1 1 2 ? 3 1 1
1033078 2 1 1 1 2 1 1 1 5
1268313 5 1 1 3 2 1 1 1 1
1066979 5 1 1 1 2 1 2 1 1
1287971 3 1 1 1 2 1 2 1 1
1140597 7 1 2 3 2 1 2 1 1
1269574 4 1 1 1 2 1 1 1 1
659642 10 8 4 4 4 10 3 10 4
1318671 3 1 1 1 2 1 2 1 1
1196915 10 7 7 4 5 10 5 7 2
1213273 2 1 1 1 2 1 1 1 1
1294261 4 10 8 5 4 1 10 1 1
1178580 5 1 3 1 2 1 2 1 1
1257366 3 1 1 1 2 1 1 1 1
1036172 2 1 1 1 2 1 2 1 1
1277018 2 1 1 1 2 1 3 1 1
1175937 5 4 6 7 9 7 8 10 1
814265 2 1 1 1 2 1 1 1 1
1076352 3 6 4 10 3 3 3 4 1
1173347 8 3 3 1 2 2 3 2 1
635844 8 4 10 5 4 4 7 10 1
1018561 2 1 2 1 2 1 3 1 1
1015425 3 1 1 1 2 2 3 1 1
352431 10 5 10 3 5 8 7 8 3
527363 8 10 10 10 8 10 10 7 3
1304595 3 1 1 1 1 1 2 1 1
1075123 3 1 2 1 2 1 2 1 1
255644 10 5 8 10 3 10 5 1 3
1333495 3 1 1 1 2 1 2 1 1
1224329 1 1 1 2 2 1 3 1 1
1331405 4 1 1 1 2 1 3 2 1
606140 1 1 1 1 2 ? 2 1 1
1181567 1 1 1 1 1 1 1 1 1
1201834 2 1 1 1 2 1 3 1 1
1231706 8 4 6 3 3 1 4 3 1
1285531 1 1 1 1 2 1 3 1 1
1096352 6 3 3 3 3 2 6 1 1
303213 10 4 4 10 6 10 5 5 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment