当前,我有一个数据集,其中包含两列过程名称及其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")
答案 0 :(得分:1)
我建议您使用Keras解决此问题。分割训练和测试数据后,使用sklearn对数据所做的所有处理都可以通过numpy到keras进行,并且可读性更高,并且更容易了解正在发生的事情。如果它们都是字符串,则应使用内部python代码将数据按行划分,例如
row = data[i].split(',')
将行中的三列拆分。 如果您有5个已知的类,那么我将采用所有这些类并将它们的名称替换为数据集中的数字。我从未使用Sklearn来实现神经网络,但是似乎您使用了25个隐藏的NN层,对吗?我认为您也不需要这么多...认为3可以胜任。
很抱歉,如果我不能在您的问题上更准确地帮助您,但是我认为,如果您像我说的那样重做它,您可以更轻松地解决您的问题...祝您好运,哥们!
编辑:也许问题不在解析的数据集中,但在NN实现中,这就是为什么我认为Keras更清楚的原因