gpt4 book ai didi

python - 使用高斯混合模型和 scikit learn 进行多类分类

转载 作者:行者123 更新时间:2023-11-30 09:35:16 35 4
gpt4 key购买 nike

我正在尝试使用sklearn.mixture.GaussianMixture对高光谱图像中的像素进行分类。有 15 个类(class)(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 等)后执行此操作,但结果仍然相同。

最佳答案

高斯混合不是分类器。它是一种密度估计方法,期望其组件能够神奇地与您的类保持一致并不是一个好主意。您应该尝试实际的监督技术,因为您显然可以访问标签。 Scikit-learn 提供了很多这样的工具,包括随机森林、KNN、SVM……选择您最喜欢的。 GMM 只是尝试将高斯混合拟合到您的数据中,但没有什么强制它根据标签放置它们(甚至在拟合调用中没有提供)。有时这会起作用 - 但仅适用于琐碎问题,其中类分离得很好,甚至朴素贝叶斯也能起作用,但一般来说,它对于解决问题来说根本是无效的工具。

关于python - 使用高斯混合模型和 scikit learn 进行多类分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44852977/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com