Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Random forest from scratch
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Matt Galloway Homework 3\n",
"## myRForest\n",
"\n",
"\n",
"CSCI 5525: 11/11/16\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#! /usr/bin/env python3\n",
"#%matplotlib inline\n",
"\n",
"#import dependecies\n",
"import sys\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Below we define various modules:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#simple module to load in the data\n",
"def load(filename):\n",
" # read in the data file\n",
" data = np.genfromtxt(filename, delimiter=\",\")\n",
" return data"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#define how to subset the data\n",
"def subset(training, var, split):\n",
" \n",
" subset_1 = [row for row in training if row[var] >= split]\n",
" subset_2 = [row for row in training if row[var] < split]\n",
" \n",
" return (subset_1, subset_2)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#total up each class. t is the y column\n",
"def total(training, t):\n",
" totals = {-1.0: 1, 1.0: 1}\n",
" for row in training:\n",
" y = row[t]\n",
" totals[y] += 1\n",
" return totals"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#if divide by zero, make it equal to zero\n",
"def safe_division(a, b):\n",
" if b == 0:\n",
" return 0\n",
" return a/b"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#define entropy\n",
"def entropy(training, t):\n",
" subject = total(training, t)\n",
" \n",
" entrop = 0\n",
" for i in subject.keys():\n",
" p = safe_division(subject[i], len(training))\n",
" \n",
" if p == 0:\n",
" entrop -= 0\n",
" else:\n",
" entrop -= p*np.log2(p)\n",
"\n",
" return entrop"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#define module to calculate percentiles of columns\n",
"def percentile(training, column):\n",
" percentiles = {10 : 0, 20 : 0, 30 : 0, 40 : 0, 50 : 0, 60 : 0, 70 : 0, 80 : 0, 90 : 0}\n",
" for p in percentiles.keys():\n",
" #calculate the percentile\n",
" per = np.percentile(training[:, column], p, axis = 0)\n",
" percentiles[p] = per\n",
" \n",
" return percentiles"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#how to split the tree?\n",
"def splittree(training, t, m):\n",
" \n",
" #entropy\n",
" entropy_0 = entropy(training, t)\n",
" \n",
" #initialize values\n",
" most_info = 0\n",
" best_split = None\n",
" best_subsets = None\n",
" \n",
" ##number of non-y columns in x\n",
" num_var = len(training[0]) - 3\n",
" \n",
" #randomly choose m\n",
" num_var = np.random.choice(range(num_var), m, replace = False)\n",
" \n",
" #iterate over each variable\n",
" for j in num_var:\n",
" \n",
" #if is categorical variable (0, 1)\n",
" if j == 3:\n",
" (subset1, subset2) = subset(training, j, 1.0)\n",
" \n",
" p = safe_division(len(subset1), len(training))\n",
" \n",
" #calculate info gain: improvement over weight avg. of entrop\n",
" info_gain = entropy_0 - p*entropy(subset1, t) - (1 - p)*entropy(subset2, t)\n",
" \n",
" #if best candidate so far, update \"best\" info\n",
" if info_gain > most_info and (len(subset1) > 0 and len(subset2) > 0):\n",
" #if this is the best splits so far, update best values\n",
" most_info = info_gain\n",
" best_split = (j, 1.0)\n",
" best_subsets = (np.array(subset1), np.array(subset2)) \n",
" \n",
" #if variable is not categorical then...\n",
" else:\n",
" \n",
" #calculate percentiles for each row\n",
" percentiles = percentile(training, j)\n",
" \n",
" #for each percentile split calculate entropy\n",
" for i in percentiles.keys():\n",
" (subset1, subset2) = subset(training, j, percentiles[i])\n",
" \n",
" p = safe_division(len(subset1), len(training))\n",
" \n",
" #calulcate info gain : improvement over weight avg. of entrop\n",
" info_gain = entropy_0 - p*entropy(subset1, t) - (1 - p)*entropy(subset2, t)\n",
" \n",
" #if best candidate so far, update \"best\" info \n",
" if info_gain > most_info and (len(subset1) > 0 and len(subset2) > 0):\n",
" #if this is the best splits so far, update best values\n",
" most_info = info_gain\n",
" best_split = (j, percentiles[i])\n",
" best_subsets = (np.array(subset1), np.array(subset2))\n",
" \n",
" #if most info equal 0, then we arbitrarily split data\n",
" if most_info == 0:\n",
" percentiles = percentile(training, -1)\n",
" best_split = (num_var[-1], percentiles[50])\n",
" (subset1, subset2) = subset(training, num_var[-1], percentiles[50])\n",
" best_subsets = (np.array(subset1), np.array(subset2))\n",
"\n",
" return best_subsets, best_split"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#now we create the 2-level decision tree\n",
"def decisiontree(training, t, m):\n",
" #create first split\n",
" stump = splittree(training, t, m)\n",
" stump_data = stump[0]\n",
" stump_split = stump[1]\n",
" \n",
" #create second split for each branch (if needed)\n",
" branch1 = splittree(stump_data[0], t, m)\n",
" branch2 = splittree(stump_data[1], t, m)\n",
" \n",
" branch1_data = branch1[0]\n",
" branch1_split = branch1[1]\n",
" branch2_data = branch2[0]\n",
" branch2_split = branch2[1]\n",
"\n",
" #tree totals\n",
" total(branch1_data[0], t)\n",
" total(branch1_data[1], t)\n",
" total(branch2_data[0], t)\n",
" total(branch2_data[1], t)\n",
" \n",
" tree_totals = (total(branch1_data[0], t), total(branch1_data[1], t), total(branch2_data[0], t), total(branch2_data[1], t))\n",
" \n",
" #create list of splits\n",
" splits = (stump_split, branch1_split, branch2_split)\n",
" \n",
" return splits, tree_totals"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def classify(data, tree, t):\n",
" \n",
" #assign data for specified tree\n",
" tree_splits = tree[0]\n",
" tree_totals = tree[1]\n",
" \n",
" #designate \"maximum\" as classified class\n",
" classes = [max(tree_totals[0], key = tree_totals[0].get), max(tree_totals[1], key = tree_totals[1].get), max(tree_totals[2], key = tree_totals[2].get), max(tree_totals[3], key = tree_totals[3].get)]\n",
" \n",
" #classify each row in data\n",
" classified = []\n",
" for row in data:\n",
" if row[tree_splits[0][0]] >= tree_splits[0][1]:\n",
" \n",
" if row[tree_splits[1][0]] >= tree_splits[1][1]:\n",
" #then branch1-1\n",
" pred = classes[0]\n",
" else:\n",
" #then branch1-2\n",
" pred = classes[1]\n",
" else:\n",
" if row[tree_splits[2][0]] >= tree_splits[2][1]:\n",
" #then branch2-1\n",
" pred = classes[2]\n",
" else:\n",
" #then branch2-2\n",
" pred = classes[3]\n",
" \n",
" #append prediction to classified list\n",
" classified.append(pred)\n",
" \n",
" #create numpy array\n",
" classified = np.array(classified)\n",
" \n",
" return classified\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def myRForest(filename, M, k):\n",
" \n",
" #load and shuffle the data\n",
" data = load(filename)\n",
" np.random.shuffle(data)\n",
" \n",
" #change y to classification problem\n",
" percentile_50 = np.percentile(data[:, 13], 50, axis = 0)\n",
" percentile_75 = np.percentile(data[:, 13], 75, axis = 0)\n",
" \n",
" t50 = np.copy(data[:, 13])\n",
" t50[t50 < percentile_50] = -1\n",
" t50[t50 >= percentile_50] = 1\n",
" \n",
" t75 = np.copy(data[:, 13])\n",
" t75[t75 < percentile_75] = -1\n",
" t75[t75 >= percentile_75] = 1\n",
" \n",
" \n",
" #append new columns to data\n",
" data = np.c_[data, t50, t75]\n",
" \n",
" #size of fold\n",
" size = int(len(data)/k)\n",
" \n",
" #initialize\n",
" all_rates50_train = []\n",
" all_rates75_train = []\n",
" all_rates50_valid = []\n",
" all_rates75_valid = []\n",
" \n",
" avgs50_train = []\n",
" avgs75_train = []\n",
" avgs50_valid = []\n",
" avgs75_valid = []\n",
" stds50_train = []\n",
" stds75_train = []\n",
" stds50_valid = []\n",
" stds75_valid = []\n",
" \n",
" #iterate over all elements in M\n",
" for m in M:\n",
" \n",
" #initialize\n",
" index = 0\n",
" rates50_train = []\n",
" rates75_train = []\n",
" rates50_valid = []\n",
" rates75_valid = []\n",
" \n",
" #iterate over each \"fold\" in the data\n",
" for i in range(k):\n",
" \n",
" #split data\n",
" new_data = np.copy(data)\n",
" validation = new_data[index:(index + size),:]\n",
" training = np.delete(new_data, np.s_[index:(index + size)], 0)\n",
" \n",
" #this is where RANDOM FOREST STARTS\n",
" results_50_training = np.zeros(len(training))\n",
" results_50_validation = np.zeros(len(validation))\n",
" results_75_training = np.zeros(len(training))\n",
" results_75_validation = np.zeros(len(validation))\n",
" \n",
" #create 100 random decision trees (random forest)\n",
" for j in range(100):\n",
" \n",
" #create boostrap sample of the data\n",
" shuffled = np.copy(training)\n",
" shuffled = shuffled[np.random.randint(len(shuffled), size = len(shuffled)), :]\n",
" \n",
" #run decision trees\n",
" tree_50 = decisiontree(shuffled, 14, m)\n",
" tree_75 = decisiontree(shuffled, 15, m)\n",
" \n",
" #add to overall classified sets\n",
" results_50_training += classify(training, tree_50, 14)\n",
" results_50_validation += classify(validation, tree_50, 14)\n",
" results_75_training += classify(training, tree_75, 15)\n",
" results_75_validation += classify(validation, tree_75, 15)\n",
" \n",
" #majority vote over all trees\n",
" results_50_training = results_50_training.clip(min = -1, max = 1)\n",
" results_50_validation = results_50_validation.clip(min = -1, max = 1)\n",
" results_75_training = results_75_training.clip(min = -1, max = 1)\n",
" results_75_validation = results_75_validation.clip(min = -1, max = 1)\n",
" \n",
" #classification rate\n",
" rate_50_training = np.mean(results_50_training != training[:, 14])\n",
" rate_50_validation = np.mean(results_50_validation != validation[:, 14])\n",
" rate_75_training = np.mean(results_75_training != training[:, 15])\n",
" rate_75_validation = np.mean(results_75_validation != validation[:, 15])\n",
" print(\"M = %d, Fold = %d, t50:\" % (m, i), \"%.5f\" % round(rate_50_training, 5), \"%.5f\" % round(rate_50_validation, 5), \"t75:\", \"%.5f\" % round(rate_75_training, 5), \"%.5f\" % round(rate_75_validation, 5))\n",
" \n",
" #append rates\n",
" rates50_train.append(rate_50_training)\n",
" rates75_train.append(rate_75_training)\n",
" rates50_valid.append(rate_50_validation)\n",
" rates75_valid.append(rate_75_validation)\n",
" \n",
" #adjust index\n",
" index += size\n",
" \n",
" #append rates (used for table, creation of plots)\n",
" all_rates50_train.append(rates50_train)\n",
" all_rates75_train.append(rates75_train)\n",
" all_rates50_valid.append(rates50_valid)\n",
" all_rates75_valid.append(rates75_valid)\n",
" \n",
" avgs50_train.append(np.mean(rates50_train))\n",
" avgs75_train.append(np.mean(rates75_train))\n",
" avgs50_valid.append(np.mean(rates50_valid))\n",
" avgs75_valid.append(np.mean(rates75_valid))\n",
" stds50_train.append(np.std(rates50_train))\n",
" stds75_train.append(np.std(rates75_train))\n",
" stds50_valid.append(np.std(rates50_valid))\n",
" stds75_valid.append(np.std(rates75_valid))\n",
" print(\"AVERAGE : M = %d, t50:\" % m, \"%.5f\" % np.round(np.mean(rates50_train), 5), \"%.5f\" % np.round(np.mean(rates50_valid), 5), \"t75:\", \"%.5f\" % np.round(np.mean(rates75_train), 5), \"%.5f\" % np.round(np.mean(rates75_valid), 5))\n",
" print(\"STD : M = %d, t50:\" % m, \"%.5f\" % np.round(np.std(rates50_train), 5), \"%.5f\" % np.round(np.std(rates50_valid), 5), \"t75:\", \"%.5f\" % np.round(np.std(rates75_train), 5), \"%.5f\" % np.round(np.std(rates75_valid), 5))\n",
" \n",
" \n",
" return all_rates50_train, avgs50_train, stds50_train, all_rates50_valid, avgs50_valid, stds50_valid, all_rates75_train, avgs75_train, stds75_train, all_rates75_valid, avgs75_valid, stds75_valid"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Execute:"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"M = 1, Fold = 0, t50: 0.21711 0.18000 t75: 0.14912 0.16000\n",
"M = 1, Fold = 1, t50: 0.19956 0.16000 t75: 0.16009 0.30000\n",
"M = 1, Fold = 2, t50: 0.18860 0.30000 t75: 0.17763 0.20000\n",
"M = 1, Fold = 3, t50: 0.21053 0.22000 t75: 0.20614 0.18000\n",
"M = 1, Fold = 4, t50: 0.18860 0.28000 t75: 0.17982 0.16000\n",
"M = 1, Fold = 5, t50: 0.18202 0.28000 t75: 0.23246 0.26000\n",
"M = 1, Fold = 6, t50: 0.21053 0.18000 t75: 0.18421 0.22000\n",
"M = 1, Fold = 7, t50: 0.21053 0.16000 t75: 0.23684 0.20000\n",
"M = 1, Fold = 8, t50: 0.21491 0.20000 t75: 0.19956 0.18000\n",
"M = 1, Fold = 9, t50: 0.19518 0.16000 t75: 0.17982 0.20000\n",
"AVERAGE : M = 1, t50: 0.20175 0.21200 t75: 0.19057 0.20600\n",
"STD : M = 1, t50: 0.01193 0.05231 t75: 0.02703 0.04200\n",
"M = 2, Fold = 0, t50: 0.19298 0.18000 t75: 0.10307 0.14000\n",
"M = 2, Fold = 1, t50: 0.19518 0.14000 t75: 0.10746 0.12000\n",
"M = 2, Fold = 2, t50: 0.17544 0.26000 t75: 0.08553 0.12000\n",
"M = 2, Fold = 3, t50: 0.18421 0.22000 t75: 0.12500 0.06000\n",
"M = 2, Fold = 4, t50: 0.18421 0.24000 t75: 0.11184 0.12000\n",
"M = 2, Fold = 5, t50: 0.17763 0.32000 t75: 0.09868 0.14000\n",
"M = 2, Fold = 6, t50: 0.18640 0.16000 t75: 0.14254 0.14000\n",
"M = 2, Fold = 7, t50: 0.17325 0.16000 t75: 0.10088 0.08000\n",
"M = 2, Fold = 8, t50: 0.18202 0.14000 t75: 0.11184 0.12000\n",
"M = 2, Fold = 9, t50: 0.19518 0.18000 t75: 0.10965 0.14000\n",
"AVERAGE : M = 2, t50: 0.18465 0.20000 t75: 0.10965 0.11800\n",
"STD : M = 2, t50: 0.00752 0.05586 t75: 0.01468 0.02600\n",
"M = 3, Fold = 0, t50: 0.17982 0.14000 t75: 0.07675 0.12000\n",
"M = 3, Fold = 1, t50: 0.16447 0.12000 t75: 0.09649 0.10000\n",
"M = 3, Fold = 2, t50: 0.17105 0.24000 t75: 0.08772 0.12000\n",
"M = 3, Fold = 3, t50: 0.17982 0.20000 t75: 0.09649 0.04000\n",
"M = 3, Fold = 4, t50: 0.15789 0.22000 t75: 0.08333 0.10000\n",
"M = 3, Fold = 5, t50: 0.17325 0.32000 t75: 0.08333 0.16000\n",
"M = 3, Fold = 6, t50: 0.17105 0.18000 t75: 0.09868 0.06000\n",
"M = 3, Fold = 7, t50: 0.15570 0.16000 t75: 0.08991 0.08000\n",
"M = 3, Fold = 8, t50: 0.15570 0.18000 t75: 0.09868 0.12000\n",
"M = 3, Fold = 9, t50: 0.16886 0.18000 t75: 0.08333 0.12000\n",
"AVERAGE : M = 3, t50: 0.16776 0.19400 t75: 0.08947 0.10200\n",
"STD : M = 3, t50: 0.00862 0.05370 t75: 0.00739 0.03280\n",
"M = 4, Fold = 0, t50: 0.17105 0.12000 t75: 0.07018 0.14000\n",
"M = 4, Fold = 1, t50: 0.16447 0.14000 t75: 0.08553 0.06000\n",
"M = 4, Fold = 2, t50: 0.15132 0.20000 t75: 0.08333 0.14000\n",
"M = 4, Fold = 3, t50: 0.15570 0.18000 t75: 0.08772 0.04000\n",
"M = 4, Fold = 4, t50: 0.15351 0.22000 t75: 0.09430 0.10000\n",
"M = 4, Fold = 5, t50: 0.14474 0.28000 t75: 0.07675 0.14000\n",
"M = 4, Fold = 6, t50: 0.16228 0.14000 t75: 0.08991 0.06000\n",
"M = 4, Fold = 7, t50: 0.15351 0.16000 t75: 0.07895 0.08000\n",
"M = 4, Fold = 8, t50: 0.14693 0.18000 t75: 0.08991 0.06000\n",
"M = 4, Fold = 9, t50: 0.16667 0.12000 t75: 0.08991 0.12000\n",
"AVERAGE : M = 4, t50: 0.15702 0.17400 t75: 0.08465 0.09400\n",
"STD : M = 4, t50: 0.00828 0.04737 t75: 0.00702 0.03693\n",
"M = 5, Fold = 0, t50: 0.13816 0.16000 t75: 0.07895 0.12000\n",
"M = 5, Fold = 1, t50: 0.14474 0.14000 t75: 0.09430 0.06000\n",
"M = 5, Fold = 2, t50: 0.15132 0.16000 t75: 0.07675 0.14000\n",
"M = 5, Fold = 3, t50: 0.16009 0.14000 t75: 0.09430 0.04000\n",
"M = 5, Fold = 4, t50: 0.14693 0.20000 t75: 0.07675 0.12000\n",
"M = 5, Fold = 5, t50: 0.14035 0.28000 t75: 0.07675 0.14000\n",
"M = 5, Fold = 6, t50: 0.16009 0.12000 t75: 0.08553 0.04000\n",
"M = 5, Fold = 7, t50: 0.14693 0.16000 t75: 0.08333 0.08000\n",
"M = 5, Fold = 8, t50: 0.14912 0.18000 t75: 0.08333 0.06000\n",
"M = 5, Fold = 9, t50: 0.16228 0.10000 t75: 0.08114 0.12000\n",
"AVERAGE : M = 5, t50: 0.15000 0.16400 t75: 0.08311 0.09200\n",
"STD : M = 5, t50: 0.00798 0.04716 t75: 0.00631 0.03816\n",
"M = 6, Fold = 0, t50: 0.15351 0.16000 t75: 0.07456 0.12000\n",
"M = 6, Fold = 1, t50: 0.14693 0.18000 t75: 0.08991 0.04000\n",
"M = 6, Fold = 2, t50: 0.14912 0.18000 t75: 0.07237 0.12000\n",
"M = 6, Fold = 3, t50: 0.15789 0.16000 t75: 0.08991 0.04000\n",
"M = 6, Fold = 4, t50: 0.13377 0.18000 t75: 0.08333 0.12000\n",
"M = 6, Fold = 5, t50: 0.14035 0.26000 t75: 0.07895 0.14000\n",
"M = 6, Fold = 6, t50: 0.14035 0.10000 t75: 0.09649 0.04000\n",
"M = 6, Fold = 7, t50: 0.15789 0.16000 t75: 0.08333 0.10000\n",
"M = 6, Fold = 8, t50: 0.13158 0.18000 t75: 0.09211 0.06000\n",
"M = 6, Fold = 9, t50: 0.15789 0.10000 t75: 0.09211 0.12000\n",
"AVERAGE : M = 6, t50: 0.14693 0.16600 t75: 0.08531 0.09000\n",
"STD : M = 6, t50: 0.00951 0.04294 t75: 0.00769 0.03821\n",
"M = 7, Fold = 0, t50: 0.15570 0.16000 t75: 0.08333 0.12000\n",
"M = 7, Fold = 1, t50: 0.14693 0.18000 t75: 0.09211 0.06000\n",
"M = 7, Fold = 2, t50: 0.15132 0.14000 t75: 0.08333 0.14000\n",
"M = 7, Fold = 3, t50: 0.14254 0.14000 t75: 0.08772 0.04000\n",
"M = 7, Fold = 4, t50: 0.13816 0.16000 t75: 0.07456 0.12000\n",
"M = 7, Fold = 5, t50: 0.13596 0.24000 t75: 0.08772 0.14000\n",
"M = 7, Fold = 6, t50: 0.14693 0.14000 t75: 0.08991 0.04000\n",
"M = 7, Fold = 7, t50: 0.13377 0.20000 t75: 0.08333 0.10000\n",
"M = 7, Fold = 8, t50: 0.14254 0.18000 t75: 0.08333 0.06000\n",
"M = 7, Fold = 9, t50: 0.14693 0.08000 t75: 0.07895 0.12000\n",
"AVERAGE : M = 7, t50: 0.14408 0.16200 t75: 0.08443 0.09400\n",
"STD : M = 7, t50: 0.00651 0.04045 t75: 0.00493 0.03800\n",
"M = 8, Fold = 0, t50: 0.14254 0.16000 t75: 0.08553 0.12000\n",
"M = 8, Fold = 1, t50: 0.15789 0.18000 t75: 0.09211 0.04000\n",
"M = 8, Fold = 2, t50: 0.15132 0.16000 t75: 0.07895 0.14000\n",
"M = 8, Fold = 3, t50: 0.14693 0.12000 t75: 0.09211 0.04000\n",
"M = 8, Fold = 4, t50: 0.13377 0.18000 t75: 0.07675 0.14000\n",
"M = 8, Fold = 5, t50: 0.14693 0.24000 t75: 0.07456 0.14000\n",
"M = 8, Fold = 6, t50: 0.14693 0.14000 t75: 0.08772 0.04000\n",
"M = 8, Fold = 7, t50: 0.14254 0.16000 t75: 0.08553 0.10000\n",
"M = 8, Fold = 8, t50: 0.14474 0.18000 t75: 0.08553 0.06000\n",
"M = 8, Fold = 9, t50: 0.16009 0.14000 t75: 0.08333 0.12000\n",
"AVERAGE : M = 8, t50: 0.14737 0.16600 t75: 0.08421 0.09400\n",
"STD : M = 8, t50: 0.00726 0.03105 t75: 0.00565 0.04200\n",
"M = 9, Fold = 0, t50: 0.15351 0.14000 t75: 0.08333 0.14000\n",
"M = 9, Fold = 1, t50: 0.13816 0.18000 t75: 0.09649 0.06000\n",
"M = 9, Fold = 2, t50: 0.13596 0.18000 t75: 0.07456 0.14000\n",
"M = 9, Fold = 3, t50: 0.14035 0.16000 t75: 0.08991 0.04000\n",
"M = 9, Fold = 4, t50: 0.13596 0.18000 t75: 0.07675 0.14000\n",
"M = 9, Fold = 5, t50: 0.15132 0.26000 t75: 0.08553 0.14000\n",
"M = 9, Fold = 6, t50: 0.14912 0.10000 t75: 0.08772 0.04000\n",
"M = 9, Fold = 7, t50: 0.15351 0.18000 t75: 0.08333 0.10000\n",
"M = 9, Fold = 8, t50: 0.15351 0.16000 t75: 0.08772 0.06000\n",
"M = 9, Fold = 9, t50: 0.15351 0.12000 t75: 0.08333 0.12000\n",
"AVERAGE : M = 9, t50: 0.14649 0.16600 t75: 0.08487 0.09800\n",
"STD : M = 9, t50: 0.00746 0.04104 t75: 0.00597 0.04142\n",
"M = 10, Fold = 0, t50: 0.14474 0.10000 t75: 0.08553 0.08000\n",
"M = 10, Fold = 1, t50: 0.13816 0.18000 t75: 0.08772 0.04000\n",
"M = 10, Fold = 2, t50: 0.14912 0.14000 t75: 0.07895 0.16000\n",
"M = 10, Fold = 3, t50: 0.15351 0.16000 t75: 0.08991 0.04000\n",
"M = 10, Fold = 4, t50: 0.14254 0.18000 t75: 0.07895 0.14000\n",
"M = 10, Fold = 5, t50: 0.15351 0.26000 t75: 0.08553 0.14000\n",
"M = 10, Fold = 6, t50: 0.15789 0.14000 t75: 0.08553 0.04000\n",
"M = 10, Fold = 7, t50: 0.13377 0.18000 t75: 0.08553 0.10000\n",
"M = 10, Fold = 8, t50: 0.14254 0.18000 t75: 0.08333 0.06000\n",
"M = 10, Fold = 9, t50: 0.14912 0.08000 t75: 0.08114 0.12000\n",
"AVERAGE : M = 10, t50: 0.14649 0.16000 t75: 0.08421 0.09200\n",
"STD : M = 10, t50: 0.00713 0.04733 t75: 0.00343 0.04400\n",
"M = 11, Fold = 0, t50: 0.16009 0.18000 t75: 0.08114 0.12000\n",
"M = 11, Fold = 1, t50: 0.14035 0.18000 t75: 0.09430 0.04000\n",
"M = 11, Fold = 2, t50: 0.15132 0.14000 t75: 0.07895 0.16000\n",
"M = 11, Fold = 3, t50: 0.14035 0.10000 t75: 0.09211 0.04000\n",
"M = 11, Fold = 4, t50: 0.14254 0.16000 t75: 0.07895 0.16000\n",
"M = 11, Fold = 5, t50: 0.15570 0.22000 t75: 0.07675 0.14000\n",
"M = 11, Fold = 6, t50: 0.15351 0.14000 t75: 0.08991 0.04000\n",
"M = 11, Fold = 7, t50: 0.13377 0.18000 t75: 0.08114 0.10000\n",
"M = 11, Fold = 8, t50: 0.13158 0.18000 t75: 0.08772 0.08000\n",
"M = 11, Fold = 9, t50: 0.16228 0.14000 t75: 0.08553 0.12000\n",
"AVERAGE : M = 11, t50: 0.14715 0.16200 t75: 0.08465 0.10000\n",
"STD : M = 11, t50: 0.01031 0.03156 t75: 0.00582 0.04561\n",
"M = 12, Fold = 0, t50: 0.15789 0.14000 t75: 0.07895 0.12000\n",
"M = 12, Fold = 1, t50: 0.14035 0.18000 t75: 0.09430 0.04000\n",
"M = 12, Fold = 2, t50: 0.13596 0.14000 t75: 0.07895 0.16000\n",
"M = 12, Fold = 3, t50: 0.15351 0.16000 t75: 0.08991 0.04000\n",
"M = 12, Fold = 4, t50: 0.14035 0.16000 t75: 0.08114 0.14000\n",
"M = 12, Fold = 5, t50: 0.14693 0.20000 t75: 0.08114 0.14000\n",
"M = 12, Fold = 6, t50: 0.15789 0.12000 t75: 0.08553 0.04000\n",
"M = 12, Fold = 7, t50: 0.13596 0.18000 t75: 0.08333 0.10000\n",
"M = 12, Fold = 8, t50: 0.15789 0.22000 t75: 0.08553 0.10000\n",
"M = 12, Fold = 9, t50: 0.14035 0.10000 t75: 0.08114 0.12000\n",
"AVERAGE : M = 12, t50: 0.14671 0.16000 t75: 0.08399 0.10000\n",
"STD : M = 12, t50: 0.00880 0.03464 t75: 0.00471 0.04290\n",
"M = 13, Fold = 0, t50: 0.16228 0.14000 t75: 0.08114 0.10000\n",
"M = 13, Fold = 1, t50: 0.13158 0.18000 t75: 0.09649 0.06000\n",
"M = 13, Fold = 2, t50: 0.13596 0.16000 t75: 0.08333 0.16000\n",
"M = 13, Fold = 3, t50: 0.14254 0.12000 t75: 0.08772 0.04000\n",
"M = 13, Fold = 4, t50: 0.13158 0.16000 t75: 0.07456 0.14000\n",
"M = 13, Fold = 5, t50: 0.15351 0.22000 t75: 0.07895 0.14000\n",
"M = 13, Fold = 6, t50: 0.15132 0.16000 t75: 0.09211 0.04000\n",
"M = 13, Fold = 7, t50: 0.14693 0.20000 t75: 0.08772 0.10000\n",
"M = 13, Fold = 8, t50: 0.15570 0.20000 t75: 0.08772 0.06000\n",
"M = 13, Fold = 9, t50: 0.15789 0.10000 t75: 0.08772 0.14000\n",
"AVERAGE : M = 13, t50: 0.14693 0.16400 t75: 0.08575 0.09800\n",
"STD : M = 13, t50: 0.01052 0.03555 t75: 0.00608 0.04331\n"
]
}
],
"source": [
"Results = myRForest(path, [1,2,3,4,5,6,7,8,9,10,11,12,13], 10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plot Results"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from ggplot import *\n",
"import pandas as pd\n",
"\n",
"def create_plot(data_train, data_valid):\n",
" #arrange data\n",
" data = np.array([data_train, data_valid])\n",
" data = pd.DataFrame(data).T\n",
" data[\"M\"] = list(range(1, data.shape[0] + 1))\n",
" data.columns = [\"T50 Train\", \"T50 Test\", \"M\"]\n",
"\n",
" #create pandas data frame that ggplot can read\n",
" new_df = pd.melt(data, id_vars = \"M\")\n",
"\n",
" #name plot\n",
" plot_name = \"Random Forest (T50 Data)\"\n",
" plot_filename = \"myRForest_T50.png\"\n",
" \n",
" #create plot\n",
" p = ggplot(aes(x = \"M\", y = \"value\", colour = \"variable\"), data = new_df) + geom_line() +\\\n",
" labs(y = \"Error Rate\") + ggtitle(plot_name)\n",
" p\n",
" \n",
" #save plot\n",
" p.save(plot_filename)\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n0tLS8MQTT3hOcly2bBkGDRqEuLg4LF26FG+99RYAIDs7G3PmzMHVV1+N+Pj4Hq/WMmrUKMTFxV10\nFZtL5X/33XcxZMgQ6PV63H///Xjqqadw9913ez2/c+dOGAwGPP300/jggw+QkJBwyRktX74cer0e\ncXFxmDZtGpKSkrB7927PyauLFi1CZ2cnEhMTceONN6K8vNxr/0cffRQrVqxAQkICFi1ahMmTJ6O0\ntBRDhw7FoEGDEBUV5fVLT1dXF9asWYP77rvvkpmIiMQiuP055ENERGFlw4YNeOWVV/Dvf/9b7ChB\n9/LLL+PUqVP43e9+J3YUIqKLsJwTEREREUkEl7UQEREREUkEyzkRERERkUSwnBMRERERSQTLORER\nERGRRLCcExERERFJBMs5EREREZFEsJwTEREREUkEyzkRERERkUSwnBMRERERSQTLORERERGRRLCc\nExERERFJBMs5EREREZFEsJwTEREREUkEyzkRERERkUSwnBMRERERSQTLORERERGRRLCcExERERFJ\nBMs5EREREZFEsJwTEREREUkEyzkRERERkUSwnBMRERERSQTLORERERGRRCjEDuCv6upqrFu3Dm63\nG/n5+Rg3bpzX8wcOHMD27dsBACqVCrfddhuMRiPa2trw4YcfoqOjA4IgID8/H6NHjxbjIxARERER\neQnJcu5yubBmzRrcd999iImJwdKlS5GdnY2kpCTPNgaDAfPmzYNGo0F1dTU+/vhj/PjHP4ZMJkNp\naSlSU1NhtVqxdOlSDB482GtfIiIiIiIxhOSylrq6OiQkJCAuLg5yuRx5eXmoqqry2iYjIwMajQYA\nMGDAAJjNZgBATEwMUlNTAQBqtRqJiYme54iIiIiIxBSSR87NZjP0er3ne71ej7q6uktuv2fPHgwZ\nMuSix1taWlBfX4/09HTPYyaTCe3t7V7b6XQ6r/cjIiIiIgqGkCznvVFTU4N9+/Zh/vz5Xo9brVYs\nX74cZWVlUKvVnsd3796NiooKr22LiopQXFzcL3mJiIiIKHKFZDmPiYlBW1ub53uTydTjke36+nqs\nWrUKd999N7Raredxp9OJ5cuXY+TIkcjJyfHap6CgANnZ2V6P6XQ6tLS0wOFwBPiTBIZarYbVahU7\nxkUUCgUMBgNn5yepz4+z8x9n1zdSnR9n5z/Ozn/ds6PwEZLlPD09Hc3NzWhtbYVOp0NlZSVmzJjh\ntU1rayuWL1+O6dOnIz4+3uu5lStXIikpqcertOj1+h6LfmNjI+x2e2A/SIAoFArJZgMAh8Mh2XxS\nnx0g3flxdv7j7PpG6vPj7PzH2RGFaDmXyWQoLy/HsmXL4Ha7MWrUKCQlJWHXrl0AgMLCQmzZsgUW\niwWrV6/27LNgwQKcOHECBw8eRHJyMl599VUAQElJCbKyskT7PEREREREQIiWcwDIysq6qFAXFhZ6\nvp46dSqmTp160X4DBw7EM888E/R8RERERES9FZKXUiQiIiIiCkcs50REREREEsFyTkREREQkESzn\nREREREQSwXJORERERCQRLOdERERERBLBck5EREREJBEs50REREREEsFyTkREREQkESznREREREQS\nwXJORERERCQRLOdERERERBLBck5EREREJBEs50REREREEsFyTkREREQkESznREREREQSwXJORERE\nRCQRLOdERERERBLBck5EREREJBEs50REREREEsFyTkREREQkESznREREREQSwXJORERERCQRgtvt\ndosdQuq6urrQ1dUFqY5KJpPB5XKJHeMigiBApVLBZrNxdn6Q+vw4O/9xdn0j1flxdv7j7PzXPbuo\nqCixo1CAKMQOEAo0Gg3MZjPsdrvYUXqk1WphsVjEjnERpVKJuLg4dHR0cHZ+kPr8ODv/cXZ9I9X5\ncXb+4+z81z07Ch9c1kJEREREJBEs50REREREEsFyTkREREQkESznREREREQSwXJORERERCQRLOdE\nRERERBLBck5EREREJBEs50REREREEsFyTkREREQkESznREREREQSwXJORERERCQRLOdERERERBLB\nck5EREREJBEs50REREREEsFyHuKiPv8UQluL2DGIiIiIKABYzkOcS6uF8rN1YscgIiIiogBgOQ9x\nXYWjIdSfhuJEjdhRiIiIiKiPWM5DnUIJ+03liP78U8DpFDsNEREREfUBy3kYcGXlwBmjh3r/LrGj\nEBEREVEfsJyHA0FA58RboP1qO4SOdrHTEBEREZGfWM7DhCs+Ada8axG17XOxoxARERGRn1jOw4jl\nhrFQnqiB4vQpsaMQERERkR8UYgfwV3V1NdatWwe32438/HyMGzfO6/kDBw5g+/btAACVSoVbb70V\nKSkpAICVK1fi6NGjiI6OxsMPP9zv2YNGpUbn+EmI+nw9THPmATL+7kVEREQUSkKyvblcLqxZswb3\n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\n4v8H2UiQgrDguc0AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x116564748>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"create_plot(Results[1], Results[4])"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment