From 8c0c0b9d7815b99378e4de2eedf32ad349f7f55b Mon Sep 17 00:00:00 2001 From: amirmoghi3 Date: Thu, 31 Dec 2020 20:19:52 +0330 Subject: [PATCH] Initial Commit --- .history/app_20201231195755.py | 0 .history/app_20201231200318.py | 103 +++++++++++ .history/app_20201231201128.py | 103 +++++++++++ .history/app_20201231201209.py | 96 +++++++++++ .history/app_20201231201258.py | 96 +++++++++++ .history/app_20201231201711.py | 96 +++++++++++ .history/app_20201231201714.py | 96 +++++++++++ .vscode/settings.json | 3 + Train.csv | 300 +++++++++++++++++++++++++++++++++ Train.xlsx | Bin 0 -> 24032 bytes app.py | 96 +++++++++++ 11 files changed, 989 insertions(+) create mode 100644 .history/app_20201231195755.py create mode 100644 .history/app_20201231200318.py create mode 100644 .history/app_20201231201128.py create mode 100644 .history/app_20201231201209.py create mode 100644 .history/app_20201231201258.py create mode 100644 .history/app_20201231201711.py create mode 100644 .history/app_20201231201714.py create mode 100644 .vscode/settings.json create mode 100644 Train.csv create mode 100644 Train.xlsx create mode 100644 app.py diff --git a/.history/app_20201231195755.py b/.history/app_20201231195755.py new file mode 100644 index 0000000..e69de29 diff --git a/.history/app_20201231200318.py b/.history/app_20201231200318.py new file mode 100644 index 0000000..0377641 --- /dev/null +++ b/.history/app_20201231200318.py @@ -0,0 +1,103 @@ +import numpy as np +import pandas as pd +from sklearn.metrics import confusion_matrix +from sklearn.cross_validation import train_test_split +from sklearn.tree import DecisionTreeClassifier +from sklearn.metrics import accuracy_score +from sklearn.metrics import classification_report + +# Function importing Dataset +def importdata(): + balance_data = pd.read_excel('Train.xlsx', sheet_name="Sheet1").to_numpy() + + # Printing the dataswet shape + print ("Dataset Length: ", len(balance_data)) + print ("Dataset Shape: ", balance_data.shape) + + # Printing the dataset obseravtions + print ("Dataset: ",balance_data.head()) + return balance_data + +# Function to split the dataset +def splitdataset(balance_data): + + # Separating the target variable + X = balance_data.values[:, 1:5] + Y = balance_data.values[:, 0] + + # Splitting the dataset into train and test + X_train, X_test, y_train, y_test = train_test_split( + X, Y, test_size = 0.3, random_state = 100) + + return X, Y, X_train, X_test, y_train, y_test + +# Function to perform training with giniIndex. +def train_using_gini(X_train, X_test, y_train): + + # Creating the classifier object + clf_gini = DecisionTreeClassifier(criterion = "gini", + random_state = 100,max_depth=3, min_samples_leaf=5) + + # Performing training + clf_gini.fit(X_train, y_train) + return clf_gini + +# Function to perform training with entropy. +def tarin_using_entropy(X_train, X_test, y_train): + + # Decision tree with entropy + clf_entropy = DecisionTreeClassifier( + criterion = "entropy", random_state = 100, + max_depth = 3, min_samples_leaf = 5) + + # Performing training + clf_entropy.fit(X_train, y_train) + return clf_entropy + + +# Function to make predictions +def prediction(X_test, clf_object): + + # Predicton on test with giniIndex + y_pred = clf_object.predict(X_test) + print("Predicted values:") + print(y_pred) + return y_pred + +# Function to calculate accuracy +def cal_accuracy(y_test, y_pred): + + print("Confusion Matrix: ", + confusion_matrix(y_test, y_pred)) + + print ("Accuracy : ", + accuracy_score(y_test,y_pred)*100) + + print("Report : ", + classification_report(y_test, y_pred)) + +# Driver code +def main(): + + # Building Phase + data = importdata() + X, Y, X_train, X_test, y_train, y_test = splitdataset(data) + clf_gini = train_using_gini(X_train, X_test, y_train) + clf_entropy = tarin_using_entropy(X_train, X_test, y_train) + + # Operational Phase + print("Results Using Gini Index:") + + # Prediction using gini + y_pred_gini = prediction(X_test, clf_gini) + cal_accuracy(y_test, y_pred_gini) + + print("Results Using Entropy:") + # Prediction using entropy + y_pred_entropy = prediction(X_test, clf_entropy) + cal_accuracy(y_test, y_pred_entropy) + + +# Calling main function +if __name__=="__main__": + main() \ No newline at end of file diff --git a/.history/app_20201231201128.py b/.history/app_20201231201128.py new file mode 100644 index 0000000..735243c --- /dev/null +++ b/.history/app_20201231201128.py @@ -0,0 +1,103 @@ +import numpy as np +import pandas as pd +from sklearn.metrics import confusion_matrix +from sklearn.model_selection import train_test_split +from sklearn.tree import DecisionTreeClassifier +from sklearn.metrics import accuracy_score +from sklearn.metrics import classification_report + +# Function importing Dataset +def importdata(): + balance_data = pd.read_excel('Train.xlsx', sheet_name="Sheet1").to_numpy() + + # Printing the dataswet shape + print ("Dataset Length: ", len(balance_data)) + print ("Dataset Shape: ", balance_data.shape) + + # Printing the dataset obseravtions + print ("Dataset: ",balance_data.head()) + return balance_data + +# Function to split the dataset +def splitdataset(balance_data): + + # Separating the target variable + X = balance_data.values[:, 1:5] + Y = balance_data.values[:, 0] + + # Splitting the dataset into train and test + X_train, X_test, y_train, y_test = train_test_split( + X, Y, test_size = 0.3, random_state = 100) + + return X, Y, X_train, X_test, y_train, y_test + +# Function to perform training with giniIndex. +def train_using_gini(X_train, X_test, y_train): + + # Creating the classifier object + clf_gini = DecisionTreeClassifier(criterion = "gini", + random_state = 100,max_depth=3, min_samples_leaf=5) + + # Performing training + clf_gini.fit(X_train, y_train) + return clf_gini + +# Function to perform training with entropy. +def tarin_using_entropy(X_train, X_test, y_train): + + # Decision tree with entropy + clf_entropy = DecisionTreeClassifier( + criterion = "entropy", random_state = 100, + max_depth = 3, min_samples_leaf = 5) + + # Performing training + clf_entropy.fit(X_train, y_train) + return clf_entropy + + +# Function to make predictions +def prediction(X_test, clf_object): + + # Predicton on test with giniIndex + y_pred = clf_object.predict(X_test) + print("Predicted values:") + print(y_pred) + return y_pred + +# Function to calculate accuracy +def cal_accuracy(y_test, y_pred): + + print("Confusion Matrix: ", + confusion_matrix(y_test, y_pred)) + + print ("Accuracy : ", + accuracy_score(y_test,y_pred)*100) + + print("Report : ", + classification_report(y_test, y_pred)) + +# Driver code +def main(): + + # Building Phase + data = importdata() + X, Y, X_train, X_test, y_train, y_test = splitdataset(data) + clf_gini = train_using_gini(X_train, X_test, y_train) + clf_entropy = tarin_using_entropy(X_train, X_test, y_train) + + # Operational Phase + print("Results Using Gini Index:") + + # Prediction using gini + y_pred_gini = prediction(X_test, clf_gini) + cal_accuracy(y_test, y_pred_gini) + + print("Results Using Entropy:") + # Prediction using entropy + y_pred_entropy = prediction(X_test, clf_entropy) + cal_accuracy(y_test, y_pred_entropy) + + +# Calling main function +if __name__=="__main__": + main() \ No newline at end of file diff --git a/.history/app_20201231201209.py b/.history/app_20201231201209.py new file mode 100644 index 0000000..c5ce610 --- /dev/null +++ b/.history/app_20201231201209.py @@ -0,0 +1,96 @@ +import numpy as np +import pandas as pd +from sklearn.metrics import confusion_matrix +from sklearn.model_selection import train_test_split +from sklearn.tree import DecisionTreeClassifier +from sklearn.metrics import accuracy_score +from sklearn.metrics import classification_report + +# Function importing Dataset +def importdata(): + balance_data = pd.read_excel('Train.xlsx', sheet_name="Sheet1").to_numpy() + return balance_data + +# Function to split the dataset +def splitdataset(balance_data): + + # Separating the target variable + X = balance_data.values[:, 1:5] + Y = balance_data.values[:, 0] + + # Splitting the dataset into train and test + X_train, X_test, y_train, y_test = train_test_split( + X, Y, test_size = 0.3, random_state = 100) + + return X, Y, X_train, X_test, y_train, y_test + +# Function to perform training with giniIndex. +def train_using_gini(X_train, X_test, y_train): + + # Creating the classifier object + clf_gini = DecisionTreeClassifier(criterion = "gini", + random_state = 100,max_depth=3, min_samples_leaf=5) + + # Performing training + clf_gini.fit(X_train, y_train) + return clf_gini + +# Function to perform training with entropy. +def tarin_using_entropy(X_train, X_test, y_train): + + # Decision tree with entropy + clf_entropy = DecisionTreeClassifier( + criterion = "entropy", random_state = 100, + max_depth = 3, min_samples_leaf = 5) + + # Performing training + clf_entropy.fit(X_train, y_train) + return clf_entropy + + +# Function to make predictions +def prediction(X_test, clf_object): + + # Predicton on test with giniIndex + y_pred = clf_object.predict(X_test) + print("Predicted values:") + print(y_pred) + return y_pred + +# Function to calculate accuracy +def cal_accuracy(y_test, y_pred): + + print("Confusion Matrix: ", + confusion_matrix(y_test, y_pred)) + + print ("Accuracy : ", + accuracy_score(y_test,y_pred)*100) + + print("Report : ", + classification_report(y_test, y_pred)) + +# Driver code +def main(): + + # Building Phase + data = importdata() + X, Y, X_train, X_test, y_train, y_test = splitdataset(data) + clf_gini = train_using_gini(X_train, X_test, y_train) + clf_entropy = tarin_using_entropy(X_train, X_test, y_train) + + # Operational Phase + print("Results Using Gini Index:") + + # Prediction using gini + y_pred_gini = prediction(X_test, clf_gini) + cal_accuracy(y_test, y_pred_gini) + + print("Results Using Entropy:") + # Prediction using entropy + y_pred_entropy = prediction(X_test, clf_entropy) + cal_accuracy(y_test, y_pred_entropy) + + +# Calling main function +if __name__=="__main__": + main() \ No newline at end of file diff --git a/.history/app_20201231201258.py b/.history/app_20201231201258.py new file mode 100644 index 0000000..011819d --- /dev/null +++ b/.history/app_20201231201258.py @@ -0,0 +1,96 @@ +import numpy as np +import pandas as pd +from sklearn.metrics import confusion_matrix +from sklearn.model_selection import train_test_split +from sklearn.tree import DecisionTreeClassifier +from sklearn.metrics import accuracy_score +from sklearn.metrics import classification_report + +# Function importing Dataset +def importdata(): + dataset = pd.read_excel('Train.xlsx', sheet_name="Sheet1").to_numpy() + return dataset + +# Function to split the dataset +def splitdataset(dataset): + + # Separating the target variable + X = dataset.values[:, 1:5] + Y = dataset.values[:, 0] + + # Splitting the dataset into train and test + X_train, X_test, y_train, y_test = train_test_split( + X, Y, test_size = 0.3, random_state = 100) + + return X, Y, X_train, X_test, y_train, y_test + +# Function to perform training with giniIndex. +def train_using_gini(X_train, X_test, y_train): + + # Creating the classifier object + clf_gini = DecisionTreeClassifier(criterion = "gini", + random_state = 100,max_depth=3, min_samples_leaf=5) + + # Performing training + clf_gini.fit(X_train, y_train) + return clf_gini + +# Function to perform training with entropy. +def tarin_using_entropy(X_train, X_test, y_train): + + # Decision tree with entropy + clf_entropy = DecisionTreeClassifier( + criterion = "entropy", random_state = 100, + max_depth = 3, min_samples_leaf = 5) + + # Performing training + clf_entropy.fit(X_train, y_train) + return clf_entropy + + +# Function to make predictions +def prediction(X_test, clf_object): + + # Predicton on test with giniIndex + y_pred = clf_object.predict(X_test) + print("Predicted values:") + print(y_pred) + return y_pred + +# Function to calculate accuracy +def cal_accuracy(y_test, y_pred): + + print("Confusion Matrix: ", + confusion_matrix(y_test, y_pred)) + + print ("Accuracy : ", + accuracy_score(y_test,y_pred)*100) + + print("Report : ", + classification_report(y_test, y_pred)) + +# Driver code +def main(): + + # Building Phase + data = importdata() + X, Y, X_train, X_test, y_train, y_test = splitdataset(data) + clf_gini = train_using_gini(X_train, X_test, y_train) + clf_entropy = tarin_using_entropy(X_train, X_test, y_train) + + # Operational Phase + print("Results Using Gini Index:") + + # Prediction using gini + y_pred_gini = prediction(X_test, clf_gini) + cal_accuracy(y_test, y_pred_gini) + + print("Results Using Entropy:") + # Prediction using entropy + y_pred_entropy = prediction(X_test, clf_entropy) + cal_accuracy(y_test, y_pred_entropy) + + +# Calling main function +if __name__=="__main__": + main() \ No newline at end of file diff --git a/.history/app_20201231201711.py b/.history/app_20201231201711.py new file mode 100644 index 0000000..93e927b --- /dev/null +++ b/.history/app_20201231201711.py @@ -0,0 +1,96 @@ +import numpy as np +import pandas as pd +from sklearn.metrics import confusion_matrix +from sklearn.model_selection import train_test_split +from sklearn.tree import DecisionTreeClassifier +from sklearn.metrics import accuracy_score +from sklearn.metrics import classification_report + +# Function importing Dataset +def importdata(): + balance_data = pd.read_csv( 'Train.csv',sep= ',', header = None) + return dataset + +# Function to split the dataset +def splitdataset(dataset): + + # Separating the target variable + X = dataset.values[:, 1:5] + Y = dataset.values[:, 0] + + # Splitting the dataset into train and test + X_train, X_test, y_train, y_test = train_test_split( + X, Y, test_size = 0.3, random_state = 100) + + return X, Y, X_train, X_test, y_train, y_test + +# Function to perform training with giniIndex. +def train_using_gini(X_train, X_test, y_train): + + # Creating the classifier object + clf_gini = DecisionTreeClassifier(criterion = "gini", + random_state = 100,max_depth=3, min_samples_leaf=5) + + # Performing training + clf_gini.fit(X_train, y_train) + return clf_gini + +# Function to perform training with entropy. +def tarin_using_entropy(X_train, X_test, y_train): + + # Decision tree with entropy + clf_entropy = DecisionTreeClassifier( + criterion = "entropy", random_state = 100, + max_depth = 3, min_samples_leaf = 5) + + # Performing training + clf_entropy.fit(X_train, y_train) + return clf_entropy + + +# Function to make predictions +def prediction(X_test, clf_object): + + # Predicton on test with giniIndex + y_pred = clf_object.predict(X_test) + print("Predicted values:") + print(y_pred) + return y_pred + +# Function to calculate accuracy +def cal_accuracy(y_test, y_pred): + + print("Confusion Matrix: ", + confusion_matrix(y_test, y_pred)) + + print ("Accuracy : ", + accuracy_score(y_test,y_pred)*100) + + print("Report : ", + classification_report(y_test, y_pred)) + +# Driver code +def main(): + + # Building Phase + data = importdata() + X, Y, X_train, X_test, y_train, y_test = splitdataset(data) + clf_gini = train_using_gini(X_train, X_test, y_train) + clf_entropy = tarin_using_entropy(X_train, X_test, y_train) + + # Operational Phase + print("Results Using Gini Index:") + + # Prediction using gini + y_pred_gini = prediction(X_test, clf_gini) + cal_accuracy(y_test, y_pred_gini) + + print("Results Using Entropy:") + # Prediction using entropy + y_pred_entropy = prediction(X_test, clf_entropy) + cal_accuracy(y_test, y_pred_entropy) + + +# Calling main function +if __name__=="__main__": + main() \ No newline at end of file diff --git a/.history/app_20201231201714.py b/.history/app_20201231201714.py new file mode 100644 index 0000000..dadd4e6 --- /dev/null +++ b/.history/app_20201231201714.py @@ -0,0 +1,96 @@ +import numpy as np +import pandas as pd +from sklearn.metrics import confusion_matrix +from sklearn.model_selection import train_test_split +from sklearn.tree import DecisionTreeClassifier +from sklearn.metrics import accuracy_score +from sklearn.metrics import classification_report + +# Function importing Dataset +def importdata(): + dataset = pd.read_csv( 'Train.csv',sep= ',', header = None) + return dataset + +# Function to split the dataset +def splitdataset(dataset): + + # Separating the target variable + X = dataset.values[:, 1:5] + Y = dataset.values[:, 0] + + # Splitting the dataset into train and test + X_train, X_test, y_train, y_test = train_test_split( + X, Y, test_size = 0.3, random_state = 100) + + return X, Y, X_train, X_test, y_train, y_test + +# Function to perform training with giniIndex. +def train_using_gini(X_train, X_test, y_train): + + # Creating the classifier object + clf_gini = DecisionTreeClassifier(criterion = "gini", + random_state = 100,max_depth=3, min_samples_leaf=5) + + # Performing training + clf_gini.fit(X_train, y_train) + return clf_gini + +# Function to perform training with entropy. +def tarin_using_entropy(X_train, X_test, y_train): + + # Decision tree with entropy + clf_entropy = DecisionTreeClassifier( + criterion = "entropy", random_state = 100, + max_depth = 3, min_samples_leaf = 5) + + # Performing training + clf_entropy.fit(X_train, y_train) + return clf_entropy + + +# Function to make predictions +def prediction(X_test, clf_object): + + # Predicton on test with giniIndex + y_pred = clf_object.predict(X_test) + print("Predicted values:") + print(y_pred) + return y_pred + +# Function to calculate accuracy +def cal_accuracy(y_test, y_pred): + + print("Confusion Matrix: ", + confusion_matrix(y_test, y_pred)) + + print ("Accuracy : ", + accuracy_score(y_test,y_pred)*100) + + print("Report : ", + classification_report(y_test, y_pred)) + +# Driver code +def main(): + + # Building Phase + data = importdata() + X, Y, X_train, X_test, y_train, y_test = splitdataset(data) + clf_gini = train_using_gini(X_train, X_test, y_train) + clf_entropy = tarin_using_entropy(X_train, X_test, y_train) + + # Operational Phase + print("Results Using Gini Index:") + + # Prediction using gini + y_pred_gini = prediction(X_test, clf_gini) + cal_accuracy(y_test, y_pred_gini) + + print("Results Using Entropy:") + # Prediction using entropy + y_pred_entropy = prediction(X_test, clf_entropy) + cal_accuracy(y_test, y_pred_entropy) + + +# Calling main function +if __name__=="__main__": + main() \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c8a63ca --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python38-32\\python.exe" +} \ No newline at end of file diff --git a/Train.csv b/Train.csv new file mode 100644 index 0000000..d5952af --- /dev/null +++ b/Train.csv @@ -0,0 +1,300 @@ +-1,1,-1,1,1,1,-1,-1,-1,1,0,1,1,1,-1,1,1 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,0,1 +0,1,1,0,1,1,-1,-1,-1,-1,1,-1,1,1,-1,-1,2 +-1,1,1,-1,0,1,-1,-1,-1,-1,1,-1,1,-1,-1,1,2 +1,1,1,-1,1,1,-1,-1,-1,-1,1,0,1,1,1,1,2 +-1,1,1,-1,1,1,-1,-1,-1,-1,-1,-1,1,1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,-1,0,1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,-1,1,1,0,1,1 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,0,0,2 +-1,1,-1,1,1,-1,-1,-1,-1,-1,0,0,1,1,-1,-1,1 +-1,1,-1,1,1,1,-1,-1,-1,-1,1,0,1,1,0,0,1 +-1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,1,-1,0,0,2 +1,1,1,-1,-1,1,1,1,0,1,1,0,-1,-1,1,0,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,0,-1,0,1 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,0,-1,0,1 +1,-1,1,-1,-1,1,-1,1,0,1,1,1,0,-1,-1,1,2 +1,0,1,-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,0,1,1,-1,-1,1 +1,1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,1,2 +1,1,1,-1,-1,0,1,1,-1,-1,1,-1,-1,-1,1,1,2 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,0,0,1,1,2 +1,0,1,-1,-1,-1,1,1,1,-1,-1,0,-1,-1,1,1,2 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,1,2 +1,1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,1,2 +1,-1,-1,1,1,-1,1,1,1,-1,-1,1,1,1,-1,1,1 +1,1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +1,1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,0,2 +1,1,1,-1,-1,-1,1,1,1,1,-1,-1,1,-1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +1,0,-1,1,1,1,-1,-1,-1,1,-1,1,0,1,-1,1,1 +1,1,-1,1,1,1,-1,-1,-1,-1,-1,-1,1,1,-1,1,1 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +1,-1,1,-1,-1,-1,1,1,1,1,1,-1,1,-1,1,1,2 +1,1,1,-1,-1,-1,1,1,1,-1,0,-1,-1,-1,-1,0,2 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,-1,1,2 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +1,1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,-1,0,2 +1,1,1,-1,-1,-1,1,1,0,-1,1,-1,-1,-1,1,0,2 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,-1,1,2 +1,-1,1,-1,-1,-1,1,1,0,-1,-1,-1,-1,-1,-1,0,2 +1,1,1,-1,-1,-1,1,1,-1,-1,-1,-1,-1,1,-1,1,2 +-1,0,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +1,1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,1,2 +-1,1,-1,1,1,1,-1,0,-1,-1,-1,1,1,1,-1,1,1 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,0,0,2 +1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +1,1,1,-1,-1,1,0,1,-1,-1,1,1,-1,1,-1,0,2 +-1,1,-1,1,1,1,-1,-1,-1,1,1,1,1,1,-1,-1,1 +-1,1,-1,1,1,1,-1,-1,-1,1,1,1,1,1,-1,1,1 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,0,1 +1,1,1,-1,-1,0,1,1,1,1,-1,-1,-1,-1,1,0,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,-1,0,2 +1,1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,-1,1,2 +1,1,1,-1,-1,-1,1,1,1,-1,1,0,-1,-1,-1,1,2 +1,1,-1,1,1,1,1,-1,-1,-1,-1,1,1,1,-1,1,1 +-1,1,-1,1,1,1,1,-1,-1,-1,1,1,1,1,-1,1,1 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +1,0,1,-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,1,2 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,0,2 +1,1,1,1,-1,-1,1,1,1,1,1,-1,-1,1,-1,1,1 +1,1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,0,2 +1,-1,1,1,1,-1,1,-1,1,1,-1,-1,1,1,-1,1,1 +1,-1,1,-1,-1,1,1,1,1,1,1,-1,-1,1,1,1,2 +-1,1,1,1,1,1,-1,-1,-1,1,1,-1,1,1,-1,-1,2 +-1,1,1,-1,1,1,-1,-1,-1,1,1,1,1,1,-1,0,2 +-1,1,1,1,1,1,-1,1,1,1,1,1,1,1,-1,1,2 +1,1,1,-1,1,1,-1,-1,-1,1,1,-1,1,1,-1,1,2 +-1,-1,-1,1,1,-1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,1,-1,0,2 +1,-1,1,-1,-1,-1,1,1,0,1,1,1,-1,1,-1,1,2 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +-1,0,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +-1,-1,1,-1,1,1,-1,-1,-1,1,1,1,1,1,-1,1,2 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +-1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1,-1,1,2 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,0,1,1,-1,0,1 +1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,1,1,-1,-1,-1,1,1,2 +1,1,1,-1,-1,-1,1,1,-1,1,1,-1,-1,0,1,1,2 +1,-1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,-1,1,1,2 +1,-1,1,-1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2 +1,-1,1,-1,1,1,-1,0,0,-1,1,0,0,0,1,1,2 +-1,-1,0,-1,1,1,-1,-1,-1,-1,1,1,1,1,-1,1,2 +1,-1,-1,-1,1,1,1,-1,-1,1,1,-1,-1,1,-1,1,2 +1,1,1,-1,-1,1,1,1,1,1,-1,-1,-1,-1,-1,1,2 +-1,-1,-1,1,1,1,-1,-1,-1,1,0,1,1,1,-1,-1,1 +1,-1,-1,-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,1,2 +1,-1,1,-1,1,1,1,-1,-1,-1,1,-1,-1,1,-1,1,2 +1,-1,1,-1,1,1,1,-1,0,-1,1,-1,1,1,1,0,2 +1,-1,-1,-1,1,1,0,-1,0,-1,-1,-1,-1,1,0,-1,2 +0,0,0,0,-1,1,1,1,1,1,0,-1,1,1,-1,0,2 +1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,-1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1 +-1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1 +1,0,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +1,0,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +-1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,2 +-1,0,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,0,1,-1,-1,1,1,1,-1,1,-1,-1,-1,-1,1,0,2 +-1,0,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +1,0,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +-1,0,1,-1,0,0,1,1,1,1,0,0,-1,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,1,2 +1,1,1,1,1,-1,1,-1,-1,-1,-1,1,1,1,-1,1,1 +-1,1,1,-1,-1,-1,-1,1,1,1,1,-1,-1,-1,1,1,2 +-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +-1,0,0,1,1,1,-1,-1,-1,1,-1,1,1,1,0,1,1 +-1,0,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,-1,1,-1,1,1 +1,0,-1,1,1,1,-1,1,-1,-1,-1,1,1,1,-1,1,1 +-1,0,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +-1,0,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,0,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +-1,0,1,-1,-1,-1,1,1,1,1,1,-1,-1,1,1,1,2 +-1,0,1,-1,-1,1,-1,1,-1,1,1,-1,-1,-1,1,1,2 +0,0,1,-1,-1,-1,1,1,0,-1,0,0,0,0,0,0,2 +1,0,1,-1,0,0,1,1,1,-1,-1,-1,-1,-1,1,0,2 +-1,-1,1,-1,-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,2 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,0,1 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,0,1 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +-1,1,-1,1,1,1,-1,-1,-1,1,1,1,1,-1,-1,1,1 +-1,0,1,-1,-1,1,1,1,1,1,-1,-1,-1,1,1,1,2 +-1,-1,1,-1,-1,1,1,1,1,1,-1,-1,-1,1,-1,1,2 +1,-1,1,-1,-1,1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +-1,-1,-1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1,1 +-1,-1,-1,1,1,1,1,1,1,1,-1,1,1,1,0,1,1 +-1,-1,-1,1,1,1,1,1,1,1,-1,1,1,1,-1,1,1 +0,1,-1,-1,-1,-1,1,1,1,1,1,-1,-1,1,1,1,2 +-1,0,-1,-1,-1,1,1,1,1,1,-1,-1,-1,1,-1,0,2 +-1,-1,1,-1,-1,1,1,1,1,1,-1,-1,-1,1,0,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1 +-1,-1,-1,-1,-1,-1,1,1,1,1,-1,1,1,1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,1,1,1,1,1,-1,1,1 +-1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,1,-1,1,1,2 +1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +1,1,0,1,1,1,-1,-1,1,-1,1,0,1,1,-1,-1,2 +-1,1,1,-1,-1,1,-1,1,1,1,1,-1,1,-1,1,1,2 +-1,-1,1,-1,-1,1,1,1,1,1,1,-1,1,1,-1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +1,1,-1,1,1,1,-1,0,-1,-1,1,1,1,1,-1,-1,1 +1,1,-1,1,1,1,1,-1,-1,-1,-1,1,1,1,-1,-1,1 +-1,1,1,-1,-1,1,-1,1,1,-1,1,-1,0,0,0,0,2 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +-1,1,1,-1,0,1,1,1,1,1,1,-1,-1,0,-1,0,2 +-1,1,-1,-1,1,1,-1,-1,-1,-1,-1,1,1,1,1,1,2 +-1,-1,-1,-1,1,1,1,-1,-1,-1,-1,1,1,1,-1,1,2 +-1,1,1,-1,1,1,1,-1,-1,-1,1,1,1,1,-1,1,2 +-1,1,-1,1,1,1,1,-1,-1,-1,-1,1,1,1,-1,1,1 +1,1,-1,-1,1,1,-1,-1,-1,1,1,1,1,1,-1,0,2 +-1,1,1,-1,-1,1,1,1,1,1,1,-1,1,-1,1,0,2 +1,-1,1,1,1,1,1,1,-1,1,-1,1,-1,1,1,1,1 +1,-1,1,1,1,1,1,1,-1,1,1,1,-1,1,1,1,1 +-1,-1,1,1,1,1,-1,-1,1,-1,-1,-1,1,1,1,0,2 +1,-1,1,-1,-1,-1,1,1,1,1,1,-1,-1,1,-1,1,2 +1,-1,1,-1,-1,-1,0,1,1,0,-1,-1,-1,-1,1,0,2 +-1,0,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,1,1,-1,-1,-1,1,1,1,1,-1,-1,0,-1,1,1,2 +-1,-1,-1,-1,1,1,-1,-1,-1,1,1,1,1,1,-1,1,2 +1,0,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +-1,1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,2 +-1,-1,1,1,-1,-1,1,1,1,1,-1,-1,-1,1,1,1,1 +-1,-1,1,-1,-1,-1,1,1,1,1,1,0,-1,-1,1,1,2 +0,-1,1,-1,-1,-1,1,1,1,1,1,0,-1,-1,1,0,2 +1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,2 +0,0,1,-1,-1,-1,1,1,1,0,0,-1,-1,-1,0,0,2 +-1,-1,1,-1,-1,-1,1,1,1,1,1,-1,-1,-1,1,1,2 +1,0,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2 +-1,-1,1,-1,-1,-1,1,1,1,1,1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,1,-1,0,-1,-1,1,1,2 +-1,1,1,-1,-1,-1,1,1,1,1,1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +1,0,-1,1,1,1,1,1,-1,-1,-1,1,0,1,0,0,1 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +-1,0,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,0,1 +-1,1,-1,1,1,1,-1,0,-1,1,-1,1,1,1,-1,0,1 +-1,-1,-1,-1,-1,1,1,1,1,-1,1,-1,-1,1,1,1,2 +-1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +-1,-1,1,-1,-1,1,1,0,1,1,1,-1,-1,-1,1,1,2 +-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,0,1 +-1,-1,1,-1,-1,1,1,1,1,-1,1,1,-1,1,1,0,2 +-1,0,1,1,1,1,-1,-1,-1,1,-1,-1,-1,1,-1,1,1 +-1,-1,1,-1,-1,-1,1,1,1,1,1,-1,0,-1,1,0,2 +1,1,-1,-1,-1,-1,1,1,0,-1,1,-1,-1,-1,1,0,2 +-1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,1,1,1,2 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,1,1,1,1,1,1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,2 +-1,-1,1,1,1,1,1,-1,-1,-1,-1,1,1,1,-1,1,1 +-1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,-1,-1,1,2 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,-1,1,-1,1,1 +1,0,-1,1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,-1,1,-1,-1,-1,1,1,1,-1,-1,0,-1,-1,1,1,2 +1,1,1,-1,-1,-1,1,1,1,1,1,-1,-1,-1,-1,1,2 +-1,-1,1,-1,-1,1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,-1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,1,2 +-1,1,1,-1,-1,1,-1,1,1,-1,1,-1,1,-1,1,1,2 +1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,1,1,1,1,1,-1,-1,-1,1,1,1,1,1,1,0,2 +1,1,1,-1,1,1,-1,-1,0,1,-1,-1,-1,1,1,0,2 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +1,0,1,-1,-1,-1,1,1,1,-1,0,-1,-1,-1,1,0,2 +-1,1,1,-1,-1,-1,-1,1,1,-1,1,-1,-1,1,1,1,2 +-1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +-1,1,1,-1,1,1,-1,-1,-1,-1,1,-1,-1,-1,1,0,2 +1,-1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,0,2 +-1,-1,-1,1,1,-1,-1,-1,-1,-1,-1,1,1,1,-1,1,1 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,0,1,1,-1,-1,1 +-1,0,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1 +-1,-1,1,-1,-1,1,1,1,1,-1,1,-1,-1,1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,0,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,0,-1,1,1 +-1,1,1,1,1,1,1,-1,1,1,-1,1,1,1,-1,1,1 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1 +-1,1,-1,1,1,1,-1,-1,1,1,-1,1,1,1,-1,1,1 +-1,1,1,-1,-1,-1,1,1,-1,-1,1,-1,-1,-1,1,0,2 +-1,1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,1,1 +-1,-1,1,-1,-1,1,1,1,1,1,-1,1,-1,1,1,0,2 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,-1,1,-1,1,1 +-1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,1,1,1,-1,-1,-1,1,1,-1,-1,1,2 +1,1,1,-1,-1,-1,1,1,0,1,-1,-1,-1,-1,1,0,2 +-1,-1,-1,1,1,1,1,-1,-1,1,-1,-1,-1,1,1,1,1 +-1,-1,-1,1,-1,1,1,0,1,-1,-1,1,1,1,-1,1,1 +1,-1,1,-1,-1,-1,1,1,1,1,1,-1,-1,1,1,1,2 +-1,-1,-1,-1,1,1,1,-1,-1,-1,-1,0,-1,1,1,1,1 +-1,1,1,-1,-1,-1,1,1,0,1,-1,-1,1,-1,1,1,2 +1,-1,1,-1,-1,-1,-1,1,1,1,-1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,1,1,-1,-1,-1,1,1,2 +-1,-1,1,-1,1,-1,1,1,1,-1,-1,-1,-1,1,0,1,2 +-1,1,-1,1,1,1,0,-1,-1,-1,-1,0,1,1,-1,-1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +1,-1,1,-1,-1,-1,1,1,0,-1,1,-1,-1,-1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,-1,1 +1,1,1,-1,-1,1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +-1,1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1 +1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,-1,1,2 +1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,1,1,1,2 +-1,-1,-1,1,1,-1,-1,-1,-1,-1,-1,1,-1,1,-1,-1,1 +-1,-1,-1,1,1,-1,-1,-1,-1,-1,-1,1,-1,1,0,1,1 +-1,-1,1,-1,-1,-1,1,1,1,-1,1,-1,-1,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,-1,1,2 +1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,-1,1,2 +1,-1,1,-1,-1,0,1,1,1,-1,0,0,-1,0,0,0,2 +1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,0,-1,1,1,2 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,-1,1,2 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,-1,1,-1,1,1 +1,-1,-1,-1,-1,-1,1,1,1,1,-1,-1,-1,1,-1,1,1 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,0,2 +1,-1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,-1,1,2 +1,1,1,-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,2 +-1,1,1,-1,-1,1,1,1,1,-1,0,-1,-1,-1,-1,1,2 +1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,0,2 +-1,-1,-1,1,1,-1,1,1,-1,1,-1,1,1,1,0,1,1 +1,-1,-1,1,1,-1,1,-1,-1,1,-1,-1,-1,1,1,1,1 +-1,-1,1,-1,1,1,-1,-1,-1,-1,0,-1,1,1,-1,-1,2 +-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,1,-1,1 +-1,-1,1,1,1,1,1,1,-1,1,-1,-1,-1,1,-1,1,1 +-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1 +-1,-1,-1,1,1,1,-1,-1,-1,1,-1,1,1,1,-1,-1,1 +-1,-1,1,-1,-1,-1,1,1,1,1,-1,-1,-1,1,-1,1,2 +1,-1,1,1,1,1,1,1,-1,-1,-1,-1,-1,1,-1,0,1 +1,-1,-1,1,1,1,-1,-1,-1,1,-1,0,1,1,-1,-1,1 +-1,-1,-1,1,1,1,-1,-1,-1,-1,-1,1,1,1,-1,1,1 +-1,-1,1,-1,-1,1,1,1,1,1,1,-1,-1,-1,0,1,2 +-1,-1,1,-1,-1,1,1,1,1,1,1,-1,-1,-1,1,1,2 +-1,-1,1,-1,-1,1,0,1,0,1,1,1,-1,1,1,0,2 +1,1,1,0,-1,1,1,1,1,-1,1,-1,1,-1,0,1,2 +1,1,1,-1,1,1,-1,1,-1,1,1,-1,1,1,1,1,2 +1,1,1,-1,1,1,-1,1,-1,1,1,-1,1,1,-1,0,2 +1,-1,1,-1,0,1,0,1,1,1,-1,-1,1,1,-1,1,2 +1,-1,1,-1,-1,1,1,1,1,1,-1,0,-1,1,-1,1,2 +1,-1,1,-1,-1,1,1,1,-1,1,1,-1,1,1,1,1,2 +1,1,1,-1,-1,1,1,1,1,1,1,-1,1,1,1,1,2 +-1,1,1,-1,-1,1,1,1,-1,1,1,-1,1,1,-1,0,2 +-1,1,-1,1,1,1,0,0,-1,1,-1,1,0,0,0,0,1 +-1,-1,1,1,1,1,-1,-1,-1,1,-1,1,1,1,1,1,1 +1,1,1,-1,-1,1,1,1,1,1,-1,-1,0,-1,1,0,2 +-1,1,-1,-1,-1,-1,1,1,1,1,1,-1,-1,-1,1,1,2 +-1,1,1,-1,-1,1,1,1,1,1,-1,-1,1,1,1,1,2 diff --git a/Train.xlsx b/Train.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..02158b79a9b7ba98d0d7c74eba3d12387de4c46e GIT binary patch literal 24032 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 z zO*dA(|8LVjZde)0$fV1F>ojgybirsWXLAR5qZ)vEjxbCkh;9ew38Yhn(KVuxTnaU4g9ZVviEg$R?L00Ruyv4!ZSppOn9Oxfy#b*up0 z0Q9CA!hp(PumOmM8oE~0Y7n83fx#n;fdQjZMAwd5fFWx?8-b)9TAT%VvjXD=*pCK6 MJ7B%r6Aj`40Ppl95dZ)H literal 0 HcmV?d00001 diff --git a/app.py b/app.py new file mode 100644 index 0000000..dadd4e6 --- /dev/null +++ b/app.py @@ -0,0 +1,96 @@ +import numpy as np +import pandas as pd +from sklearn.metrics import confusion_matrix +from sklearn.model_selection import train_test_split +from sklearn.tree import DecisionTreeClassifier +from sklearn.metrics import accuracy_score +from sklearn.metrics import classification_report + +# Function importing Dataset +def importdata(): + dataset = pd.read_csv( 'Train.csv',sep= ',', header = None) + return dataset + +# Function to split the dataset +def splitdataset(dataset): + + # Separating the target variable + X = dataset.values[:, 1:5] + Y = dataset.values[:, 0] + + # Splitting the dataset into train and test + X_train, X_test, y_train, y_test = train_test_split( + X, Y, test_size = 0.3, random_state = 100) + + return X, Y, X_train, X_test, y_train, y_test + +# Function to perform training with giniIndex. +def train_using_gini(X_train, X_test, y_train): + + # Creating the classifier object + clf_gini = DecisionTreeClassifier(criterion = "gini", + random_state = 100,max_depth=3, min_samples_leaf=5) + + # Performing training + clf_gini.fit(X_train, y_train) + return clf_gini + +# Function to perform training with entropy. +def tarin_using_entropy(X_train, X_test, y_train): + + # Decision tree with entropy + clf_entropy = DecisionTreeClassifier( + criterion = "entropy", random_state = 100, + max_depth = 3, min_samples_leaf = 5) + + # Performing training + clf_entropy.fit(X_train, y_train) + return clf_entropy + + +# Function to make predictions +def prediction(X_test, clf_object): + + # Predicton on test with giniIndex + y_pred = clf_object.predict(X_test) + print("Predicted values:") + print(y_pred) + return y_pred + +# Function to calculate accuracy +def cal_accuracy(y_test, y_pred): + + print("Confusion Matrix: ", + confusion_matrix(y_test, y_pred)) + + print ("Accuracy : ", + accuracy_score(y_test,y_pred)*100) + + print("Report : ", + classification_report(y_test, y_pred)) + +# Driver code +def main(): + + # Building Phase + data = importdata() + X, Y, X_train, X_test, y_train, y_test = splitdataset(data) + clf_gini = train_using_gini(X_train, X_test, y_train) + clf_entropy = tarin_using_entropy(X_train, X_test, y_train) + + # Operational Phase + print("Results Using Gini Index:") + + # Prediction using gini + y_pred_gini = prediction(X_test, clf_gini) + cal_accuracy(y_test, y_pred_gini) + + print("Results Using Entropy:") + # Prediction using entropy + y_pred_entropy = prediction(X_test, clf_entropy) + cal_accuracy(y_test, y_pred_entropy) + + +# Calling main function +if __name__=="__main__": + main() \ No newline at end of file