#---------------------------数据集--------------------------------- data.target = data.target + 1 stdsc = StandardScaler() label_size = 0.3 #已标记样本比例,分别取0.05-0.1-0.2-0.3-0.4 print("-----------------以下为OSELM-KNN(本文)算法(10)---------------") acc_rem = [] #初始化精度列表 for ii in range(10): #data.target = data.target + 1 #stdsc = StandardScaler() #label_size = 0.5 (train_data, iter_data, test_data) = elmUtils.splitDataWithIter(data.data, data.target, label_size, 0.3) iter_y = BvsbUtils.KNNClassifierResult(train_data[0], train_data[1], iter_data[0]) bvsbc = BvsbClassifier(train_data[0], train_data[1], iter_data[0], iter_y, test_data[0], test_data[1], iterNum=0.1) bvsbc.createOSELM(n_hidden=1000, active_function="sigmoid") bvsbc.trainOSELMWithKNNButBvsb() print(f'OSELM-BVSB-KNN 正确率为{bvsbc.score(test_data[0], test_data[1])}') acc_temp = bvsbc.score(test_data[0], test_data[1]) #记录每次的精度 acc_rem.append(acc_temp) #将每次的精度存入列表 for i in acc_rem: print(f'{i*100:0.2f}', ) #打印每次精度
import numpy as np from sklearn.preprocessing import StandardScaler import time print("------EVM-BVSB-KNN------") # digits = load_digits() data = datasets.load_digits() stdc = StandardScaler() # 均值归一化 label_size = 0.3 data.data = stdc.fit_transform(data.data / 16.0) train, iter, test = elmUtils.splitDataWithIter(data.data, data.target, label_size, 0.2) Y_iter = BvsbUtils.KNNClassifierResult(train[0], train[1], iter[0]) print(Y_iter.size) tic = time.perf_counter_ns() bvsbc = BvsbClassifier(train[0], train[1], iter[0], Y_iter, test[0], test[1], iterNum=0.1) bvsbc.createELM(n_hidden=1000, activation_func="sigmoid", alpha=1.0, random_state=0) bvsbc.X_test = test[0]
acc_rem = [] # 初始化精度列表 #data.data = stdc.fit_transform(data.data / 16.0) data.target = LabelEncoder().fit_transform(data.target) bvsbc = None hidden_nums = 1000 # 隐层结点数量 select_h = 120 # 选出置信度高的前h个样本 for ii in range(10): (train_data, iter_data, test_data) = elmUtils.splitDataWithIter(data.data, data.target, label_size, 0.72) X_train = train_data[0].copy() Y_train = train_data[1].copy() X_iter = iter_data[0].copy() len_iter = len(X_iter) i = 1 while len(X_iter) > (len_iter / 2): nbr = BvsbUtils.KNNClassifier(X_train, Y_train) # KNN # iter_y=nbr.predict(X_iter) pred = nbr.predict_proba(X_iter) iter_y = np.argmax(pred, axis=1) classMax = np.max(pred, axis=1) # 获取未标记样本的最大隶属度 sortIndex = np.argsort(classMax) # 排序后的原下标 iter_index = np.sort(sortIndex[-select_h:]) sort_h_y = iter_y[iter_index] # 返回原来数据置信度最大的h个数 sort_h_data = X_iter[iter_index] len_curr_iter = len(sort_h_y) bvsbc = BvsbClassifier(X_train, Y_train, sort_h_data, sort_h_y, test_data[0], test_data[1], iterNum=0.1) bvsbc.createELM(n_hidden=hidden_nums, activation_func="tanh", alpha=1.0, random_state=0) _data_index = bvsbc.fitAndGetUpdateDataIndex(limit=int(0.2 * len_curr_iter)) if len(_data_index) != 0: X_train = np.r_[bvsbc.X_train, sort_h_data[_data_index]] Y_train = np.r_[bvsbc.Y_train, sort_h_y[_data_index]]
from elm import BvsbClassifier, BvsbUtils from sklearn import datasets from elm import elmUtils from sklearn.preprocessing import StandardScaler import time print("---------OSELM-BVSB-----------") data = elmUtils.readDataFileToData("data/balance-scale.data", targetIndex=0) print(f'数据集大小问{data.target.size}') data.data = StandardScaler().fit_transform(data.data) (train, iter, test) = elmUtils.splitDataWithIter(data.data, data.target, 0.3, 0.3) print(f'训练集大小为{train[1].size}') print(f'迭代训练集大小为{iter[1].size}') print(f'测试集大小为{test[1].size}') iter_y = BvsbUtils.SVMClassifierResult(train[0], train[1], iter[0]) tic = time.perf_counter_ns() bvsbc = BvsbClassifier(train[0], train[1], iter[0], iter_y, test[0], test[1], iterNum=0.1) bvsbc.createOSELM(n_hidden=1000) bvsbc.trainOSELMWithKNNButBvsb() toc = time.perf_counter_ns() print(f'OSELM-BVSB-KNN 正确率为{bvsbc.score(test[0], test[1])}') print(f'OSELM-BVSB-KNN 项目用时:{(toc - tic) / 1000 / 1000} ms')