预测错误结果的机器学习模型
Machine learning model predicting wrong results
目前,我有一个数据集,其中包含两列过程名称及其 CPT。例如,Total Knee Arthroplasty-27447、Total Hip Arthroplasty -27130、Open Carpal Tunnel Release-64721。该数据集有 3000 行,共有 5 个 CPT 代码(5 类)。我正在写一个分类模型。当我传递一些错误的输入时,例如 "open knee arthroplasty carpal tunnel release",它给出错误的输出 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 到 keras 进行,并且会更具可读性并且更容易知道发生了什么。如果它们都是字符串,您应该使用内部 python 代码按行拆分数据,例如
row = data[i].split(',')
会将行中的三列拆分。
如果您有 5 个知道 类,那么我将获取所有 类 并将它们的名称替换为数据集中的数字。我从来没有使用 Sklearn 来实现神经网络,但你似乎使用了 25 个隐藏的 NN 层,对吗?我不认为你也需要这么多...认为 3 可以完成这项工作。
抱歉,如果我不能更准确地帮助你解决你的问题,但我认为如果你像我说的那样重做,你可以更容易地解决你的问题...祝你好运,伙计!
编辑:也许问题不在解析的数据集中,但在 NN 实现中,这就是为什么我认为 Keras 更清晰
目前,我有一个数据集,其中包含两列过程名称及其 CPT。例如,Total Knee Arthroplasty-27447、Total Hip Arthroplasty -27130、Open Carpal Tunnel Release-64721。该数据集有 3000 行,共有 5 个 CPT 代码(5 类)。我正在写一个分类模型。当我传递一些错误的输入时,例如 "open knee arthroplasty carpal tunnel release",它给出错误的输出 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 到 keras 进行,并且会更具可读性并且更容易知道发生了什么。如果它们都是字符串,您应该使用内部 python 代码按行拆分数据,例如
row = data[i].split(',')
会将行中的三列拆分。 如果您有 5 个知道 类,那么我将获取所有 类 并将它们的名称替换为数据集中的数字。我从来没有使用 Sklearn 来实现神经网络,但你似乎使用了 25 个隐藏的 NN 层,对吗?我不认为你也需要这么多...认为 3 可以完成这项工作。
抱歉,如果我不能更准确地帮助你解决你的问题,但我认为如果你像我说的那样重做,你可以更容易地解决你的问题...祝你好运,伙计!
编辑:也许问题不在解析的数据集中,但在 NN 实现中,这就是为什么我认为 Keras 更清晰