Может кто-нибудь объяснить, почему KFold не допускает моего определения модели в этом цикле for? - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь провести сравнение различных алгоритмов, чтобы увидеть, какой из них лучше всего подходит для моей проблемы.

Я пробую код прямо из этого урока: 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)

Когда я запускаю это, я продолжаю получать (<---- в строке 12): </p>

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 и почему он не принимает экземпляр?

1 Ответ

1 голос
/ 21 апреля 2019

KFold является частью sklearn.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
...