1. 程式人生 > >機器學習-分類2

機器學習-分類2

今天,在分類模型上又添加了如下程式碼。

#單個預測,對輸出的類別進行排序
Class = list(pipe.classes_)
print(Class)
X=['感冒 咳嗽 噁心 頭暈 頭痛']
Pipe = pipe.predict(X)
print(Pipe)
prob = pipe.predict_proba(X)
Prob = sum(prob.tolist(),[])
dict1=dict(zip(Class,Prob))
SORT=sorted(dict1.items(), key=lambda e:e[1], reverse=True)
test1={}
test1[Pipe[0]]=SORT
print(test1)

輸出結果如下

['免疫系統', '內分泌系統', '呼吸系統', '泌尿系統', '消化系統', '淋巴系統', '生殖系統', '面板系統', '神經系統', '肌肉系統', '血液血管', '骨骼系統']
['呼吸系統']
{'呼吸系統': [('呼吸系統', 0.4076064809555076), ('消化系統', 0.12141905116600904), ('骨骼系統', 0.059634970594289), ('神經系統', 0.05574679784390724), ('血液血管', 0.05548952693913911), ('面板系統', 0.05461155325220834), ('免疫系統', 0.05206000062171274), ('肌肉系統', 0.049025147795265955), ('生殖系統', 0.04393882033284857), ('泌尿系統', 0.03716749480813982), ('淋巴系統', 0.034065064514598876), ('內分泌系統', 0.029235091176373674)]}
#對沒有label的檔案進行預測,對預測結果進行排序後輸出json格式檔案
import json
f=open('test_to_predict.txt','r',encoding='utf-8')
test ={}
for i in f:
    i=i.strip('\n')
    Pipe = pipe.predict([i])
#     print(Pipe)
    prob = pipe.predict_proba([i])
    Prob = sum(prob.tolist(),[])
    dict2=dict(zip(Class,Prob))#將2個list整合成dict,也可以整合成tuple
    Sort = sorted(dict2.items(), key=lambda e:e[1], reverse=True)
#     print(Sort)
    test[Pipe[0]]=Sort
print(test)
# print(json.dumps(test,ensure_ascii=False))
with open('predict_result.json','w',encoding='utf-8') as f:
    f.write(json.dumps(test,ensure_ascii=False))
#計算預測的資料集的準確率。predict_text是已經標好了label的資料,用Tab鍵隔開
f=open('predict_text.txt','r',encoding='utf-8')
total_num=0
corr_num=0
for i in f:   
    i = i.encode('utf-8').decode('utf-8-sig').strip('\n').split('\t')#防止讀入txt出現\ufeff的問題
    Pipe = pipe.predict([i[1]])
#     print(Pipe)
#     print([i[0]])
    if [i[0]]==Pipe:
        corr_num += 1
    total_num +=1
# print(corr_num)
print(corr_num/total_num)