Python 错误:预期的序列或类似数组,已获取<;类别';int'&燃气轮机&引用;

Python 错误:预期的序列或类似数组,已获取<;类别';int'&燃气轮机&引用;,python,pandas,numpy,Python,Pandas,Numpy,我试图预测一个人是否患有某种疾病。通过在HTML页面中传递输入,可以预测值,但无法在HTML页面上打印准确性。Error=“TypeError:Expected sequence或array like,get”。下面是我的代码。如果出现问题,请提供帮助 from flask import Flask, redirect, url_for, request, render_template import numpy as np import pandas as pd

我试图预测一个人是否患有某种疾病。通过在HTML页面中传递输入,可以预测值,但无法在HTML页面上打印准确性。Error=“TypeError:Expected sequence或array like,get”。下面是我的代码。如果出现问题,请提供帮助

    from flask import Flask, redirect, url_for, request, render_template
    import numpy as np
    import pandas as pd
    from sklearn.ensemble import GradientBoostingClassifier,RandomForestClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score,precision_score,recall_score,auc,roc_curve

    app = Flask(__name__)

    Data = pd.read_csv('data\\new_heart.csv')
    y = Data['target']
    Data.drop("target", axis=1, inplace=True)
    X = Data

    x_train, x_test, y_train, y_test = train_test_split(X, y, random_state=42)

    Model = GradientBoostingClassifier(verbose=1, learning_rate=0.5,warm_start=True)
    Model.fit(x_train, y_train)

    y_pred=0
    def generate_prediction(input):


        y_pred = Model.predict(input)
        return  y_pred

    @app.route('/')
    def home():

        return render_template('disease.html')


    @app.route('/get_value', methods=['GET', 'POST'])
    def get_price():
        input = request.form
        input = np.array(list(input.values())).reshape(1,-1)
        print(input)

        price = generate_prediction(input)
        if price == 0:
            return "Not Suffering from a disease {}".format(price,accuaracy())
        else:
            return "Suffering from a disease {}{}".format(price,accuaracy())





    def accuaracy():


        print("Accuracy(GradientBoostingClassifier)\t:" + str(accuracy_score(y_test, y_pred)))
        print("Precision(GradientBoostingClassifier)\t:" + str(precision_score(y_test, y_pred)))
        print("Recall(GradientBoostingClassifier)\t:" + str(recall_score(y_test, y_pred)))


    if __name__ == '__main__':
        app.run(debug=True)

disease.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action=" http://127.0.0.1:5000/get_value" method="POST">

    <p>age <input type="text" name="t1"/></p>
    <p>sex <input type="text" name="t2"/></p>
    <p>cp <input type="text" name="t3"/></p>
    <p>trestbps <input type="text" name="t4"/></p>
        <p>chol <input type="text" name="t5"/></p>
        <p>fbs <input type="text" name="t6"/></p>
        <p>restecg <input type="text" name="t7"/></p>
        <p>thalach <input type="text" name="t8"/></p>
        <p>exang <input type="text" name="t9"/></p>
        <p>oldspeak <input type="text" name="t10"/></p>
    <p>slope <input type="text" name="t11"/></p>
        <p>ca <input type="text" name="t12"/></p>
        <p>thal <input type="text" name="t13"/></p>

    <p><input type="submit" value="submit"/></p>
    </form>
