我保存的XGBoost模型可以对相同数据预测不同的结果

时间:2019-08-12 03:41:23

标签: python-3.x xgboost

我尝试使用XGBoost模型来完成中文医学常见问题解答对话框系统,这意味着从候选人到用户输入中选择最相似的问题。在测试过程中,我发现一件很奇怪的事情。当我使用保存的经过训练的模型多次测试相同的数据时,它将给出不同的预测概率。我不知道那是为什么。有人可以告诉我吗?

我尝试的次数越多,出现的差异就越大。我在同一台PC(Ubuntu 18.04)上运行它。

这是奇怪的结果:

enter image description here

以下代码:

def my_model():
    sent_pairs=[]
    with open('/home/linzhu/Desktop/medical_bot/formal_test/test_model/tt.txt', 'r', encoding='UTF-8-sig') as f1:
        file_content = f1.read()
        lines = file_content.split('\n')
        for line in lines:
            sent_pairs.append(line.split('\t'))
    # sent_pairs=[['卵子冻存和卵巢组织冻存有什么区别?', '冻卵卵巢组织冻存有什么意义?', '0'],[],...,[]]
    index=0
    while index<len(sent_pairs):
        q_candidate_sents=[]
        q_candidate_words=[]
        q_input_sent=sent_pairs[index][0]
        print('user input sentence:',q_input_sent)
        q_input_word = devide_results(devide_words_pos_delete_stopwords(q_input_sent))
        for i in range(50):
            q_candidate_sents.append(sent_pairs[index+i][1])
        for q_candidate_sent in q_candidate_sents:
            q_candidate_words.append(devide_results(devide_words_pos_delete_stopwords(q_candidate_sent)))
        print('wait to sorted candidate sentences:',q_candidate_sents)
        features = get_all_features(q_input_sent, q_input_word, q_candidate_sents, q_candidate_words)
        XGBclmodel = joblib.load("/home/linzhu/Desktop/medical_bot/backend/ML_model/XGB_cl_model.m")
        pred_list = XGBclmodel.predict(features)
        pred_proba=XGBclmodel.predict_proba(features)[:,1]   #取第二列作为概率,因为系统并不知道哪种符号是(0 or 1)正样本
        print('corresponding prediction probability:',pred_proba)
        tp = np.argwhere(pred_list >= 0)  # 获取所有的索引
        positive_index_proba = {}  # 存储 {索引:概率}
        for i in tp:
            positive_index_proba[int(i)] = pred_proba[int(i)]
        print('index:probability:',positive_index_proba)
        proba_list = sorted(positive_index_proba.items(), key=lambda item: item[1], reverse=True)
        print('after sorted index,probability:',proba_list)
        # print(proba_list)   #proba_list=[(0,0.99),(6,0.78),...,(99,0.58)]
        predict_sents=[]
        for ea in proba_list:
            predict_sents.append(sent_pairs[index+ea[0]][1])
        print('the sentences that predict:',predict_sents)
        print('--------------------------------------------------------------------------------------')
        # with open('/home/linzhu/Desktop/medical_bot/formal_test/test_model/1to50/my_model.txt', 'a+', encoding='UTF-8-sig') as f:
        #   print(predict_sents[0]+'\n')
        #   f.write(q_input_sent+'\t'+'\t'.join(predict_sents)+'\t'+sent_pairs[index + proba_list[0][0]][2]+'\n')
        index+=50

index=40
while(index>0):
    my_model()
    index-=1

这是tt.txt中的一个行示例,行总数为50:

  

浆细胞性乳腺炎手术治疗后,继续重复吗?? HPV检查一般多久出结果,移植HPV疫苗后还需要吗0

0 个答案:

没有答案