def predict(modelpath): trainx, trainy = Dataset.GetDatafromDict() X_train, X_test, Y_train, Y_test = train_test_split(trainx, trainy, test_size=0.3, random_state=0) nomtrainx, nomtrainy = Preprocess(X_test, Y_test) model = joblib.load(filename=modelpath) # TestSample=len(Y_test) # possample=[ Y_train[i] for i in range(TestSample) if Y_test[i]==0] # negsample=[ Y_train[i] for i in range(TestSample) if Y_test[i]==1] TestSample = len(Y_test) possample = np.sum(Y_test) negsample = TestSample - possample res = model.predict(nomtrainx) TP, TN, FP, FN = 0, 0, 0, 0 for id, i in enumerate(res): if res[i] == Y_test[id] and Y_test[id] == 1: TP += 1 elif res[i] == Y_test[id] and Y_test[id] == 0: TN += 1 elif res[i] != Y_test[id] and Y_test[id] == 0: FP += 1 else: FN += 1 print("预测结果 :{}---原始数据:{}".format(STATUS[res[id]], STATUS[Y_test[id]])) print("result:acc={} , recall={}".format((TP + TN) / TestSample, TP / (TP + FN)))
def train(): # trainx,trainy=CreatTrainDataset() trainx, trainy = Dataset.GetDatafromDict() X_train, X_test, Y_train, Y_test = train_test_split(trainx, trainy, test_size=0.3, random_state=0) #保持样本的随机性 radom_sample = [i for i in range(len(Y_train))] random.shuffle(radom_sample) X_train = X_train[radom_sample] Y_train = Y_train[radom_sample] nomtrainx, nomtrainy = Preprocess(X_train, Y_train) print(nomtrainx.shape, nomtrainy.shape) # 1、创建了一个线性逻辑分类器实例去拟合数据 logreg = linear_model.LogisticRegression(C=1e5, max_iter=200) # 2、测试数据集 test_data = np.expand_dims(trainx[2], axis=0) # 3、训练拟合函数 logreg.fit(nomtrainx, nomtrainy) # 4、保存模型 joblib.dump(filename='LR.model', value=logreg) # 5、预测结果 out = logreg.predict(test_data) print(out)
return weight def loadData(): train_x = [] train_y = [] fileIn = open('./data/testdata.txt') for line in fileIn.readlines(): lineArr = line.strip().split() train_x.append([1.0, float(lineArr[0]), float(lineArr[1])]) train_y.append(float(lineArr[2])) return mat(train_x), mat(train_y).transpose() if __name__ == "__main__": STATUS = ['非ST', 'ST'] save_model = "weights.pkl" train, label = Dataset.GetDatafromDict() trainarrayx = mat(train) labelarray = mat(label).transpose() logistreg = LR(trainarrayx, labelarray) # print(trainarrayx.shape,labelarray.shape) opts = {"alpha": 0.001, "maxIter": 200, "optimizeType": "gradDescent"} logistreg.train(opts, save_model) weights = logistreg.load_weight(save_model) res = logistreg.predict(weights, trainarrayx, labelarray) for i in range(len(res)): print("预测结果 :{}---原始数据:{}".format(STATUS[res[i]], STATUS[label[i]]))