У меня есть 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
Как я могу решить эту проблему.Как я могу создать Пользовательский классификатор?Что мне читать?