У меня есть датафрейм с 21 столбцом и 260616 строками.Я хотел построить модель классификации дерева решений для переменной состояния.Я очистил данные и превратил все переменные в правильные типы данных.Ниже приводится сводка всех столбцов в данных -
Столбцы данных (всего 21 столбец):
Бренд (260616 ненулевой объект)
Order_Line_Id (260616 ненулевой объект)
Order_Type (260616 ненулевой объект)
OLSC_FC_Name (260616 ненулевой объект)
FC_Id (260616 ненулевой объект)
OLSC_Day_Of_the_week (260616 ненулевой объект)
OLSAC_Reason (260616 ненулевой объект)
Inv_Qty (260616 ненулевой int64)
Пол (260616 ненулевой объект)
Категория (260616 ненулевой объект)
Подкатегория (260616 ненулевой объект)
SubBrand (260616 ненулевой объект)
Сезон (260616 ненулевой объект)
FC_Type (260616 ненулевой объект)
Order_Month (260616 ненулевой int64)
OLSC_Month (260616 ненулевой int64)
OLSC_Hour (260616 ненулевой int64)
Assignment_Hour (260616 ненулевой int64)
Assignment_Day_of_the_week (260616 ненулевой объект)
A2MPF (260616 ненулевой float64)
OLSC_Status (260616 ненулевой объект)
Я выбрал модель дерева решений в качестве начала, чтобы посмотреть, смогу ли я увидеть какой-либо значимый результат, чтобы поднять его на отметку.
Я закодировал все категориальные переменные, используя Label Encoder, сделал OLSC_Statusтип данных как «категория», разделить тестовую последовательность с соотношением 70:30 и записать код алгоритма с DecisionTreeClassifier.
Но оценки за точность, напомним, f1-оценка, поддержка были равны 1.0, что странно.
Дерево получило только два уровня.
И это совершенно неправильно.Мне нужна помощь в понимании, что я делаю не так?Кроме того, какой алгоритм является наиболее оптимальным для такой проблемы.
Ниже приведен код для алгоритма дерева решений, который я использовал.
# Splitting the data into train and test
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.30,
random_state = 99)
X_train.head()
y_train.value_counts()
y_test.value_counts()
# Importing decision tree classifier from sklearn library
from sklearn.tree import DecisionTreeClassifier
# Fitting the decision tree with default hyperparameters, apart from
# max_depth which is 5 so that we can plot and read the tree.
dt_default = DecisionTreeClassifier(max_depth=10)
dt_default.fit(X_train, y_train)
# Let's check the evaluation metrics of our default model
# Importing classification report and confusion matrix from sklearn metrics
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
# Making predictions
y_pred_default = dt_default.predict(X_test)
# Printing classification report
print(classification_report(y_test, y_pred_default))
# Printing confusion matrix and accuracy
print(confusion_matrix(y_test,y_pred_default))
print(accuracy_score(y_test,y_pred_default))
# Importing required packages for visualization
from IPython.display import Image
from sklearn.externals.six import StringIO
from sklearn.tree import export_graphviz
import pydotplus, graphviz
# Putting features
features = list(df_ca.columns[1:])
features
# plotting tree with max_depth=10
dot_data = StringIO()
export_graphviz(dt_default, out_file=dot_data,
feature_names=features, filled=True,rounded=True)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())
Вотизображение с окончательным деревом решений