Дополните код цикла так, чтобы получить кросс-валидацию на трёх равных по размеру блоках. На каждом этапе цикла у вас есть номер первого элемента валидационной выборки и размер блока (sample_size).
- Создайте массивы:
valid_indexes(англ. «индексы объектов валидационной выборки») иtrain_indexes(англ. «индексы объектов обучающей выборки»). Они содержат номера наблюдений для валидационной и обучающей выборок. Меняйте номера на каждом этапе цикла. - Разбейте переменные
featuresиtargetна выборкиfeatures_train,target_train,features_validиtarget_validтак, чтобы в них были только наблюдения с нужными номерами. - Оцените качество модели, обученной на каждой выборке, с помощью метода
model.score().
Посчитайте среднее качество модели, разделив сумму оценок модели на длину списка с оценками. Сохраните среднее качество в переменной final_score (англ. «итоговая оценка»). Тогда функция print() выведет результат на экран.
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
data = pd.read_csv('https://code.s3.yandex.net/datasets/heart.csv')
features = data.drop(['target'], axis=1)
target = data['target']
scores = []
# зададим размер блока, если их всего три
sample_size = int(len(data)/3)
for i in range(0, len(data), sample_size):
valid_indexes = data.iloc[i: i + sample_size].index
train_indexes = (data.iloc[:i] + data.iloc[i + sample_size:]).index
# разбейте переменные features и target на выборки features_train, target_train, features_valid, target_valid
features_train = features.iloc[train_indexes]
features_valid = features.iloc[valid_indexes]
target_train = target.iloc[train_indexes]
target_valid = target.iloc[valid_indexes]
model = DecisionTreeClassifier(random_state=0)
model = model.fit(features_train, target_train)
score = model.score(features_valid, target_valid)
scores.append(score)
final_score = pd.Series(scores).mean()
print('Средняя оценка качества модели:', final_score)
Результат
Средняя оценка качества модели: 0.7689768976897691