一、差分进化的思想
二、差分进化优化集成参数
def fitness(w): #计算适应度值函数 trainX, Y_train, testX, Y_test = classifier.feature_sec() predict = [] m = classifier.Y_test.shape[0] #for Xi in model.testX: clf1 = classifier.clfLR(trainX, Y_train, testX, Y_test) clf2 = classifier.clfLDA(trainX, Y_train, testX, Y_test) clf3 = classifier.clfNB(trainX, Y_train, testX, Y_test) clf4 = classifier.clfSVM(trainX, Y_train, testX, Y_test) clf5 = classifier.clfPLA(trainX, Y_train, testX, Y_test) f1 = np.array(clf1.predict_proba(testX)) f2 = np.array(clf2.predict_proba(testX)) f3 = np.array(clf3.predict_proba(testX)) f4 = np.array(clf4.predict_proba(testX)) f5 = np.array(clf5._predict_proba_lr(testX)) fit = w[0]*f1 + w[1]*f2 + w[2]*f3 + w[3]*f4 + w[4]*f5 # print("f1",f1) # print("fit:",fit) # s = 0.5 * sum(w) print("w,s:",w) # for i in range(m): # fit = w[0]*f1[i] + w[1]*f2[i] + w[2]*f3[i] + w[3]*f4[i] # if fit >= s: # predict.append(1) # else: # predict.append(0) for fitprob in fit: if fitprob[0]>fitprob[1]: predict.append(0) else: predict.append(1) #print("predict:",predict) #print("Ytest shape:",classifier.Y_test.shape) # TP=TN=FP=FN = 0 # print(m) # for k in range(m): # if Y_test[k]==1 and predict[k]==1:TP += 1 # elif Y_test[k]==0 and predict[k]==0: TN += 1 # elif Y_test[k]==0 and predict[k]==1:FP += 1 # elif Y_test[k]==1 and predict[k]==0:FN += 1 # TP = sum(classifier.Y_test == predict == 1) #将正类预测为正类的样本数 # TN = sum(classifier.Y_test == predict == 0) #将负类预测为负类的样本数 # FP = sum(classifier.Y_test == 0 and predict == 1) #将负类预测为正类的样本数 # FN = sum(classifier.Y_test == 1 and predict == 0) #将正类预测为负类的样本数 # F1 = 2*TP/(2*TP+FN+FP) #F值越大,说明实验效果越好 #Gmean = math.sqrt((TP/(TP+FN))*(TN/(TN+FP))) #用G-mean评价分类器性能 count = sum(predict==Y_test) print("Accuracy,F1 is:",count/m) return count/m