【问题标题】:Can someone explain why KFold isn't admitting my definition of the model in this for loop?有人可以解释为什么 KFold 不承认我在这个 for 循环中对模型的定义吗?
【发布时间】:2019-09-11 01:40:41
【问题描述】:

我正在尝试比较不同的算法,看看哪种算法最适合我的问题。

我正在试用本教程中的代码:https://machinelearningmastery.com/machine-learning-in-python-step-by-step/

特别是下面的代码:

我的进口

import sys
import pandas as pd
import scipy as sp
import sklearn as sk
import numpy as np
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix

from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold

from sklearn.linear_model import LogisticRegression
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier

抽查算法

models = []
models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))

依次评估每个模型

results = []
names = []
for name, model in models:
    kfold = model_selection.KFold(n_splits=10, random_state=seed)
    cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)
    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
    print(msg)

当我运行它时,我不断得到(

NameError Traceback (most recent call last)
<ipython-input-25-e6a861b6e218> in <module>()
     10 names = []

     11 for name, model in models:

     12         kfold = model_selection.KFold(n_splits=10, random_state=seed) <----

     13         cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)

     14         results.append(cv_results)

NameError: name 'model_selection' is not defined

有人可以向我解释一下 KFold 是如何工作的以及为什么它不接受该实例吗?

【问题讨论】:

    标签: python pandas scikit-learn train-test-split


    【解决方案1】:

    KFoldsklearn.model_selection 模块的一部分。

    确保将名称导入您的工作区,或者这样做

    from sklearn import model_selection   
    

    并使用

    model_selection.KFold
    

    import sklearn.model_selection
    sklearn.model_selection.KFold
    

    甚至

    from sklearn.model_selection import KFold
    KFold
    

    【讨论】:

    • @NicoIzco 这里没有什么神秘之处.....保留你的代码,但不要使用model_selection.KFold(n_splits=10, random_state=seed),只需使用KFold(n_splits=10, random_state=seed)
    • 好的,我只是在修改代码的导入部分。添加一个 sklearn.model_selection.KFold 解决了这个问题。谢谢!
    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多