Как предсказать выходные данные 3 столбцов на основе входных данных 8 столбцов в Python 3? - PullRequest
1 голос
/ 25 сентября 2019

У меня есть CSV с 12 столбцами (9 столбцов в качестве ввода и 3 столбца в качестве вывода).Во входных столбцах есть 5 столбцов, которые содержат числовые данные, а остальные 4 столбца имеют строковые данные.В выходном столбце 1 столбец содержит значение даты, остальные два столбца состоят из строкового значения.Вот так

#input columns

col_1=<int value>
col_2=<int value>
col_3=<int value>
col_4=<int value>
col_5=<int value>
col_6=<string value>
col_7=<string value>
col_8=<string value>
col_9=<string value>

#output columns

col_10=<string value>
col_11=<string value>
col_12=<date value>

Я должен предсказать данные 3 выходных столбцов на основе данных входного столбца 9.

Как я могу это сделать?Я видел учебник по NLTK и обнаружению положительных / отрицательных и комментариев, а также https://towardsdatascience.com/multi-class-text-classification-with-scikit-learn-12f1e60e0a9f. Я пробовал это с двумя столбцами, где 1 столбец в качестве входных данных, а другой вывод:

import pandas as pd
from io import StringIO
import numpy as np
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.corpus import state_union
from nltk.tokenize import PunktSentenceTokenizer
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB

stop_words=set(stopwords.words("english"))

def stop_words_filtering(wordlist):
    return [w for w in wordlist if not w in stop_words]

def tagg(wordlist):
    try:
        #print(wordlist)
        tagged_list=[]
        tagged=nltk.pos_tag(wordlist)
        return tagged
    except Exception as e:
        print(e)

def filter_words_by_parts_of_speach(words):
    wrd=[word for word,pp in words if pp!='CD' and pp!='']
    return wrd

def join_words(words):
    return ' '.join(words)

df=pd.read_csv('Pescription_details.csv')
col = ['Diagnosis', 'Recomendation/Advice']
df = df[col]
df = df.replace(np.nan, '', regex=True)
df.columns = ['Diagnosis', 'Recomendation/Advice']
for colm in col:
    #df = df[pd.notnull(df[colm])]
    df[colm]=df[colm].str.replace('\n',' ')
    df[colm]=df[colm].apply(word_tokenize)
    df[colm]=df[colm].apply(stop_words_filtering)
    df[colm]=df[colm].apply(tagg)
    df[colm]=df[colm].apply(filter_words_by_parts_of_speach)
    df[colm]=df[colm].apply(join_words)

#df['Diagnosis_id']=df['Diagnosis'].factorize()[0]
#print(df)


X_train, X_test, y_train, y_test = train_test_split(df['Recomendation/Advice'], df['Diagnosis'], random_state = 0)
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(X_train)
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
clf = MultinomialNB().fit(X_train_tfidf, y_train)

print(clf.predict(count_vect.transform(["Hypertension Anxiety Occasional Chest Pain"])))

Но прогнозрезультат пуст.Ожидаемый результат из вышеуказанного кода:

input:
     Hypertension
     Anxiety
     Occasional Chest Pain
Output:
      Coronary angiograpy.
      Follow up After 3 weeks

Как я могу решить эту проблему.Как я могу создать Пользовательский классификатор?Что мне читать?

...