Модель машинного обучения, предсказывающая неверные результаты - PullRequest
0 голосов
/ 23 января 2019

В настоящее время у меня есть набор данных, который содержит имя процедуры из двух столбцов и их CPT. Например, Тотальная артропластика коленного сустава-27447, Тотальная артропластика тазобедренного сустава -27130, Туннельный выпуск открытого запястья-64721. Набор данных имеет 3000 строк и всего 5 кодов CPT (5 классов). Я пишу модель классификации. Когда я пропускаю какой-то неправильный ввод, например, «освобождение туннельного канала для эндопротезирования открытого коленного сустава», он выдает вывод 64721, что неверно. Ниже приведен код, который я использую. Могу ли я узнать, какие изменения я могу внести в свой код, и если выбор нейронной сети для этой проблемы верен?

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.neural_network import MLPClassifier

xl = pd.ExcelFile("dataset.xlsx") # reading the data
df = xl.parse('Query 2.2') 

# shuffling the data
df=df.sample(frac=1)


X_train, X_test, y_train, y_test = train_test_split(df['procedure'], df['code'], random_state = 0,test_size=0.10)
count_vect = CountVectorizer().fit(X_train)
X_train_counts = count_vect.transform(X_train)
tfidf_transformer = TfidfTransformer().fit(X_train_counts)
X_train_tfidf = tfidf_transformer.transform(X_train_counts) 
model= MLPClassifier(hidden_layer_sizes=(25),max_iter=500)
classificationModel=model.fit(X_train_tfidf, y_train)

data_to_be_predicted="open knee arthroplasty carpal tunnel release"

result = classificationModel.predict(count_vect.transform([data_to_be_predicted]))
predictionProbablityMatrix = classificationModel.predict_proba(count_vect.transform([data_to_be_predicted]))
maximumPredictedValue = np.amax(predictionProbablityMatrix)
if maximumPredictedValue * 100 > 99:
    print(result[0])
else:
    print("00000")

1 Ответ

0 голосов
/ 23 января 2019

Я бы порекомендовал вам использовать Keras для этой проблемы. Вся обработка данных, которую вы выполняли с использованием sklearn после разделения данных обучения и тестирования, могла бы быть выполнена с кумулятивным отношением к керам, и было бы более читабельным и менее запутанным, чтобы знать, что происходит. Если они все строки, вы должны разделить данные на строки с помощью внутреннего кода Python, например

row = data[i].split(',')

разделит три столбца в строке. Если вы знаете 5 классов, я бы взял все классы и заменил их имена числами в наборе данных. Я никогда не использовал Sklearn для реализации нейронной сети, но, похоже, вы использовали 25 скрытых NN-слоев, верно? Я не думаю, что вам это тоже понадобится ... думаю, что 3 сделают эту работу.

Извините, если я не могу помочь вам более точно в вашей проблеме, но я думаю, что вы можете решить свою проблему проще, если вы переделаете ее, как я сказал ... удачи, приятель!

edit: Возможно, проблема не в разобранном наборе данных, а в реализации NN, поэтому я думаю, что Keras более ясен

...