>source

입력에 대한 17가지 증상을 기반으로 질병을 예측하는 다중 클래스 분류 모델을 구축 중입니다. 출력으로 "0"과 "1"이 포함된 배열을 받습니다(모델을 작동시키기 위해 원-핫 인코딩을 수행했기 때문에).

예측된 질병의 스팅 라벨을 최종 출력으로 받기 위해 역 라벨 인코딩을 시도했지만 올바르지 않은 스팅 라벨 배열을 받았습니다. 원-핫 인코딩 부분에서 뭔가 잘못한 것 같은 느낌이 듭니다. 도와주세요.

import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OrdinalEncoder
from keras.utils import np_utils
dataset= pd.read_csv('dataset.csv') #source https://www.kaggle.com/itachi9604/disease-symptom-description-dataset
symptoms= dataset.drop('Disease',axis=1).fillna('Absent')
disease=dataset['Disease']
X= symptoms.values.astype(str)
y= disease.values.astype(str)
X_train, X_test, y_train, y_test= train_test_split(X,y,test_size=0.25,random_state=101)
#One-hot encoding based on https://machinelearningmastery.com/why-one-hot-encode-data-in-machine-learning/
ordinal_encoder= OrdinalEncoder()
ordinal_encoder.fit(X_train)
X_train= ordinal_encoder.transform(X_train)
X_test= ordinal_encoder.transform(X_test)
label_encoder= LabelEncoder()
label_encoder.fit(y_train)
y_train= label_encoder.transform(y_train)
y_test= label_encoder.transform(y_test)
# convert integers to dummy variables (i.e. one hot encoded)
y_train= np_utils.to_categorical(y_train)
y_test= np_utils.to_categorical(y_test)
model= Sequential()
model.add(Dense(8, input_dim=17, activation='relu'))
model.add(Dense(41, activation='softmax'))
# Compile model
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x=X_train,
          y=y_train,
          epochs=200,
          validation_data=(X_test, y_test), verbose=1
          )
predictions= (model.predict(X_test[:1]) > 0.5).astype("int32")
predictions= label_encoder.inverse_transform(predictions.reshape(-1))
print(predictions)
###the Output I recieve:
['(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo' 'AIDS'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo'
 '(vertigo) Paroymsal  Positional Vertigo']

안녕하세요 Oleg, 이 라인을 설명해 주시겠습니까? 예측= (model.predict(X_test[:1]) >0.5).astype("int32")

roman_ka2022-02-13 06:57:11

@roman_kat 그의 라인은 처음에 예측= model.predict(X_test[:1]) 이 방식으로 보여야 했고 그 목적은 X_test 데이터의 첫 번째 행에서 모델을 기반으로 예측을 만드는 것이었습니다. 어떤 이유로 그것은 나를 위해 작동하지 않았지만 이것은 예측을 작동했습니다= (model.predict(X_test[:1]) >0.5).astype("int32"). -ML 포럼에서 찾았습니다.

Oleg Shmidt2022-02-13 06:57:11

슬라이스 [:1]은 [0, 1)을 의미하므로 이 슬라이스는 X의 1행만 사용합니다. 1행에서 시작하여 배열의 끝으로 이동하려면 슬라이스가 [1:]이어야 합니다. 따라서 효과적으로 하나의 데이터 포인트만 예측하고 이 예측은 41개 값의 벡터(출력 레이어로 사용)입니다. 얼마나 많은 데이터가 있습니까? 17개 기능에서 41개 클래스를 예측하는 것은 어렵습니다. 데이터 볼륨이 허용하는 경우 네트워크 크기를 늘리는 것이 좋습니다.

roman_ka2022-02-13 06:57:11

@roman_ka, 맞습니다. X_test[:1]은 예측에 필요한 것처럼 17가지 증상으로 구성된 하나의 항목에서 감소를 예측하는 데 필요한 데이터 항목을 시뮬레이트하는 X의 1행입니다. 내 데이터의 양은 4000행 이상입니다. 모델이 아직 더 정확하기 위해 최적화되지 않은 것으로 알고 있습니다. 나중에 하도록 하겠습니다. 일단은 17개 증상이 있는 1개 항목에서 질병소견을 얻을 수 있다는 증거만 있으면 되는데...

Oleg Shmidt2022-02-12 17:03:50
  • 이전 xaml : WinRT/C++를 사용하여 2개 또는 3개의 엄지손가락으로 사용자 정의 슬라이더를 생성할 수 있습니까?
  • 다음 compression : HEVC 비트스트림에서 프레임을 제거하는 방법은 무엇입니까?