</body>
从flask导入flask、重定向、url、请求、呈现模板
将numpy作为np导入
作为pd进口熊猫
从sklearn.employ导入GradientBoostingClassifier,RandomForestClassifier
从sklearn.model\u选择导入列车\u测试\u拆分
从sklearn.metrics导入准确度、精密度、回忆度、auc、roc曲线
app=烧瓶(名称)
Data=pd.read\u csv('Data\\new\u heart.csv')
y=数据['target']
Data.drop(“目标”,轴=1,原地=True)
X=数据
x_序列,x_测试,y_序列,y_测试=序列测试分割(x,y,随机状态=42)
模型=梯度增强分类器(详细值=1,学习率=0.5,温启动=真)
模型拟合(x\U系列、y\U系列)
y_pred=0
def生成_预测(输入):
y_pred=模型预测(输入)
返回y_pred
@应用程序路径(“/”)
def home():
返回render_模板('disease.html')
@app.route('/get_value',methods=['get',POST'])
def get_price():
输入=request.form
input=np.array(list(input.values())。重塑(1,-1)
打印(输入)
价格=生成预测(输入)
如果价格=0:
返回“未患疾病{}”。格式(price,accuracy())
其他:
返回“患有疾病{}{}”。格式(price,accuracy())
def accuracy():
打印(“精度(梯度增强分类器)\t:”+str(精度分数(y测试,y预测)))
打印(“精度(GradientBoostingClassifier)\t:”+str(精度分数(y测试,y预测)))
打印(“回忆(GradientBoostingClassifier)\t:”+str(回忆分数(y测试,y预测)))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.run(debug=True)
disease.html
标题
年龄

cp

树梢

胆固醇

fbs

静息心电图

塔拉赫

埃克森

老话

斜坡

ca

塔尔


回溯(最近一次呼叫最后一次):
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\flask\app.py”,第2309行,在调用中__
返回self.wsgi_应用程序(环境,启动响应)
wsgi_应用程序中的文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\flask\app.py”,第2295行
response=self.handle\u异常(e)
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\flask\app.py”,第1741行,在句柄中
重放(exc_类型、exc_值、tb)
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\flask\\u compat.py”,第35行,重新发布
增值
wsgi_应用程序中的文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\flask\app.py”,第2292行
response=self.full\u dispatch\u request()
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\flask\app.py”,第1815行,完整发送请求
rv=自身处理用户异常(e)
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\flask\app.py”,第1718行,在handle\u user\u异常中
重放(exc_类型、exc_值、tb)
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\flask\\u compat.py”,第35行,重新发布
增值
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\flask\app.py”,第1813行,完整发送请求
rv=自我分派请求()
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\flask\app.py”,第1799行,在调度请求中
返回self.view_函数[rule.endpoint](**req.view_参数)
文件“C:\Users\Indu\PycharmProjects\WebApp\HeartDisease.py”,第43行,在get\u price中
返回“患有疾病{}{}”。格式(price,accuracy())
文件“C:\Users\Indu\PycharmProjects\WebApp\HeartDisease.py”,第52行,准确无误
打印(“精度(梯度增强分类器)\t:”+str(精度分数(y测试,y预测)))
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\sklearn\metrics\classification.py”,第176行,精度评分
y_type,y_true,y_pred=_check_targets(y_true,y_pred)
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\sklearn\metrics\classification.py”,第71行,在检查目标中
检查长度是否一致(y_true,y_pred)
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\sklearn\utils\validation.py”,第231行,检查长度是否一致
长度=[\u num\u如果X不是None,则数组中X的样本数(X)]
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\sklearn\utils\validation.py”,第231行,在
长度=[\u num\u如果X不是None,则数组中X的样本数(X)]
文件“C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site packages\sklearn\utils\validation.py”,第138行,在_num_samples中
类型(x))
TypeError:预期的序列或类似数组,已获取

accurity()
函数中,需要将数组传递给Sklearn metrics。现在只传递一个int值。确保
y\u test
y\u pred
都是数组,即使它们只是一个元素。

由于您的
输入
的形状为(-1,1),因此会出现错误。由于
y\u pred=Model.predict(input)
中的形状,您将始终获得整数值。因为您需要将单个维度列表作为输入

因此,要获得
列表
您的输入应该等于
x\u测试
,您可以获得
y\u pred


还要注意的是,在
准确度评分(y\u test,y\u pred)
中,两个参数应该具有相同的长度

完全回溯错误后
traceback (most recent call last):
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\flask\app.py", line 2309, in __call__
    return self.wsgi_app(environ, start_response)
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\flask\app.py", line 2295, in wsgi_app
    response = self.handle_exception(e)
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\flask\app.py", line 1741, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\flask\app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\flask\_compat.py", line 35, in reraise
    raise value
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\flask\app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\Users\Indu\PycharmProjects\WebApp\HeartDisease.py", line 43, in get_price
    return "Suffering from a disease {}{}".format(price,accuaracy())
  File "C:\Users\Indu\PycharmProjects\WebApp\HeartDisease.py", line 52, in accuaracy
    print("Accuracy(GradientBoostingClassifier)\t:" + str(accuracy_score(y_test, y_pred)))
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\sklearn\metrics\classification.py", line 176, in accuracy_score
    y_type, y_true, y_pred = _check_targets(y_true, y_pred)
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\sklearn\metrics\classification.py", line 71, in _check_targets
    check_consistent_length(y_true, y_pred)
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\sklearn\utils\validation.py", line 231, in check_consistent_length
    lengths = [_num_samples(X) for X in arrays if X is not None]
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\sklearn\utils\validation.py", line 231, in <listcomp>
    lengths = [_num_samples(X) for X in arrays if X is not None]
  File "C:\Users\Indu\PycharmProjects\WebApp\venv\lib\site-packages\sklearn\utils\validation.py", line 138, in _num_samples
    type(x))
TypeError: Expected sequence or array-like, got <class 'int'>