ValueError:X 有 16 个特征,但 SVC 期望 17 个特征作为疾病预测系统的输入

问题描述 投票:0回答:1

我正在尝试多种疾病预测系统,其中在尝试使用支持向量机算法的疟疾疾病预测系统时出现错误。我不知道如何解决这个问题,因为其他 4 种疾病预测没有问题。我是 ML 领域的新手,这是第一个项目,所以如果问题太简单请理解我。

错误信息:

alueError: X has 16 features, but SVC is expecting 17 features as input.
Traceback:
File "C:\Users\HP\.conda\envs\DiseasePredictionSystem\Lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 584, in _run_script
    exec(code, module.__dict__)
File "C:\Users\HP\Desktop\Multiple Disease Prediction System\multiple disease pred.py", line 404, in <module>
    malaria_prediction = malaria_model.predict([user_input])
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\HP\.conda\envs\DiseasePredictionSystem\Lib\site-packages\sklearn\svm\_base.py", line 820, in predict
    y = super().predict(X)
        ^^^^^^^^^^^^^^^^^^
File "C:\Users\HP\.conda\envs\DiseasePredictionSystem\Lib\site-packages\sklearn\svm\_base.py", line 433, in predict
    X = self._validate_for_predict(X)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\HP\.conda\envs\DiseasePredictionSystem\Lib\site-packages\sklearn\svm\_base.py", line 613, in _validate_for_predict
    X = self._validate_data(
        ^^^^^^^^^^^^^^^^^^^^
File "C:\Users\HP\.conda\envs\DiseasePredictionSystem\Lib\site-packages\sklearn\base.py", line 588, in _validate_data
    self._check_n_features(X, reset=reset)
File "C:\Users\HP\.conda\envs\DiseasePredictionSystem\Lib\site-packages\sklearn\base.py", line 389, in _check_n_features
    raise ValueError(

streamlit 中的 UI :

#Malaria Prediction Page
if selected == 'Malaria Disease Prediction':

     #page title
     st.title('Malaria Prediction using ML')
     col1, col2, col3, col4 = st.columns(4)

     with col1:
         age = st.text_input('Enter Your Age')

     with col2:
         sex = st.text_input('Male or Female [0/1] Male=0, Female=1')
         
     with col3:
        fever = st.text_input('Do you have fever? [0/1] Yes=1, No=0')

     with col4:
         cold = st.text_input('Are you feeling cold?  [0/1] Yes=1, No=0')

     with col1:
         rigor = st.text_input('Do you feel rigor:high temperature and tremble with cold ?[0/1] Yes=1, No=0')

     with col2:
         fatigue = st.text_input('Do you feel fatigue?[0/1] Yes=1, No=0')

     with col3:
         headace = st.text_input('Do you feel headache?[0/1] Yes=1, No=0')

     with col4:
         bitter_tongue = st.text_input('Bitter tougue?[0/1] Yes=1, No=0')

     with col1:
         vomitting = st.text_input('Do you Vomit? [0/1] Yes=1, No=0')

     with col2:
         diarrhea = st.text_input('Diarrhea? [0/1] Yes=1, No=0')

     with col3:
         Convulsion = st.text_input('Have you ever muscular contract? [0/1] Yes=1, No=0')

     with col4:
         Anemia = st.text_input('Do you have anemia? [0/1] Yes=1, No=0')
         
     with col1:
        jundice = st.text_input('Do you have Jaundice? [0/1] Yes=1, No=0')
        
     with col2:
            cocacola_urine = st.text_input('Colour of urine is like cocacola? [0/1] Yes=1, No=0')
            
     with col3:
            hypoglycemia = st.text_input('Low in blood sugar level? [0/1] Yes=1, No=0')
            
     with col4:
            prostraction = st.text_input('Have you collapse? [0/1] Yes=1, No=0')
            
     with col1:
        hyperpyrexia = st.text_input('Body temperature up to 106.7°F or 41.5°C?[0/1] Yes=1, No=0')

#code for prediction
     user_input = [age, sex, fever, cold, rigor, fatigue, headace, bitter_tongue, vomitting, diarrhea, Convulsion, Anemia, jundice, cocacola_urine, prostraction, hyperpyrexia]

         user_input = [float(x) for x in user_input]

         malaria_prediction = malaria_model.predict([user_input])

         if malaria_prediction[0] == 1:
             hypertension_diagnosis = 'The person has malaria disease'
         else:
             hypertension_diagnosis = 'The person does not have  malaria disease'

     st.success(malaria_diagnosis)

系统的google colab代码:

Dataset

google-colaboratory svm prediction streamlit
1个回答
0
投票

您的输入缺少一个功能

hypoglycemia
,导致输入为 16 个而不是 17 个。应该是:

...
#code for prediction
     user_input = [age, sex, fever, cold, rigor, fatigue,
                   headace, bitter_tongue, vomitting, diarrhea,
                   Convulsion, Anemia, jundice, cocacola_urine,
                   hypoglycemia, #<---------- this was missing
                   prostraction, hyperpyrexia
                   ]
...

您可能还需要将输入更改为 numpy 数组:

model.predict( np.array([user_input]) )
,而不仅仅是
model.predict([user_input])
。但也许你的 UI 会自动处理这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.