无 在 Python 中运行 streamlit 时出现类型错误
Posted
技术标签:
【中文标题】无 在 Python 中运行 streamlit 时出现类型错误【英文标题】:None Type error in Python when running streamlit 【发布时间】:2022-01-04 02:20:01 【问题描述】:您好,我正在尝试在 python 中创建一个应用程序,允许用户选择他们想要在 SK-Learn 库中的三个开源数据之一上实现的分类模型代码如下:
import streamlit as st
import numpy as np
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
st.title("Streamlit example")
st.write("""
# Explore different classifier
which one is the best?
""")
dataset_name = st.sidebar.selectbox("Select Dataset", ("Iris","Breast Cancer","Wine Dataset") )
classifier_name = st.sidebar.selectbox("Select Classifier", ("KNN","SVM","Random Forest") )
def get_dataset(dataset_name):
if dataset_name == "Iris":
data = datasets.load_iris()
elif dataset_name == "Breast Cancer":
data = datasets.load_breast_cancer()
else:
data = datasets.load_wine()
X = data.data
y = data.target
return X, y
X, y = get_dataset(dataset_name)
st.write("Shape of datset", X.shape)
st.write("Number of classes", len(np.unique(y)))
def add_parameter_ui(clf_name):
params = dict()
if clf_name =="KNN":
K = st.sidebar.slider("K",1,15)
params["K"] = K
elif clf_name =="SVM":
C = st.sidebar.slider("C", 0.01,10.0)
params["C"] = C
else:
max_depth = st.sidebar.slider("max_depth", 2,15)
n_estimators = st.sidebar.slider("n_estimators",1,100)
params["max_depth"]= max_depth
params["n_estimators"] = n_estimators
return params
params = add_parameter_ui(classifier_name)
def get_classifier(clf_name,params):
if clf_name == "KNN":
clf = KNeighborsClassifier(n_neighbors=params['K'])
elif clf_name == "SVM":
clf = SVC(C= params['C'])
else:
clf = RandomForestClassifier(n_estimators=params["n_estimators"],max_depth=params["max_depth"],random_state=1234)
return clf
clf = get_classifier(classifier_name,params)
错误是:
clf = KNeighborsClassifier(n_neighbors=params['K'])
TypeError: 'NoneType' object is not subscriptable
我知道该错误应该是不言自明的,但我尝试声明 clf = None
,但仍然收到相同的错误,我要求有人将我引向正确的方向。
【问题讨论】:
您的数据是否包含任何null
或None
值?
你能添加完整的TracebackError
【参考方案1】:
问题出在您的 add_parameter_ui 函数中。在 clf_name 是 KNN 或 SVM 的情况下,您没有返回值,这会导致主代码中的 params 为 None 因此调用 params['K'] 不是因为 'NoneType' 对象不可下标。
这里是固定代码:
def add_parameter_ui(clf_name):
params = dict()
if clf_name =="KNN":
K = st.sidebar.slider("K",1,15)
params["K"] = K
return params
elif clf_name =="SVM":
C = st.sidebar.slider("C", 0.01,10.0)
params["C"] = C
return params
# If Random Forest
max_depth = st.sidebar.slider("max_depth", 2,15)
n_estimators = st.sidebar.slider("n_estimators",1,100)
params["max_depth"]= max_depth
params["n_estimators"] = n_estimators
return params
【讨论】:
以上是关于无 在 Python 中运行 streamlit 时出现类型错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用python在streamlit应用程序中打开atoti链接?
Python Streamlit - 过滤熊猫数据框而不重新运行整个脚本
如何在虚拟 conda 环境中设置 streamlit 的路径
通过docker运行时无法在浏览器中查看streamlit应用程序