使用 Python 检查决策树分类器的准确性
Check the accuracy of decision tree classifier with Python
我写了一个函数,它接受数据集 (excel / pandas) 和一些值,然后用决策树分类器预测结果。我已经用 sklearn 做到了。
你能帮我解决这个问题吗,我浏览了网络和这个网站,但找不到有效的答案。
我试过这样做,但它不起作用:
from sklearn.metrics import accuracy_score
score = accuracy_score(variable_list, result_list)
这是我得到的错误:
ValueError: Classification metrics can't handle a mix of continuous-multioutput and multiclass targets
这是代码(为了准确性我删除了代码)
import pandas as pd
import math
import xlrd
from sklearn.model_selection import train_test_split
from sklearn import tree
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])
decision_tree = tree.DecisionTreeClassifier()
decision_tree = decision_tree.fit(variable_list,result_list)
input_values = [cement, blast_fur_slug, fly_ash, water, superpl, coarse_aggr, fine_aggr, days]
prediction = decision_tree.predict([input_values])
info = "Prediction of future concrete class after "+ str(days)+" days: "+ str(prediction[0])
return info
print(predict_concrete_class(data, 500, 0, 0, 200, 0, 1125, 613, 3))
如果您想检查系统的准确性,您应该执行交叉验证。
您必须将数据集分成两部分。第一个用于学习您的系统。然后对数据集的第二部分执行预测过程,并将预测结果与良好结果进行比较。使用这种方法,您可以在未学习的数据集上检查您的系统。
为了拆分你的集合,你应该使用 sklearn.model_selection 中的 train_test_split
您将随机拆分您的集合。
这是一个很好的讲座:https://machinelearningmastery.com/k-fold-cross-validation/
将您的数据拆分为训练和测试:
var_train, var_test, res_train, res_test = train_test_split(variable_list, result_list, test_size = 0.3)
在训练集上训练您的决策树:
decision_tree = tree.DecisionTreeClassifier()
decision_tree = decision_tree.fit(var_train, res_train)
通过计算测试集的准确性来测试模型性能:
res_pred = decision_tree.predict(var_test)
score = accuracy_score(res_test, res_pred)
或者你可以直接使用decision_tree.score
:
score = decision_tree.score(var_test, res_test)
您收到的错误是因为您试图将 variable_list
(这是您的输入特征列表)作为参数传递给 accuracy_score
。您应该传递真实标签和预测标签列表。
我写了一个函数,它接受数据集 (excel / pandas) 和一些值,然后用决策树分类器预测结果。我已经用 sklearn 做到了。 你能帮我解决这个问题吗,我浏览了网络和这个网站,但找不到有效的答案。 我试过这样做,但它不起作用:
from sklearn.metrics import accuracy_score
score = accuracy_score(variable_list, result_list)
这是我得到的错误:
ValueError: Classification metrics can't handle a mix of continuous-multioutput and multiclass targets
这是代码(为了准确性我删除了代码)
import pandas as pd
import math
import xlrd
from sklearn.model_selection import train_test_split
from sklearn import tree
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])
decision_tree = tree.DecisionTreeClassifier()
decision_tree = decision_tree.fit(variable_list,result_list)
input_values = [cement, blast_fur_slug, fly_ash, water, superpl, coarse_aggr, fine_aggr, days]
prediction = decision_tree.predict([input_values])
info = "Prediction of future concrete class after "+ str(days)+" days: "+ str(prediction[0])
return info
print(predict_concrete_class(data, 500, 0, 0, 200, 0, 1125, 613, 3))
如果您想检查系统的准确性,您应该执行交叉验证。
您必须将数据集分成两部分。第一个用于学习您的系统。然后对数据集的第二部分执行预测过程,并将预测结果与良好结果进行比较。使用这种方法,您可以在未学习的数据集上检查您的系统。
为了拆分你的集合,你应该使用 sklearn.model_selection 中的 train_test_split 您将随机拆分您的集合。
这是一个很好的讲座:https://machinelearningmastery.com/k-fold-cross-validation/
将您的数据拆分为训练和测试:
var_train, var_test, res_train, res_test = train_test_split(variable_list, result_list, test_size = 0.3)
在训练集上训练您的决策树:
decision_tree = tree.DecisionTreeClassifier() decision_tree = decision_tree.fit(var_train, res_train)
通过计算测试集的准确性来测试模型性能:
res_pred = decision_tree.predict(var_test) score = accuracy_score(res_test, res_pred)
或者你可以直接使用
decision_tree.score
:score = decision_tree.score(var_test, res_test)
您收到的错误是因为您试图将 variable_list
(这是您的输入特征列表)作为参数传递给 accuracy_score
。您应该传递真实标签和预测标签列表。