{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# DNA Classification\n", "> In this project, it will show the Machine Learning Model for classifying DNA sequence. K-Nearest Neighborhood and Support Vector Machine and several algorithm for classification will be used. The original data is from UCI Machine Learning Repository.\n", "\n", "- toc: true \n", "- badges: true\n", "- comments: true\n", "- author: Chanseok Kang\n", "- categories: [Python, Machine_Learning]\n", "- image: images/dna_sequence.jpg" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Required Packages" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import sys\n", "import numpy as np\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import pandas as pd\n", "import sklearn\n", "\n", "plt.rcParams['figure.figsize'] = (8, 8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Version check" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python: 3.7.6 (default, Jan 8 2020, 20:23:39) [MSC v.1916 64 bit (AMD64)]\n", "Numpy: 1.18.1\n", "Pandas: 1.0.1\n" ] } ], "source": [ "print('Python: {}'.format(sys.version))\n", "print('Numpy: {}'.format(np.__version__))\n", "print('Pandas: {}'.format(pd.__version__))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prepare dataset\n", "The original data is from [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets/Molecular+Biology+%28Promoter+Gene+Sequences%29)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | Class | \n", "id | \n", "Sequence | \n", "
---|---|---|---|
0 | \n", "+ | \n", "S10 | \n", "\\t\\ttactagcaatacgcttgcgttcggtggttaagtatgtataat... | \n", "
1 | \n", "+ | \n", "AMPC | \n", "\\t\\ttgctatcctgacagttgtcacgctgattggtgtcgttacaat... | \n", "
2 | \n", "+ | \n", "AROH | \n", "\\t\\tgtactagagaactagtgcattagcttatttttttgttatcat... | \n", "
3 | \n", "+ | \n", "DEOP2 | \n", "\\taattgtgatgtgtatcgaagtgtgttgcggagtagatgttagaa... | \n", "
4 | \n", "+ | \n", "LEU1_TRNA | \n", "\\ttcgataattaactattgacgaaaagctgaaaaccactagaatgc... | \n", "
\n", " | 0 | \n", "1 | \n", "2 | \n", "3 | \n", "4 | \n", "5 | \n", "6 | \n", "7 | \n", "8 | \n", "9 | \n", "... | \n", "48 | \n", "49 | \n", "50 | \n", "51 | \n", "52 | \n", "53 | \n", "54 | \n", "55 | \n", "56 | \n", "57 | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "t | \n", "a | \n", "c | \n", "t | \n", "a | \n", "g | \n", "c | \n", "a | \n", "a | \n", "t | \n", "... | \n", "g | \n", "c | \n", "t | \n", "t | \n", "g | \n", "t | \n", "c | \n", "g | \n", "t | \n", "+ | \n", "
1 | \n", "t | \n", "g | \n", "c | \n", "t | \n", "a | \n", "t | \n", "c | \n", "c | \n", "t | \n", "g | \n", "... | \n", "c | \n", "a | \n", "t | \n", "c | \n", "g | \n", "c | \n", "c | \n", "a | \n", "a | \n", "+ | \n", "
2 | \n", "g | \n", "t | \n", "a | \n", "c | \n", "t | \n", "a | \n", "g | \n", "a | \n", "g | \n", "a | \n", "... | \n", "c | \n", "a | \n", "c | \n", "c | \n", "c | \n", "g | \n", "g | \n", "c | \n", "g | \n", "+ | \n", "
3 | \n", "a | \n", "a | \n", "t | \n", "t | \n", "g | \n", "t | \n", "g | \n", "a | \n", "t | \n", "g | \n", "... | \n", "a | \n", "a | \n", "c | \n", "a | \n", "a | \n", "a | \n", "c | \n", "t | \n", "c | \n", "+ | \n", "
4 | \n", "t | \n", "c | \n", "g | \n", "a | \n", "t | \n", "a | \n", "a | \n", "t | \n", "t | \n", "a | \n", "... | \n", "c | \n", "c | \n", "g | \n", "t | \n", "g | \n", "g | \n", "t | \n", "a | \n", "g | \n", "+ | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
101 | \n", "c | \n", "c | \n", "t | \n", "c | \n", "a | \n", "a | \n", "t | \n", "g | \n", "g | \n", "c | \n", "... | \n", "g | \n", "a | \n", "a | \n", "c | \n", "t | \n", "a | \n", "t | \n", "a | \n", "t | \n", "- | \n", "
102 | \n", "g | \n", "t | \n", "a | \n", "t | \n", "t | \n", "c | \n", "t | \n", "c | \n", "a | \n", "a | \n", "... | \n", "t | \n", "c | \n", "a | \n", "a | \n", "c | \n", "a | \n", "t | \n", "t | \n", "g | \n", "- | \n", "
103 | \n", "c | \n", "g | \n", "c | \n", "g | \n", "a | \n", "c | \n", "t | \n", "a | \n", "c | \n", "g | \n", "... | \n", "a | \n", "a | \n", "g | \n", "g | \n", "c | \n", "t | \n", "t | \n", "c | \n", "c | \n", "- | \n", "
104 | \n", "c | \n", "t | \n", "c | \n", "g | \n", "t | \n", "c | \n", "c | \n", "t | \n", "c | \n", "a | \n", "... | \n", "a | \n", "g | \n", "g | \n", "a | \n", "g | \n", "g | \n", "a | \n", "a | \n", "c | \n", "- | \n", "
105 | \n", "t | \n", "a | \n", "a | \n", "c | \n", "a | \n", "t | \n", "t | \n", "a | \n", "a | \n", "t | \n", "... | \n", "t | \n", "c | \n", "a | \n", "a | \n", "g | \n", "a | \n", "a | \n", "c | \n", "t | \n", "- | \n", "
106 rows × 58 columns
\n", "\n", " | 0 | \n", "1 | \n", "2 | \n", "3 | \n", "4 | \n", "5 | \n", "6 | \n", "7 | \n", "8 | \n", "9 | \n", "... | \n", "48 | \n", "49 | \n", "50 | \n", "51 | \n", "52 | \n", "53 | \n", "54 | \n", "55 | \n", "56 | \n", "Class | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "t | \n", "a | \n", "c | \n", "t | \n", "a | \n", "g | \n", "c | \n", "a | \n", "a | \n", "t | \n", "... | \n", "g | \n", "c | \n", "t | \n", "t | \n", "g | \n", "t | \n", "c | \n", "g | \n", "t | \n", "+ | \n", "
1 | \n", "t | \n", "g | \n", "c | \n", "t | \n", "a | \n", "t | \n", "c | \n", "c | \n", "t | \n", "g | \n", "... | \n", "c | \n", "a | \n", "t | \n", "c | \n", "g | \n", "c | \n", "c | \n", "a | \n", "a | \n", "+ | \n", "
2 | \n", "g | \n", "t | \n", "a | \n", "c | \n", "t | \n", "a | \n", "g | \n", "a | \n", "g | \n", "a | \n", "... | \n", "c | \n", "a | \n", "c | \n", "c | \n", "c | \n", "g | \n", "g | \n", "c | \n", "g | \n", "+ | \n", "
3 | \n", "a | \n", "a | \n", "t | \n", "t | \n", "g | \n", "t | \n", "g | \n", "a | \n", "t | \n", "g | \n", "... | \n", "a | \n", "a | \n", "c | \n", "a | \n", "a | \n", "a | \n", "c | \n", "t | \n", "c | \n", "+ | \n", "
4 | \n", "t | \n", "c | \n", "g | \n", "a | \n", "t | \n", "a | \n", "a | \n", "t | \n", "t | \n", "a | \n", "... | \n", "c | \n", "c | \n", "g | \n", "t | \n", "g | \n", "g | \n", "t | \n", "a | \n", "g | \n", "+ | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
101 | \n", "c | \n", "c | \n", "t | \n", "c | \n", "a | \n", "a | \n", "t | \n", "g | \n", "g | \n", "c | \n", "... | \n", "g | \n", "a | \n", "a | \n", "c | \n", "t | \n", "a | \n", "t | \n", "a | \n", "t | \n", "- | \n", "
102 | \n", "g | \n", "t | \n", "a | \n", "t | \n", "t | \n", "c | \n", "t | \n", "c | \n", "a | \n", "a | \n", "... | \n", "t | \n", "c | \n", "a | \n", "a | \n", "c | \n", "a | \n", "t | \n", "t | \n", "g | \n", "- | \n", "
103 | \n", "c | \n", "g | \n", "c | \n", "g | \n", "a | \n", "c | \n", "t | \n", "a | \n", "c | \n", "g | \n", "... | \n", "a | \n", "a | \n", "g | \n", "g | \n", "c | \n", "t | \n", "t | \n", "c | \n", "c | \n", "- | \n", "
104 | \n", "c | \n", "t | \n", "c | \n", "g | \n", "t | \n", "c | \n", "c | \n", "t | \n", "c | \n", "a | \n", "... | \n", "a | \n", "g | \n", "g | \n", "a | \n", "g | \n", "g | \n", "a | \n", "a | \n", "c | \n", "- | \n", "
105 | \n", "t | \n", "a | \n", "a | \n", "c | \n", "a | \n", "t | \n", "t | \n", "a | \n", "a | \n", "t | \n", "... | \n", "t | \n", "c | \n", "a | \n", "a | \n", "g | \n", "a | \n", "a | \n", "c | \n", "t | \n", "- | \n", "
106 rows × 58 columns
\n", "\n", " | 0 | \n", "1 | \n", "2 | \n", "3 | \n", "4 | \n", "5 | \n", "6 | \n", "7 | \n", "8 | \n", "9 | \n", "... | \n", "48 | \n", "49 | \n", "50 | \n", "51 | \n", "52 | \n", "53 | \n", "54 | \n", "55 | \n", "56 | \n", "Class | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
count | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "... | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "106 | \n", "
unique | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "... | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "4 | \n", "2 | \n", "
top | \n", "t | \n", "a | \n", "a | \n", "c | \n", "a | \n", "a | \n", "a | \n", "a | \n", "a | \n", "a | \n", "... | \n", "c | \n", "c | \n", "c | \n", "t | \n", "t | \n", "c | \n", "c | \n", "c | \n", "t | \n", "+ | \n", "
freq | \n", "38 | \n", "34 | \n", "30 | \n", "30 | \n", "36 | \n", "42 | \n", "38 | \n", "34 | \n", "33 | \n", "36 | \n", "... | \n", "36 | \n", "42 | \n", "31 | \n", "33 | \n", "35 | \n", "32 | \n", "29 | \n", "29 | \n", "34 | \n", "53 | \n", "
4 rows × 58 columns
\n", "\n", " | 0 | \n", "1 | \n", "2 | \n", "3 | \n", "4 | \n", "5 | \n", "6 | \n", "7 | \n", "8 | \n", "9 | \n", "... | \n", "48 | \n", "49 | \n", "50 | \n", "51 | \n", "52 | \n", "53 | \n", "54 | \n", "55 | \n", "56 | \n", "Class | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
t | \n", "38.0 | \n", "26.0 | \n", "27.0 | \n", "26.0 | \n", "22.0 | \n", "24.0 | \n", "30.0 | \n", "32.0 | \n", "32.0 | \n", "28.0 | \n", "... | \n", "21.0 | \n", "22.0 | \n", "23.0 | \n", "33.0 | \n", "35.0 | \n", "30.0 | \n", "23.0 | \n", "29.0 | \n", "34.0 | \n", "NaN | \n", "
c | \n", "27.0 | \n", "22.0 | \n", "21.0 | \n", "30.0 | \n", "19.0 | \n", "18.0 | \n", "21.0 | \n", "20.0 | \n", "22.0 | \n", "22.0 | \n", "... | \n", "36.0 | \n", "42.0 | \n", "31.0 | \n", "32.0 | \n", "21.0 | \n", "32.0 | \n", "29.0 | \n", "29.0 | \n", "17.0 | \n", "NaN | \n", "
a | \n", "26.0 | \n", "34.0 | \n", "30.0 | \n", "22.0 | \n", "36.0 | \n", "42.0 | \n", "38.0 | \n", "34.0 | \n", "33.0 | \n", "36.0 | \n", "... | \n", "23.0 | \n", "24.0 | \n", "28.0 | \n", "27.0 | \n", "25.0 | \n", "22.0 | \n", "26.0 | \n", "24.0 | \n", "27.0 | \n", "NaN | \n", "
g | \n", "15.0 | \n", "24.0 | \n", "28.0 | \n", "28.0 | \n", "29.0 | \n", "22.0 | \n", "17.0 | \n", "20.0 | \n", "19.0 | \n", "20.0 | \n", "... | \n", "26.0 | \n", "18.0 | \n", "24.0 | \n", "14.0 | \n", "25.0 | \n", "22.0 | \n", "28.0 | \n", "24.0 | \n", "28.0 | \n", "NaN | \n", "
+ | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "... | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "53.0 | \n", "
- | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "... | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "53.0 | \n", "
6 rows × 58 columns
\n", "\n", " | 0_a | \n", "0_c | \n", "0_g | \n", "0_t | \n", "1_a | \n", "1_c | \n", "1_g | \n", "1_t | \n", "2_a | \n", "2_c | \n", "... | \n", "55_a | \n", "55_c | \n", "55_g | \n", "55_t | \n", "56_a | \n", "56_c | \n", "56_g | \n", "56_t | \n", "Class_+ | \n", "Class_- | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "
1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "
2 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "... | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "
3 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "
4 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "... | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "
5 rows × 230 columns
\n", "\n", " | 0_a | \n", "0_c | \n", "0_g | \n", "0_t | \n", "1_a | \n", "1_c | \n", "1_g | \n", "1_t | \n", "2_a | \n", "2_c | \n", "... | \n", "54_t | \n", "55_a | \n", "55_c | \n", "55_g | \n", "55_t | \n", "56_a | \n", "56_c | \n", "56_g | \n", "56_t | \n", "Class | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "
1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "
2 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "... | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "
3 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "... | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "
4 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "... | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
101 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "... | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "
102 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "... | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "
103 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "... | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "
104 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "... | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "
105 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "... | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "
106 rows × 229 columns
\n", "