Как повысить точность классификатора дерева решений - PullRequest
0 голосов
/ 27 февраля 2019

Как повысить точность классификатора дерева решений?Я написал код для дерева решений с Python, используя sklearn.Я хочу проверить точность этого кода, поэтому я разделил данные на train и test.Я пытался «играть» с test_size и random_state, но я всегда получаю точность от 0,33 до 0,45 (33% -45%).Теперь я знаю, что я делаю неправильно, поэтому, пожалуйста, помогите мне, если вы знаете, в чем проблема.

Я скачал набор данных отсюда (http://archive.ics.uci.edu/ml/datasets/concrete+compressive+strength). Данные в файле Excel, они имеют 9 столбцови 1300 строк, я прочитал это с пандами.

Я сделал 10-й столбец, где я вычислил «Класс бетона», то есть строковое значение. Десятый Так, 10-й столбец имеет 15 различных строковых значений («конкретные классы»"). Я хочу предсказать конкретный класс на основе первых 8 столбцов

Это код:

import numpy as np
import pandas as pd
import xlrd
from sklearn.model_selection import train_test_split
from sklearn import tree
from sklearn.metrics import accuracy_score

def predict_concrete_class(input_data, cement, blast_fur_slug,fly_ash,
                            water, superpl, coarse_aggr, fine_aggr, days):

    data_for_tree = concrete_strenght_class(input_data)

    variable_list = []
    result_list = []

    for index, row in data_for_tree.iterrows():
        variable = row.tolist()
        variable = variable[0:8]

        variable_list.append(variable)
        result_list.append(row[-1])

    #accuracy of prediction(splitting the dataset)
    var_train, var_test, res_train, res_test = train_test_split(variable_list, result_list, test_size = 0.3, random_state = 42)

    decision_tree = tree.DecisionTreeClassifier()
    decision_tree = decision_tree.fit(var_train, res_train)

    input_values = [cement, blast_fur_slug, fly_ash, water, superpl, coarse_aggr, fine_aggr, days]

    #calculating the accuracy
    score = decision_tree.score(var_test, res_test)
    score = round(score*100, 2)

    prediction = decision_tree.predict([input_values])
    prediction = prediction[0]

    accuracy_info = "Accuracy of concrete class prediction: " + str(score) + " %\n"
    prediction_info = "Prediction of future concrete class after "+ str(days)+" days: "+ str(prediction) 
    info = "\n" + accuracy_info + prediction_info

    return info
...