首页 文章

Python和scikit学习:我的模型的输出来自nan而不是类别名称

提问于
浏览
-1

我正在研究一个基于输入预测输出类别的ML模型 . 我有一个没有错误的工作模型,但是,我得到nan作为输出而不是'category'值 . 我正在处理的数据都是文本 .

这是我的代码:

import pandas as pd
import numpy as np

df=pd.read_excel('D:\\android\\medicare.xlsx')


X=df['Product Description'].fillna(' ')
Y=df['Category'].astype(str)

from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=.25,random_state=42)

from sklearn.feature_extraction.text import CountVectorizer
count_vector=CountVectorizer()
X_train_count=count_vector.fit_transform((X_train).values.astype('U'))

from sklearn.feature_extraction.text import TfidfTransformer
tfidf_transformer= TfidfTransformer()
X_train_tfidf=tfidf_transformer.fit_transform(X_train_count)
X_train_tfidf.shape

from sklearn.naive_bayes import MultinomialNB

clf = MultinomialNB().fit(X_train_tfidf, Y_train)


from sklearn.pipeline import Pipeline
from sklearn.externals import joblib
import pickle
text_clf=Pipeline([('vect',CountVectorizer()),('tfidf',TfidfTransformer()),('clf',MultinomialNB()),])
text_clf=text_clf.fit(X_train,Y_train)
joblib.dump(text_clf,'model.pkl')
X_test1=['SOTALOL 160MG CP SEC']
predicted=text_clf.predict(X_test1)
proab=text_clf.predict_proba(X_test1)
print (str(predicted[0]))
print (proab)
print (text_clf.classes_)
print (max(proab[0]))

这是我的输出:我期待一个类别代码,但输出为'nan' .

nan
[[3.79853900e-06 2.84302863e-05 7.59252188e-06 ... 2.84280220e-05
  1.89960087e-06 4.28977861e-04]]
['153 Sm-SAMARIUM ACIDE ETHYLENEDIAMINETETRAMETHYLENE PHOSPHONIQUE'
 'ABAISSE LANGUE' 'ABATACEPT' ... 'solutions salines'
 'Électrodes ou câbles pour endoscopie'
 'Étiquettes médicales à usage général ']
0.8404466876175863

1 回答

  • 0

    这意味着 y 中有一些值在加载数据时为 nan . 您将 y 的类型转换为 string ,因此这些 nan 值也会转换为字符串 'nan' ,它被scikit-learn模型视为新类 .

    例:

    import pandas as pd
    import numpy as np
    y = pd.Series(['a', 'b', np.nan]).astype(str)
    
    type(y[2])
    # Output: str
    
    any(y.isna())
    # Output: False
    

    您可以通过执行以下操作来检查 'nan' 是否是模型中的类:

    'nan' in text_clf.classes_
    

    如果它返回 True ,则可能是 'xlsx' 文件中存在一些问题,并且 'Category' 列未完全填充并且具有一些空值或NA值 . 在执行任何其他操作之前,您需要处理这些行 .

相关问题