def LDA_B(rootdir, folderA, folderB, folderC,ft): pos = [] neg = [] imgspos = [] imgsneg = [] if 0 == cmp(ft, 'gabor'): print 'feature type: GABOR' gbf = igbf.GABOR_FEAT() elif 0 == cmp(ft, 'hog'): print 'feature type: HOG' gbf = ihogf.HOG_FEAT() elif 0 == cmp(ft, 'lbp'): print 'feature type: LBP' gbf = ilbpf.LBP_FEAT() elif 0 == cmp(ft, 'dwt'): print 'feature type: DWT' gbf = idwtf.DWT_FEAT() elif 0 == cmp(ft, 'yuv'): print 'feature type: YUV' gbf = iyuvf.YUV_FEAT() else: print 'unknown feature type' return #1--class A fvs, imgs = gbf.gen_folder(os.path.join(rootdir, folderA), 1000) pos.extend(fvs) imgspos.extend(imgs) #2--class B fvs, imgs = gbf.gen_folder(os.path.join(rootdir, folderB), 1000) neg.extend(fvs) imgsneg.extend(imgs) #3--train label0 = [0 for k in range(len(pos))] label1 = [1 for k in range(len(neg))] samples = np.array(pos + neg) labels = np.array(label0 + label1) imgs = imgspos + imgsneg print 'before pca : ', samples.shape # com_numx = 300 # if com_numx + 10 > len(imgs): # com_numx = len(imgs) - 10 clf_pca = PCA(0.95) samples = clf_pca.fit_transform(samples) print 'after pca : ', samples.shape clf_lda = LDA() clf_lda.fit(samples,labels) #4--predict fvs, imgs = gbf.gen_folder(os.path.join(rootdir, folderC), 100000) samples = np.array(fvs) samples = clf_pca.transform(samples) cnf = clf_lda.decision_function(samples) X = [] for k in range(len(imgs)): X.append((cnf[k], imgs[k])) X = sorted(X, key = lambda a : a[0]) lineA = "" #sometimes, the positive set is split into two parts lineB = "" for cnf, img in X: if cnf > 0: lineA += img + '\n' else: lineB += img + '\n' with open('A.txt', 'w') as f: f.writelines(lineA) with open('B.txt', 'w') as f: f.writelines(lineB) return
XX=[] for i in xrange(len(Y)): if Y[i]==value: XX.append(X[i]) return XX out=open(sys.argv[1],"r") model=LDA() X, Y = read_fea(sys.argv[1]) sel = VarianceThreshold(threshold=0) model.fit(sel.fit_transform(X), Y) warning("useful features dim: "+str(len(sel.get_support(True)))) if hasattr(model,'score'): warning("accuracy on training set: "+str(model.score(sel.transform(X), Y))) if len(sys.argv)>2: X, Y = read_fea(sys.argv[2]) warning("accuracy on cv set: "+str(model.score(sel.transform(X), Y))) if len(sys.argv)>3: X, Y = read_fea(sys.argv[3]) warning("accuracy on dev set: "+str(model.score(sel.transform(X), Y))) if len(sys.argv)>4: ref = model.decision_function(sel.transform(X)) X, Y = read_fea(sys.argv[4], True) Z = model.decision_function(sel.transform(X)) Z = (Z-ref.mean(axis=0)[np.newaxis,:])/ref.std(axis=0)[np.newaxis,:] for i in xrange(len(Y)): ZZ=np.array(Z[i][1:]) print('S'+str(Y[i])+' '+str(Z[i][0]))
def LDA_B(rootdir, folderA, folderB, folderC, ft): pos = [] neg = [] imgspos = [] imgsneg = [] if 0 == cmp(ft, 'gabor'): print 'feature type: GABOR' gbf = igbf.GABOR_FEAT() elif 0 == cmp(ft, 'hog'): print 'feature type: HOG' gbf = ihogf.HOG_FEAT() elif 0 == cmp(ft, 'lbp'): print 'feature type: LBP' gbf = ilbpf.LBP_FEAT() elif 0 == cmp(ft, 'dwt'): print 'feature type: DWT' gbf = idwtf.DWT_FEAT() elif 0 == cmp(ft, 'yuv'): print 'feature type: YUV' gbf = iyuvf.YUV_FEAT() else: print 'unknown feature type' return #1--class A fvs, imgs = gbf.gen_folder(os.path.join(rootdir, folderA), 1000) pos.extend(fvs) imgspos.extend(imgs) #2--class B fvs, imgs = gbf.gen_folder(os.path.join(rootdir, folderB), 1000) neg.extend(fvs) imgsneg.extend(imgs) #3--train label0 = [0 for k in range(len(pos))] label1 = [1 for k in range(len(neg))] samples = np.array(pos + neg) labels = np.array(label0 + label1) imgs = imgspos + imgsneg print 'before pca : ', samples.shape # com_numx = 300 # if com_numx + 10 > len(imgs): # com_numx = len(imgs) - 10 clf_pca = PCA(0.95) samples = clf_pca.fit_transform(samples) print 'after pca : ', samples.shape clf_lda = LDA() clf_lda.fit(samples, labels) #4--predict fvs, imgs = gbf.gen_folder(os.path.join(rootdir, folderC), 100000) samples = np.array(fvs) samples = clf_pca.transform(samples) cnf = clf_lda.decision_function(samples) X = [] for k in range(len(imgs)): X.append((cnf[k], imgs[k])) X = sorted(X, key=lambda a: a[0]) lineA = "" #sometimes, the positive set is split into two parts lineB = "" for cnf, img in X: if cnf > 0: lineA += img + '\n' else: lineB += img + '\n' with open('A.txt', 'w') as f: f.writelines(lineA) with open('B.txt', 'w') as f: f.writelines(lineB) return
XX.append(X[i]) return XX out = open(sys.argv[1], "r") model = LDA(solver='lsqr') X, Y = read_fea(sys.argv[1]) sel = VarianceThreshold(threshold=0) model.fit(sel.fit_transform(X), Y) warning("useful features dim: " + str(len(sel.get_support(True)))) if hasattr(model, 'score'): warning("accuracy on training set: " + str(model.score(sel.transform(X), Y))) if len(sys.argv) > 2: X, Y = read_fea(sys.argv[2]) warning("accuracy on cv set: " + str(model.score(sel.transform(X), Y))) if len(sys.argv) > 3: X, Y = read_fea(sys.argv[3]) warning("accuracy on dev set: " + str(model.score(sel.transform(X), Y))) if len(sys.argv) > 4: ref = model.decision_function(sel.transform(X)) X, Y = read_fea(sys.argv[4], True) Z = model.decision_function(sel.transform(X)) Z = (Z - ref.mean(axis=0)[np.newaxis, :]) / ref.std(axis=0)[np.newaxis, :] for i in xrange(len(Y)): ZZ = np.array(Z[i][1:]) print('S' + str(Y[i]) + ' ' + str(Z[i][0]))