In [1]:
%load_ext autoreload
%autoreload 2
In [2]:
import os
from time import time
import numpy as np
from data import get_hsi_data
In [3]:
# get data
img = get_hsi_data.get_data()
In [40]:
# reshape image as array
from utils.image import img_as_array
img_Vec = img_as_array(img['original'])
img_gt = img_as_array(img['groundtruth'], gt=True)
In [42]:
# normalize the data
# from utils.image import standardize
# img_Vec = standardize(img_Vec)
from sklearn.preprocessing import Normalizer
img_Vec = Normalizer().fit_transform(img_Vec)
In [43]:
from manifold_learning.se import SchroedingerEigenmaps
from utils.graph import compute_adjacency
t0 = time()
# W = compute_adjacency(X, n_neighbors=20,
# weight='heat',
# metric='euclidean',
# neighbors_algorithm='annoy')
se_model = SchroedingerEigenmaps(n_neighbors=20,
neighbors_algorithm='brute',
n_jobs=6,
potential='ss',
n_components=50,
X_img=img['original'],
sparse=True,
eig_solver='multi')
se_model.fit(img_Vec)
t1 = time()
print('My SE class: {t:.2g} secs'.format(t=t1-t0))
In [44]:
eigVals = se_model.eigVals
X_embedding = se_model.embedding_
import matplotlib.pyplot as plt
%matplotlib inline
fig, ax = plt.subplots()
ax.plot(eigVals)
plt.show()
In [45]:
print(np.shape(X_embedding))
print(np.shape(img_gt))
In [46]:
# pair x and y with gt
from utils.image import img_gt_idx
X, y = img_gt_idx(X_embedding, img_gt, printinfo=True)
# get training and testing samples
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,train_size=.10)
In [47]:
# classification using LDA
from sklearn.lda import LDA
lda_model = LDA()
lda_model.fit(X_train,y_train)
y_pred = lda_model.predict(X_test)
# classification report
from sklearn.metrics import classification_report, confusion_matrix
cm = confusion_matrix(y_test, y_pred)
cr = classification_report(y_test, y_pred)
print(cr)
plt.figure(figsize=(15,15))
plt.matshow(cm,aspect='auto')
plt.title('Confusion matrix')
plt.colorbar()
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()
In [48]:
# predict the entire HSI image
t0 = time()
lda_image = lda_model.predict(X_embedding)
t1 = time()
# reshape the image
lda_image = lda_image.reshape(img['original'][:,:,0].shape)
# Look at Ground Truth for Indian Pines
fig, ax = plt.subplots()
h = ax.imshow(lda_image, cmap=plt.cm.jet)
# colorbar_ax = fig.add_axes([0, 16, 1, 2])
fig.colorbar(h, ticks=[np.linspace(1,16,num=16,endpoint=True)])
plt.title('Indian Pines - Predicted Image - Schroedinger Eigenmaps')
plt.show()
In [65]:
from megaman.geometry import Geometry
from megaman.embedding import SpectralEmbedding
geom = Geometry()
radius = 1.5
adjacency_method = 'cyflann'
cyflann_kwds = {'index_type':'kmeans', 'branching':64, 'iterations':20, 'cb_index':0.4}
adjacency_kwds = {'radius':radius, 'cyflann_kwds':cyflann_kwds}
affinity_method = 'gaussian'
affinity_kwds = {'radius':radius}
laplacian_method = 'geometric'
laplacian_kwds = {'scaling_epps':radius}
geom = Geometry(adjacency_method=adjacency_method, adjacency_kwds=adjacency_kwds,
affinity_method=affinity_method, affinity_kwds=affinity_kwds,
laplacian_method=laplacian_method, laplacian_kwds=laplacian_kwds)
geom.set_data_matrix(X)
geom = Geometry(adjacency_method=adjacency_method, adjacency_kwds=adjacency_kwds,
affinity_method=affinity_method, affinity_kwds=affinity_kwds,
laplacian_method=laplacian_method, laplacian_kwds=laplacian_kwds)
t0 = time()
geom.set_data_matrix(img_Vec)
adjacency_matrix = geom.compute_adjacency_matrix()
spectral = SpectralEmbedding(n_components=50,
eigen_solver='arpack',
geom=geom,
drop_first=False)
X_embedding = spectral.fit_transform(X)
t1 = time()
print('Megaman Time: {t} secs'.format(t=t1-t0))
In [66]:
print(np.shape(X_embedding))
In [56]:
# pair x and y with gt
from utils.image import img_gt_idx
X, y = img_gt_idx(X_embedding, img_gt, printinfo=True)
# get training and testing samples
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,train_size=.50)
# classification using LDA
from sklearn.lda import LDA
lda_model = LDA()
lda_model.fit(X_train,y_train)
y_pred = lda_model.predict(X_test)
# classification report
from sklearn.metrics import classification_report, confusion_matrix
cm = confusion_matrix(y_test, y_pred)
cr = classification_report(y_test, y_pred)
print(cr)
plt.figure(figsize=(15,15))
plt.matshow(cm,aspect='auto')
plt.title('Confusion matrix')
plt.colorbar()
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()
In [68]:
from sklearn.manifold import SpectralEmbedding
t0 = time()
le = SpectralEmbedding(n_components=50,
n_neighbors=20,
affinity='rbf')
X_embedding = le.fit_transform(img_Vec)
t1 = time()
print('Sklearn Time: {t} secs'.format(t=t1-t0))
In [69]:
print(np.shape(X_embedding))
print(np.shape(img_gt))
In [70]:
# pair x and y with gt
from utils.image import img_gt_idx
X, y = img_gt_idx(X_embedding, img_gt, printinfo=True)
# get training and testing samples
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,train_size=.50)
# classification using LDA
from sklearn.lda import LDA
lda_model = LDA()
lda_model.fit(X_train,y_train)
y_pred = lda_model.predict(X_test)
# classification report
from sklearn.metrics import classification_report, confusion_matrix
cm = confusion_matrix(y_test, y_pred)
cr = classification_report(y_test, y_pred)
print(cr)
plt.figure(figsize=(15,15))
plt.matshow(cm,aspect='auto')
plt.title('Confusion matrix')
plt.colorbar()
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()
In [ ]: