Добавить кросс-валидацию к готовой программе про деревья решений Python

С языком знаком третий день, программа не моя, а нужно добавить оценки: precision, recall, f1 меру, кросс-валидацию. Не могу сам это сделать, так как не понимаю где выводится predict и верные значения. Заранее спасибо за помощь!

print(__doc__)

import numpy as np
import matplotlib.pyplot as plt

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import classification_report

# Parameters
n_classes = 2
plot_colors = "ryb"
plot_step = 0.02

# Load data
iris = load_iris()

for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3],
                                [1, 2], [1, 3], [2, 3]]):
    # We only take the two corresponding features
    X = iris.data[:, pair]
    y = iris.target

    # Train
    clf = DecisionTreeClassifier().fit(X, y)

    # Plot the decision boundary
    plt.subplot(2, 3, pairidx + 1)

    x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),
                         np.arange(y_min, y_max, plot_step))
    plt.tight_layout(h_pad=0.5, w_pad=0.5, pad=2.5)

    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    cs = plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu)

    plt.xlabel(iris.feature_names[pair[0]])
    plt.ylabel(iris.feature_names[pair[1]])

    # Plot the training points
    for i, color in zip(range(n_classes), plot_colors):
        idx = np.where(y == i)
        plt.scatter(X[idx, 0], X[idx, 1], c=color, label=iris.target_names[i],
                    cmap=plt.cm.RdYlBu, edgecolor='black', s=15)

plt.suptitle("Decision surface of a decision tree using paired features")
plt.legend(loc='lower right', borderpad=0, handletextpad=0)
plt.axis("tight")

plt.figure()
clf = DecisionTreeClassifier().fit(iris.data, iris.target)
plot_tree(clf, filled=True)
plt.show()

#print (classification_report(y_true, y_pred))

итак Вот получилось. Выводит всё кроме кросс-валидации. Я не могу понять что за classifier, знает кто ?

#2.17
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_validate
from sklearn import datasets, linear_model, metrics, tree
from matplotlib.colors import ListedColormap
import numpy as np
from sklearn import datasets

from matplotlib import pyplot as plt



classification_problem = datasets.make_classification(n_features = 2, n_informative = 2, 
                                                      n_classes = 3, n_redundant=0, 
                                                      n_clusters_per_class=1, random_state=3)

colors = ListedColormap(['red', 'blue'])
light_colors = ListedColormap(['lightcoral', 'lightblue'])



plt.figure(figsize=(8,6))
plt.scatter(map(lambda x: x[0], classification_problem[0]), map(lambda x: x[1], classification_problem[0]), 
              c=classification_problem[1], cmap=colors, s=100)

train_data, test_data, train_labels, test_labels = train_test_split (classification_problem[0], classification_problem[1], test_size = 0.3, random_state = 1)


clf = tree.DecisionTreeClassifier(random_state=1)
clf.fit(train_data, train_labels)

predictions = clf.predict(test_data)
metrics.accuracy_score(test_labels, predictions)

def get_meshgrid(data, step=.05, border=.5,):
    x_min, x_max = data[:, 0].min() - border, data[:, 0].max() + border
    y_min, y_max = data[:, 1].min() - border, data[:, 1].max() + border
    return np.meshgrid(np.arange(x_min, x_max, step), np.arange(y_min, y_max, step))

def plot_decision_surface(estimator, train_data, train_labels, test_data, test_labels, 
                          colors = colors, light_colors = light_colors):
    #fit model
    estimator.fit(train_data, train_labels)

    #set figure size
    plt.figure(figsize = (16, 6))

    #plot decision surface on the train data 
    plt.subplot(1,2,1)
    xx, yy = get_meshgrid(train_data)
    mesh_predictions = np.array(estimator.predict(np.c_[xx.ravel(), yy.ravel()])).reshape(xx.shape)
    plt.pcolormesh(xx, yy, mesh_predictions, cmap = light_colors)
    plt.scatter(train_data[:, 0], train_data[:, 1], c = train_labels, s = 100, cmap = colors)
    plt.title('Train data, accuracy={:.2f}'.format(metrics.accuracy_score(train_labels, estimator.predict(train_data))))

    #plot decision surface on the test data
    plt.subplot(1,2,2)
    plt.pcolormesh(xx, yy, mesh_predictions, cmap = light_colors)
    plt.scatter(test_data[:, 0], test_data[:, 1], c = test_labels, s = 100, cmap = colors)
    plt.title('Test data, accuracy={:.2f}'.format(metrics.accuracy_score(test_labels, estimator.predict(test_data))))

    estimator = tree.DecisionTreeClassifier(random_state = 1, max_depth = 1)
plot_decision_surface(estimator, train_data, train_labels, test_data, test_labels)

plot_decision_surface(tree.DecisionTreeClassifier(random_state = 1, max_depth = 2),
train_data, train_labels, test_data, test_labels)

plot_decision_surface(tree.DecisionTreeClassifier(random_state = 1, max_depth = 3),
train_data, train_labels, test_data, test_labels)

plot_decision_surface(tree.DecisionTreeClassifier(random_state = 1),
train_data, train_labels, test_data, test_labels)

plot_decision_surface(tree.DecisionTreeClassifier(random_state = 1, min_samples_leaf = 3), 
train_data, train_labels, test_data, test_labels)

#precision
metrics.precision_score(test_labels, predictions, pos_label=0)
metrics.precision_score(test_labels, predictions)

print metrics.classification_report(test_labels, predictions)
from sklearn.model_selection import cross_val_score

Если ввести:

res = cross_val_score(estimator, test_data, test_labels, cv=5)
print res

То на выходе: [1. 1. 1. 1. 1.] Я не уверен в правильности ответа


Ответы (1 шт):

Автор решения: passant

Предсказание принадлежности классу конкретной точки выполняется с помощью метода predict() или predict_proba()

Ваша задача с ирисами уже стролько раз описана в инете, что аж зубы сводит. Ну вот посмотрите хоть сюда, как эта задача решается именно с помощью DecisionTreeClassifier

https://www.machinelearningmastery.ru/decision-tree-in-python-b433ae57fb93/ https://www.rupython.com/x440-108-39304.html

А лучше - сразу сюда

https://scikit-learn.org/dev/modules/generated/sklearn.tree.DecisionTreeClassifier.html?highlight=decisiontreeclassifier#examples-using-sklearn-tree-decisiontreeclassifier

→ Ссылка