Python 预测错误结果的机器学习模型

Python 预测错误结果的机器学习模型,python,machine-learning,neural-network,deep-learning,data-extraction,Python,Machine Learning,Neural Network,Deep Learning,Data Extraction,目前,我有一个数据集,其中包含两列程序名及其CPT。例如,全膝关节置换术-27447,全髋关节置换术-27130,开放式腕管松解术-64721。数据集有3000行,共有5个CPT代码(5个类)。我正在写一个分类模型。当我传递一些错误的输入时,例如“开放式膝关节置换术腕管释放”,它给出的输出64721是错误的。下面是我正在使用的代码。我可以知道我可以在我的代码中做些什么更改吗?如果为这个问题选择一个神经网络是正确的吗 import pandas as pd import numpy as np f

目前,我有一个数据集,其中包含两列程序名及其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")

我建议你用Keras来解决这个问题。在分割培训和测试数据之后,您使用sklearn对数据进行的所有处理都可以使用numpy to keras进行,并且更易于阅读,也不容易混淆,从而了解发生了什么。如果它们都是字符串,那么应该使用内部python代码按行分割数据,如

row = data[i].split(',')
将拆分行中的三列。 如果你有5个已知的类,那么我会选择所有的类,并将它们的名称替换为数据集中的数字。我从来没有使用SKL来学习实现神经网络,但似乎您使用了25个隐藏的神经网络层,对吗?我想你也不需要这么多。。。我想3个就可以了

对不起,如果我不能更准确地帮助你解决你的问题,但我认为如果你像我说的那样重做,你可以更容易地解决你的问题。。。祝你好运,伙计


编辑:可能问题不在解析的数据集中,但在NN实现中,这就是为什么我认为Keras更清晰

是的,你说得对,例如,当我通过开放式膝关节置换术腕管松解时,它应该给出“00000”,但它给出的是“64721”,这是错误的。我没有理解你,predictionProbablityMatrix=classificationModel.predict_proba(count_vect.transform([data_to_be_predicted])将给我一个包含5个值的数组,因为我有5个类,然后我使用np.amax(predictionProbablityMatrix)来选择概率最高的类哦!我懂了。。然后也许你需要更多,因为正如我所看到的,问题不是线性的,那么你应该添加更多的隐藏层。。。也许你的神经网络学习不好。。。您是否有任何来自培训状态(准确性和其他方面)的回访?你应该有一些来看看!正如你所建议的,我研究并使用了Keras。现在当我预测时,我得到的输出是1。为什么会这样?是因为我使用的是Sigmoid函数吗?我引用了这个链接:我不确定。。。这是一个需要研究的特殊案例。。。尝试使用loss='sparse\u categorical\u crossentropy'而不是binary,在最后一层中使用softmax ok