проблема с деревом решений, примененным к набору данных - PullRequest
0 голосов
/ 05 ноября 2018

Я тестировал программирование дерева решений с помощью R и решил использовать набор данных автомобиля из UCI, доступный здесь .

По мнению авторов, оно имеет 7 атрибутов:

CAR                      car acceptability
   . PRICE                  overall price
   . . buying               buying price
   . . maint                price of the maintenance
   . TECH                   technical characteristics
   . . COMFORT              comfort
   . . . doors              number of doors
   . . . persons            capacity in terms of persons to carry
   . . . lug_boot           the size of luggage boot
   . . safety               estimated safety of the car

поэтому я хочу использовать DT в качестве классификатора для определения приемлемости автомобиля с учетом покупной цены, качества, комфорта, дверей, персон, lug_boot и безопасности.

Сначала я извлек первый столбец как зависимую переменную, а затем заметил, что данные упорядочены по порядку; в зависимости от значения первого столбца (очень высокий, высокий, средний, низкий). По этой причине я решил перемешать данные. Мой код следующий:

car_data<-read.csv("car.data")
library(C50)
set.seed(12345)
car_data_rand<-car_data[order(runif(1727)),]
car_data<-car_data_rand
car_data_train<-car_data[1:1500,]
car_data_test<-car_data[1501:1727,]
answer<-data_train$vhigh
answer_test<-data_test$vhigh
#deleting the dependent variable or y from the data
car_data_train$vhigh<-NULL
car_data_test$vhigh<-NULL
car_model<-C5.0(car_data_train,answer)
summary(car_model)

Здесь я получаю ужасную ошибку:

Evaluation on training data (1500 cases):

        Decision Tree   
      ----------------  
      Size      Errors  

         7  967(64.5%)   <<

Что я делаю не так?

1 Ответ

0 голосов
/ 05 ноября 2018
  1. В середине вашего кода у вас есть data_train и data_test, а не car_data_train и car_data_test.

  2. Пока ошибка высока, в этом нет ничего плохого. Обратите внимание, что

1 - table(answer) / length(answer)
# answer
#      high       low       med     vhigh 
# 0.7466667 0.7566667 0.7426667 0.7540000 

Это означает, что если вы наивно всегда догадались «низко», ваша ошибка составила бы 75,6%. Таким образом, является улучшением на ~ 11,1%. Тот факт, что он несколько низкий, означает, что предсказатели не велики.

  1. Наконец, есть несоответствие: вы говорите, что хотите смоделировать приемлемость автомобиля, в то время как ваш код относится к переменной buying. Теперь исправление приводит к ошибке всего лишь 1,1%. Однако в этом случае ваш образец очень несбалансирован:

1 - table(answer) / length(answer)
# answer
#       acc      good     unacc     vgood 
# 0.7773333 0.9600000 0.3020000 0.9606667 

То есть, всегда угадывая unacc, вы снова можете получить только 30,2% ошибки. Улучшение на 29,1%, однако, явно больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...