Очень странное явление при кодировании байесовского классификатора с использованием отбеливания PCA и LDF (линейная дискриминантная функция)
Он используется с данными MNIST.
Сначала я использую данные обработки отбеливания PCA, а затем использую LDF, чтобы решить, является ли образец c1 или c2, где c1 и c2 относятся к категории.
Очень странно, что
Я установил c1 равным 0 и c2 равным 1, правильное значение - 0.8122931442080378, однако, когда я просто меняю c1 на 0 и c2 на 1, правильное значение меняется на 0.5938534278959811 !!!!!!
Я пробую другие случаи, такие как поменять местами 1 и 9 или поменять местами 1 и 7. В приведенных выше случаях правильный вариант не имеет изменений, соответственно 0,9925373134328358 и 0,9889042995839112
Пожалуйста, скажи мне почему. Большое спасибо!
Мой код ниже:
Не забудьте изменить путь к ОС в строке 47/48.
import os
import struct
import numpy as np
import math
from scipy.linalg import fractional_matrix_power
c1=1
c2=0
def load_mnist(path, kind):
"""Load MNIST data from `path`"""
labels_path = os.path.join(path,
'%s-labels-idx1-ubyte'
% kind)
images_path = os.path.join(path,
'%s-images-idx3-ubyte'
% kind)
with open(labels_path, 'rb') as lbpath:
magic, n = struct.unpack('>II',
lbpath.read(8))
labels = np.fromfile(lbpath,
dtype=np.uint8)
with open(images_path, 'rb') as imgpath:
magic, num, rows, cols = struct.unpack('>IIII',
imgpath.read(16))
images = np.fromfile(imgpath,
dtype=np.uint8).reshape(len(labels), 784)
return images, labels
X_train,y_train = load_mnist('./num/MNIST/raw','train')
X_test,y_test = load_mnist('./num/MNIST/raw','t10k')
X_train0=X_train[y_train==c1]
X_train1=X_train[y_train==c2]
y_train0=y_train[y_train==c1]
y_train1=y_train[y_train==c2]
X_test0=X_test[y_test==c1]
X_test1=X_test[y_test==c2]
y_test0=y_test[y_test==c1]
y_test1=y_test[y_test==c2]
X_test01=np.append(X_test0,X_test1,axis=0)
y_test01=np.append(y_test0,y_test1,axis=0)
X_train0=[[1 if i >0 else 0 for i in j] for j in X_train0]
X_train1=[[1 if i >0 else 0 for i in j] for j in X_train1]
X_test01=[[1 if i >0 else 0 for i in j] for j in X_test01]
X_train0=np.array(X_train0)
X_train1=np.array(X_train1)
X_test01=np.array(X_test01)
X_train01=np.append(X_train0,X_train1,axis=0)
y_train01=np.append(y_train0,y_train1,axis=0)
m0=np.size(X_train0,0)
m1=np.size(X_train1,0)
m=np.size(X_train01,0)
m_t=np.size(X_test01,0)
n=np.size(X_train01,1)
sumu=np.zeros([n,1])
for i in X_train01:
i=i.reshape(n,1)
sumu+=i
u=sumu/m
u=u.reshape(1,n)
X_train01_c=X_train01-u
sigma=np.dot(X_train01_c.T,X_train01_c)/m
D,U= np.li