Я пытаюсь использовать sklearn.mixture.GaussianMixture для классификации пикселей в гиперспектральном изображении. Всего 15 классов (1-15). Я пробовал использовать метод http://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_covariances.html. Здесь среднее значение инициализируется с помощью means_init, я тоже пробовал это, но моя точность низкая (около 10%). Я также пытался изменить тип ковариации, порог, максимальное количество итераций и количество инициализаций, но результаты остались такими же.
Правильно ли я делаю? Пожалуйста, предоставьте материалы.
import numpy as np
from sklearn.mixture import GaussianMixture
import scipy.io as sio
from sklearn.model_selection import train_test_split
uh_data =sio.loadmat('/Net/hico/data/users/nikhil/contest_uh_casi.mat')
data = uh_data['contest_uh_casi']
uh_labels = sio.loadmat('/Net/hico/data/users/nikhil/contest_gt_tr.mat')
labels = uh_labels['contest_gt_tr']
reshaped_data = np.reshape(data,(data.shape[0]*data.shape[1],data.shape[2]))
print 'reshaped data :',reshaped_data.shape
reshaped_label = np.reshape(labels,(labels.shape[0]*labels.shape[1],-1))
print 'reshaped label :',reshaped_label.shape
con_data = np.hstack((reshaped_data,reshaped_label))
pre_data = con_data[con_data[:,144] > 0]
total_data = pre_data[:,0:144]
total_label = pre_data[:,144]
train_data, test_data, train_label, test_label = train_test_split(total_data, total_label, test_size=0.30, random_state=42)
classifier = GaussianMixture(n_components = 15 ,covariance_type='diag',max_iter=100,random_state = 42,tol=0.1,n_init = 1)
classifier.means_init = np.array([train_data[train_label == i].mean(axis=0)
for i in range(1,16)])
classifier.fit(train_data)
pred_lab_train = classifier.predict(train_data)
train_accuracy = np.mean(pred_lab_train.ravel() == train_label.ravel())*100
print 'train accuracy:',train_accuracy
pred_lab_test = classifier.predict(test_data)
test_accuracy = np.mean(pred_lab_test.ravel()==test_label.ravel())*100
print 'test accuracy:',test_accuracy
Мои данные содержат 66485 пикселей и 144 функции в каждой. Я также попытался сделать это после применения некоторых техник сокращения функций, таких как PCA, LDA, KPCA и т. Д., Но результаты все те же.