Как повысить точность классификатора дерева решений?Я написал код для дерева решений с 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