Files
FYS-STK4155/doc/Programs/ProjectsData/pulsars.py
T
2020-05-29 11:39:02 +02:00

96 lines
3.5 KiB
Python

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
import itertools
from PIL import Image
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report,confusion_matrix,accuracy_score,roc_curve,auc
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
warnings.filterwarnings("ignore")
# Reading data using PANDA
data = pd.read_csv("pulsar_stars.csv")
data.head()
#DATA
targets = data["target_class"]
features = data.drop("target_class", axis = 1)
np.random.seed(2018)
#Split data
X_train, X_test, y_train, y_test = train_test_split(features, targets, test_size = 0.2, random_state = 66)
# Define the learning rate, hyperparameter using NUMPY
eta_vals = np.logspace(-5, 1, 7)
lmbd_vals = np.logspace(-5, 1, 7)
n_hidden_neurons = 50
epochs = 100
# Use scikit learn for neural network
DNN_scikit = np.zeros((len(eta_vals), len(lmbd_vals)), dtype=object)
for i, eta in enumerate(eta_vals):
for j, lmbd in enumerate(lmbd_vals):
dnn = MLPClassifier(hidden_layer_sizes=(n_hidden_neurons), activation='logistic',
alpha=lmbd, learning_rate_init=eta, max_iter=epochs, solver='adam')
dnn.fit(X_train, y_train)
DNN_scikit[i][j] = dnn
print("Learning rate = ", eta)
print("Lambda = ", lmbd)
print("Accuracy score on test set: ", dnn.score(X_test, y_test))
print()
#Plot the accuracy as function of learning rate and hyperparameter
sns.set()
train_accuracy = np.zeros((len(eta_vals), len(lmbd_vals)))
test_accuracy = np.zeros((len(eta_vals), len(lmbd_vals)))
for i in range(len(eta_vals)):
for j in range(len(lmbd_vals)):
dnn = DNN_scikit[i][j]
train_pred = dnn.predict(X_train)
test_pred = dnn.predict(X_test)
train_accuracy[i][j] = accuracy_score(y_train, train_pred)
test_accuracy[i][j] = accuracy_score(y_test, test_pred)
fig, ax = plt.subplots(figsize = (10, 10))
sns.heatmap(train_accuracy, annot=True,annot_kws={"size": 18}, ax=ax, cmap="viridis")
ax.set_title("Training Accuracy",fontsize=18)
ax.set_ylabel("$\eta$",fontsize=18)
ax.set_yticklabels(eta_vals)
ax.set_xlabel("$\lambda$",fontsize=18)
ax.set_xticklabels(lmbd_vals)
plt.tick_params(labelsize=18)
fig, ax = plt.subplots(figsize = (10, 10))
sns.heatmap(test_accuracy, annot=True,annot_kws={"size": 18}, ax=ax, cmap="viridis")
ax.set_title("Test Accuracy",fontsize=18)
ax.set_ylabel("$\eta$",fontsize=18)
ax.set_yticklabels(eta_vals)
ax.set_xlabel("$\lambda$",fontsize=18)
ax.set_xticklabels(lmbd_vals)
plt.tick_params(labelsize=18)
#plt.show()
#Plot confusion matrix at optimal values of learning rate and hyperameter
dnn = MLPClassifier(hidden_layer_sizes=(n_hidden_neurons), activation='logistic',
alpha=0.001, learning_rate_init=0.001, max_iter=epochs, solver='adam')
dnn.fit(X_train,y_train)
y_pred=dnn.predict(X_test)
fig1, ax = plt.subplots(figsize = (13,10))
sns.heatmap(confusion_matrix(y_test,y_pred),annot=True,fmt = "d",linecolor="k",linewidths=3)
ax.set_xlabel('True label',fontsize=18)
ax.set_ylabel('Predicted label',fontsize=18)
ax.set_title("CONFUSION MATRIX",fontsize=20)
plt.tick_params(labelsize=18)
plt.show()
# Feature importance -->weights
coef=dnn.coefs_[0]
print (coef)