【问题标题】:Support Vector Type error. none type object is not iterable支持向量类型错误。 none 类型对象不可迭代
【发布时间】:2021-10-24 05:02:51
【问题描述】:

我在 python 中有这段代码,它使用不同的内核创建一个 SVM:

from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, roc_auc_score

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)

# The gamma parameter is the kernel coefficient for kernels rbf/poly/sigmoid
svm = SVC(gamma='auto', probability=True)

svm.fit(X_train,y_train.values.ravel())
prediction = svm.predict(X_test)
prediction_prob = svm.predict_proba(X_test)
print('Accuracy:', accuracy_score(y_test,prediction))
print('AUC:',roc_auc_score(y_test,prediction_prob[:,1]))

print(X_train)
print(y_train)

现在我想用不同的内核 rbf 构建它并将值存储到数组中。我需要将折叠的结果存储到列表中,如下所示:所以像这样

def svm_grid_search(parameters, cv):

# Store the outcome of the folds in these lists
means = []
stds = []
params = []

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)

for parameter in parameters: 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)
# The gamma parameter is the kernel coefficient for kernels rbf/poly/sigmoid
svm = SVC(gamma=1,kernel ='rbf',probability=True)
svm.fit(X_train,y_train.values.ravel())
prediction = svm.predict(X_test)
prediction_prob = svm.predict_proba(X_test)
return means, stddevs, params

答案应该如下所示,使用不同的参数和内核函数:

from sklearn.model_selection import GridSearchCV

parameters = {'kernel':['linear','poly','rbf'],'C':[0.2,0.5,1.0]}

means, stddevs, params = svm_grid_search(parameters, 10)

print('Mean AUC (+/- standard deviation), for parameters')
for mean, std, params in zip(means, stddevs, params):
print("%0.3f (+/- %0.03f) for %r"
% (mean, std, params))

但是我不断收到此错误,这表明我没有正确通过列表的折叠?

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-3f5f99897a92> in <module>()
3 parameters = {'kernel':['linear','poly','rbf'],'C':[0.2,0.5,1.0]}
4 
----> 5 means, stddevs, params = svm_grid_search(parameters, 10)
6 
7 print('Mean AUC (+/- standard deviation), for parameters')

TypeError: 'NoneType' object is not iterable

如果有人能指出正确的方向,不胜感激

【问题讨论】:

    标签: python list svm


    【解决方案1】:

    看起来您实际上并没有在函数中创建的列表中存储任何内容。此外,您正在创建一个名为 stds 但返回 stddevs 的空列表(您从未定义过)。

    编辑:我认为您正在尝试使用 sklearns GridSerachCV,但您从未调用过任何一个。以下是一些帮助您入门的代码:

    from sklearn.model_selection import GridSearchCV
    from sklearn.svm import SVC
    from sklearn import datasets
    import pandas as pd
    
    
    iris = datasets.load_iris()
    X = iris.data[:, :2]  # we only take the first two features.
    y = iris.target
    
    parameters = {'kernel':['linear','poly','rbf'],'C':[0.2,0.5,1.0]}
    
    svc = SVC()
    clf = GridSearchCV(svc, parameters)
    clf.fit(X,y)
    
    results = pd.DataFrame.from_dict(clf.cv_results_)
    

    其中 results 就是您的网格搜索的结果。

       mean_fit_time  std_fit_time  mean_score_time  std_score_time param_C
    0       0.000600      0.000490           0.0004        0.000490     0.2
    1       0.000400      0.000490           0.0002        0.000400     0.2
    2       0.000600      0.000490           0.0004        0.000490     0.2
    3       0.001008      0.000013           0.0000        0.000000     0.5
    4       0.000800      0.000400           0.0002        0.000399     0.5
    5       0.000800      0.000400           0.0004        0.000490     0.5
    6       0.000800      0.000400           0.0000        0.000000     1.0
    7       0.000800      0.000400           0.0002        0.000400     1.0
    8       0.000800      0.000400           0.0002        0.000400     1.0
    

    如果你想将它包装在你自己的函数中,那么你需要阅读一些关于 python 函数以及 GridSearchCV 返回的内容。 希望对您有所帮助。

    【讨论】:

    • 非常感谢。我会修改那些。定义列表的好方法是什么?
    • @kelroyjames 我不确定你到底想做什么,但我已经编辑了我的答案,向你展示了如何使用 sklearns GridSearchCV。
    • 感谢您的建议,非常感谢!
    猜你喜欢
    • 2012-10-30
    • 2017-03-05
    • 1970-01-01
    • 2021-03-02
    • 2020-04-18
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多