预测错误结果的机器学习模型
Posted
技术标签:
【中文标题】预测错误结果的机器学习模型【英文标题】:Machine learning model predicting wrong results 【发布时间】:2019-06-16 12:50:00 【问题描述】:目前,我有一个数据集,其中包含两列程序名称及其 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")
【问题讨论】:
是的,你是对的,例如,当我通过开放式膝关节置换腕管松解术时,它应该给出“00000”,但它给出的是“64721”,这是错误的。 我没有得到你,predictionsProbablityMatrix = classificationModel.predict_proba(count_vect.transform([data_to_be_predicted])) 会给我一个包含 5 个值的数组,因为我有 5 个类,然后我使用 np.amax (predictionProbablityMatrix) 选择概率最高的类 【参考方案1】:我建议您使用 Keras 来解决这个问题。在拆分训练和测试数据后,您使用 sklearn 对数据所做的所有处理都可以使用 numpy 到 keras 进行,并且更易读,并且更容易了解正在发生的事情。如果它们都是字符串,则应使用内部 python 代码按行拆分数据,例如
row = data[i].split(',')
将拆分行中的三列。 如果您有 5 个知道的课程,那么我会选择所有课程并将它们的名称替换为数据集中的数字。我从未使用 Sklearn 来实现神经网络,但您似乎使用了 25 个隐藏的 NN 层,对吗?我认为您也不需要这么多……认为 3 可以完成这项工作。
抱歉,如果我不能更准确地帮助您解决问题,但我认为如果您像我说的那样重做,您可以更轻松地解决问题...祝您好运,伙计!
编辑:也许问题不在解析的数据集中,而是在 NN 实现中,这就是为什么我认为 Keras 更清晰
【讨论】:
哦!我明白了.. 那么也许你需要更多,因为正如我所看到的,问题不是线性的,那么你应该添加更多隐藏层......也许你的神经网络没有学好......你有任何训练的回调状态(准确性和东西)?你应该有一些检查一下! 所以按照你的建议,我学习并使用了 Keras。现在,当我进行预测时,我得到的输出为 1。为什么会这样?是因为我使用的是 Sigmoid 函数吗?我参考了这个链接:machinelearningmastery.com/… 我不确定...这是一个需要研究的特殊情况...尝试使用 loss='sparse_categorical_crossentropy' 而不是二进制,在最后一层使用 softmax 可以以上是关于预测错误结果的机器学习模型的主要内容,如果未能解决你的问题,请参考以下文章