This one trains the DNN on iris and also create confusion matrix. Comments will help you know what is happening.
===
#imports
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import tensorflow as tf
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
# Load data
# Download it from here : https://archive.ics.uci.edu/ml/datasets/iris. Ensure that the categories are #labeled as Iris-setosa, Iris-virginica, Iris-versicolor and their column name as Species.
iris = pd.read_csv("irisdata.csv")
# explore what is loaded
#print(iris.shape)
#print(iris.head)
# Convert the data type of columns to float32 type
#print(iris.dtypes)
#print(iris.iloc[:,0:4])
iris.iloc[:,0:4] = iris.iloc[:,0:4].astype(np.float32)
#print(iris.dtypes)
# encode the classes to numeric values
iris["Species"] = iris["Species"].map({"Iris-setosa":0,"Iris-virginica":1,"Iris-versicolor":2})
# train test split
X_train, X_test, y_train, y_test = train_test_split(iris.iloc[:,0:4], iris["Species"], test_size=0.33, random_state=42)
# get only the column names of input features
columns = iris.columns[0:4]
#print(columns)
# these feature coulmns are made as real valued numbers
feature_columns = [tf.contrib.layers.real_valued_column(k) for k in columns]
feature_columns
# convert the input into format of the tensorflow
#takes in the dataframe and a series/vector and returns
def input_fn(df,labels):
feature_cols = {k:tf.constant(df[k].values,shape = [df[k].size,1]) for k in columns}
label = tf.constant(labels.values, shape = [labels.size,1])
return feature_cols,label
# Define the classifier with hidden layers and number of classes and feature columns
classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,hidden_units=[10,20,10],n_classes = 3)
# training the classifier while providing the input which is typecasted by the input function and also mention the iterations
classifier.fit(input_fn=lambda: input_fn(X_train,y_train),steps = 1000)
# evaluate the classifier
ev = classifier.evaluate(input_fn=lambda: input_fn(X_test,y_test),steps=1)
# convert values to the type of tensorflow for prediction only the input and not the label variable
def input_predict(df):
feature_cols = {k:tf.constant(df[k].values,shape = [df[k].size,1]) for k in columns}
return feature_cols
# prediction
pred = classifier.predict_classes(input_fn=lambda: input_predict(X_test))
# print prediction
print("The predictions")
#print(list(pred))
#Confusion Matrix
actual = list(y_test)
predicted = list(pred)
actual = pd.Series(actual)
predicted = pd.Series(predicted)
pd.crosstab(actual,predicted)
==
Major part of the code from Wei LI
===
#imports
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import tensorflow as tf
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
# Load data
# Download it from here : https://archive.ics.uci.edu/ml/datasets/iris. Ensure that the categories are #labeled as Iris-setosa, Iris-virginica, Iris-versicolor and their column name as Species.
iris = pd.read_csv("irisdata.csv")
# explore what is loaded
#print(iris.shape)
#print(iris.head)
# Convert the data type of columns to float32 type
#print(iris.dtypes)
#print(iris.iloc[:,0:4])
iris.iloc[:,0:4] = iris.iloc[:,0:4].astype(np.float32)
#print(iris.dtypes)
# encode the classes to numeric values
iris["Species"] = iris["Species"].map({"Iris-setosa":0,"Iris-virginica":1,"Iris-versicolor":2})
# train test split
X_train, X_test, y_train, y_test = train_test_split(iris.iloc[:,0:4], iris["Species"], test_size=0.33, random_state=42)
# get only the column names of input features
columns = iris.columns[0:4]
#print(columns)
# these feature coulmns are made as real valued numbers
feature_columns = [tf.contrib.layers.real_valued_column(k) for k in columns]
feature_columns
# convert the input into format of the tensorflow
#takes in the dataframe and a series/vector and returns
def input_fn(df,labels):
feature_cols = {k:tf.constant(df[k].values,shape = [df[k].size,1]) for k in columns}
label = tf.constant(labels.values, shape = [labels.size,1])
return feature_cols,label
# Define the classifier with hidden layers and number of classes and feature columns
classifier = tf.contrib.learn.DNNClassifier(feature_columns=feature_columns,hidden_units=[10,20,10],n_classes = 3)
# training the classifier while providing the input which is typecasted by the input function and also mention the iterations
classifier.fit(input_fn=lambda: input_fn(X_train,y_train),steps = 1000)
# evaluate the classifier
ev = classifier.evaluate(input_fn=lambda: input_fn(X_test,y_test),steps=1)
# convert values to the type of tensorflow for prediction only the input and not the label variable
def input_predict(df):
feature_cols = {k:tf.constant(df[k].values,shape = [df[k].size,1]) for k in columns}
return feature_cols
# prediction
pred = classifier.predict_classes(input_fn=lambda: input_predict(X_test))
# print prediction
print("The predictions")
#print(list(pred))
#Confusion Matrix
actual = list(y_test)
predicted = list(pred)
actual = pd.Series(actual)
predicted = pd.Series(predicted)
pd.crosstab(actual,predicted)
==
Major part of the code from Wei LI
Comments