Ах. ХОРОШО. Проблема в том, что ваши данные являются категориальными данными, с которыми scikit
не может работать напрямую. Сначала его необходимо преобразовать в числовые данные. Метод ._get_dummies()
делает это, беря один столбец с несколькими категориальными значениями и преобразовывая его в несколько столбцов, каждый из которых содержит числовое значение 1 или 0, указывающее, является ли данная категория "True".
В качестве отступления,Вы должны удалить столбец «Идентификатор клиента» из функций. Это случайное значение, которое не имеет отношения к тому, принадлежит ли строка тому или иному классу.
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import metrics
col_names=['CustomerID','Gender','Car Type', 'Shirt Size','Class']
data = [['1', 'M', 'Family', 'Small', 'C0'],
['2', 'M', 'Sports', 'Medium', 'C0'],
['3', 'M', 'Sports', 'Medium', 'C0'],
['4', 'M', 'Sports', 'Large', 'C0'],
['5', 'M', 'Sports', 'Extra Large','C0'],
['6', 'M', 'Sports', 'Extra Large','C0'],
['7', 'F', 'Sports', 'Small', 'C0'],
['8', 'F', 'Sports', 'Small', 'C0'],
['9', 'F', 'Sports', 'Medium', 'C0'],
['10', 'F', 'Luxury', 'Large', 'C0'],
['11', 'M', 'Family', 'Large', 'C1'],
['12', 'M', 'Family', 'Extra Large','C1'],
['13', 'M', 'Family', 'Medium', 'C1'],
['14', 'M', 'Luxury', 'Extra Large','C1'],
['15', 'F', 'Luxury', 'Small', 'C1']]
#pima=pd.read_csv("F:\Current semster courses\Machine ...
pima=pd.DataFrame(data, columns = col_names)
# Convert the categorical data to multiple columns of numerical data for the decision tree
pima = pd.get_dummies(pima, prefix=['CustomerID','Gender','Car Type', 'Shirt Size','Class'])
print(pima)
#feature_cols=['CustomerID','Gender','Car Type','Shirt Size']
feature_cols=['Gender_F', 'Gender_M',
'Car Type_Family', 'Car Type_Luxury', 'Car Type_Sports',
'Shirt Size_Extra Large', 'Shirt Size_Large', 'Shirt Size_Medium',
'Shirt Size_Small', 'Class_C0', 'Class_C1']
X=pima[feature_cols]
y=pima[['Class_C0', 'Class_C1']]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
print("X_train =", X_train)
print("X_test =", X_test)
print("y_train =", y_train)
print("y_test =", y_test )
clf = DecisionTreeClassifier()
# Train Decision Tree Classifer
clf = clf.fit(X_train,y_train)
#Predict the response for test dataset
y_pred = clf.predict(X_test)
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))