Scikit-learn.Для чего нужны параметры test_size, random_state, max_depth. И как их правильно указать на примере задачи

Рейтинг: 0Ответов: 1Опубликовано: 14.02.2023

Никогда не изучал питон. В институте дали задачу, которую сам решить не могу - материала мало, сроки короткие. Помогите разобраться с крошечной частью алгоритма ее решения.

Задача следующая "Требуется определить коэффициенты значимости каждого атрибута и округлить значения до 3 знаков после запятой". Не могу понять на что влияют test_size, random_state, max_depth и какое значение им правильно присвоить. Набор данных после кода.

import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

#Использую файл с данными, который сам создал
df = pd.read_csv('data.csv' , delimiter=',')
df

#Разделение переменных на входные данные и целевую переменную
Y = df [['C']].values
X = df [['A1','A2', 'A3' , 'A4' , 'A5' , 'A6']].values

#Вот тут не понятно, как верно указывать параметры test_size и random_state
X_trainset, X_testset, y_trainset, y_testset = train_test_split (X, Y, test_size = 0.2,random_state = 0)

#В этом шаге тоже не понятно как в моём случае указать max_depth

data = DecisionTreeClassifier (criterion = 'entropy', max_depth = 29)
data.fit (X_trainset, y_trainset)
random_state = 0)

#Вычисление коэффициента значимости
 buff = data.feature_importances_

buff.round(3)

Набор данных

A1,A2,A3,A4,A5,A6,C
-7.537,-0.725,-8.433,6.89,6.713,1.924,2.0
-1.907,-7.939,-2.743,2.169,1.343,-4.065,0.0
-3.584,3.158,-6.273,-3.797,1.815,5.753,1.0
-0.539,-6.762,1.997,-2.982,-1.593,-2.309,0.0
4.42,-6.531,-0.832,-11.204,-1.188,-6.556,3.0
-0.848,-13.199,0.155,-1.558,-1.672,-2.741,0.0
-7.096,3.041,-3.414,-8.519,-7.896,-3.857,4.0
8.152,-7.56,2.341,-9.243,2.046,-8.964,3.0
-9.383,4.467,-3.246,-5.098,4.77,-4.104,1.0
-9.58,1.718,-9.181,-7.2,-6.225,-5.703,4.0
-11.226,2.203,-2.617,-8.73,2.044,0.428,1.0
-3.638,1.153,-7.75,4.54,6.429,-1.236,2.0
-7.214,4.07,-4.77,-4.53,0.225,3.752,1.0
-0.057,-9.386,-0.665,-1.118,0.408,-4.155,0.0
-7.753,4.938,-3.741,-10.035,-4.265,-1.534,4.0
-5.361,-9.389,-0.362,-4.172,-0.544,-1.923,0.0
-8.644,4.234,-2.809,-7.256,-6.502,-1.975,4.0
-6.831,3.087,-3.243,-3.531,2.831,3.396,1.0
8.324,-7.012,1.308,-8.687,-1.894,-12.209,3.0
-9.113,-0.91,-6.864,4.673,5.682,-1.973,2.0
-10.273,1.964,-5.315,5.96,4.242,-0.619,2.0
-4.258,4.882,-4.815,-7.432,5.157,3.019,1.0
7.661,-6.859,-0.624,-10.446,-0.645,-8.699,3.0
-5.71,2.797,-4.807,3.719,9.298,-3.645,2.0
-2.208,-2.675,-8.354,6.571,6.432,0.732,2.0
7.414,-7.412,8.322,-7.052,1.626,-12.041,3.0
-5.535,3.452,-7.748,-9.276,-8.037,0.605,4.0
3.838,-12.572,6.664,-6.753,2.148,-8.927,3.0
-2.031,-9.63,1.86,1.263,-2.862,-2.377,0.0
-4.123,-9.788,0.455,3.169,-6.462,-3.168,0.0
-5.798,3.196,-8.386,-8.537,-4.876,-1.759,4.0

Ответы

▲ 2Принят

Всегда читайте документацию. Вот train_test_split, вот DecisionTreeClassifier.

test_size float or int, default=None
If float, should be between 0.0 and 1.0 and represent the proportion of the dataset to include in the test split. If int, represents the absolute number of test samples. If None, the value is set to the complement of the train size. If train_size is also None, it will be set to 0.25.

Вы же делите данные между train и test, этим параметром задаётся доля датасета, которая пойдёт в test, в вашем случае это 0.2, т.е. 20%. А 80% пойдёт соответственно в train. Это вполне стандартный вариант, для теста используют меньше данных, чем для трейна.

random_state int, RandomState instance or None, default=None
Controls the shuffling applied to the data before applying the split. Pass an int for reproducible output across multiple function calls. See Glossary.

Этот параметр нужно указывать, если вы хотите, чтобы при повторном запуске кода получился в точности такой же результат. Если не указать, то для моделей, имеющих элемент случайности, результат с каждым запуском может получиться немого разный.

max_depth int, default=None
The maximum depth of the tree. If None, then nodes are expanded until all leaves are pure or until all leaves contain less than min_samples_split samples.

Вы же знаете, что такое "решающее дерево"? Этим параметром задаётся максимальная "глубина" или, если хотите, "высота" дерева, т.е. сколько в нём "этажей", сколько раз оно может разделиться на новые ветки. Что тут использовать, какое число - к вашей задаче вроде бы отношения не имеет. но вообще обычно деревья строят не такие глубокие. Но тут зависит от данных, нужно на них смотреть. Проще всего для начала не задавать этот параметр вовсе.

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