Python Scikit学习';s DecisionTreeClassifier';s拟合方法给出的值错误:cand';t将输入阵列从形状(10,35)广播到形状(10)
因此,我试图建立一个决策树,我的目标是数组[0,1](二进制“否”或“是”),我的输入训练集是三维数组,第一个元素都是“否”示例(10),每个元素有35个特征,与“是”相同。但我一直在犯这个错误Python Scikit学习';s DecisionTreeClassifier';s拟合方法给出的值错误:cand';t将输入阵列从形状(10,35)广播到形状(10),python,python-3.x,machine-learning,scikit-learn,Python,Python 3.x,Machine Learning,Scikit Learn,因此,我试图建立一个决策树,我的目标是数组[0,1](二进制“否”或“是”),我的输入训练集是三维数组,第一个元素都是“否”示例(10),每个元素有35个特征,与“是”相同。但我一直在犯这个错误 file1 = open(file1.txt) # examples of 'No' class file2 = open(file2.txt) # examples of 'Yes' class x = vectorizer.fit_transform(file1) y
file1 = open(file1.txt) # examples of 'No' class
file2 = open(file2.txt) # examples of 'Yes' class
x = vectorizer.fit_transform(file1)
y = vectorizer.fit_transform(file2)
x_array = x.toarray()
y_array = y.toarray()
x_train, x_test, y_train, y_test = train_test_split(x_array, y_array,
test_size=0.2)
target = [0, 1] # 0 encoded as 'No' and 1 as 'Yes
train = [x_train, y_train]
decisiontree = DecisionTreeClassifier(random_state=0, max_depth=5)
decisiontree = decisiontree.fit(train, target)
谢谢你的帮助
编辑:我正在从一个txt文件加载数据,它是文本数据,我已经尝试打印数组的某些部分,现在就是了
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
我认为原因是您对
decisiontree.fit
中的fit方法感到困惑
对于decisiontree.fit(X,Y)
,它希望X
是数据点,Y
是标签。也就是说,如果X
具有形状nx32
,则Y
应具有形状N
(其中N
是数据点的数量)
您应该将x_数组
和y_数组
组合为整个数据集,将其拆分,并使用相应的标签执行fit
考虑以下几点:
#来自sklearn.model_选择导入列车_测试_分割
#从sklearn.tree导入DecisionTreeClassifier
将numpy作为np导入
file1=打开(file1.txt)
file2=打开(file2.txt)
x=矢量器。拟合_变换(文件1)
y=矢量器。拟合_变换(文件2)
x_数组=x.toarray()
y_数组=y.toarray()
# ------------------------------------------------------------
#把正面和反面的例子结合起来
数据=np。连接([x_数组,y_数组],轴=0)
#创建相应的标签(基于数据的长度)
labels=np.concatenate([np.zero(x_array.shape[0]),
np.ones(y_数组.shape[0]),轴=0)
#分为列车和测试集
列车数据、测试数据、列车标签、测试标签=列车测试拆分(
数据、标签、测试(尺寸=0.2)
decisiontree=DecisionTreeClassifier(随机状态=0,最大深度=5)
decisiontree=decisiontree.fit(列车数据、列车标签)
# ------------------------------------------------------------
#这就是使用测试集测试模型性能的方法
正确的预测=np.count\u非零(
decisiontree.predict(测试数据)=测试标签
)
打印(“测试集中的正确预测:{}/{}”)。格式(正确的预测,
测试(U标签形状[0]))
上传更多显示火车和目标阵列的代码。此外,您的数据集样本这可能不是唯一的问题,但decisiontree=decisiontree.fit(train,target)
应该是decisiontree=decisiontree.fit(x\u train,y\u train)
@Max Power x\u train和y\u train是“否”和“是”类的示例。目标是否应该是[0,1],0编码为“否”,1编码为“是”?如果目标是[0,1]
,并且您将其作为第二个参数传递给fit
方法,sklearn将其解释为“我们正在训练两个记录/行,第一个记录/行的基本真值为0,第二个记录/行的基本真值为1。但我很确定这不是您想要的,因为您似乎有两行以上的数据。另外,传递给
fit`的第一个参数应该是单个二维形状数组(num_记录、num_特征),而不是两个不同数组的列表。不过,更一般的建议是,为了在堆栈溢出时获得最佳结果,应该发布一个最小值,可复制的示例,包括创建一些示例数据以运行您尝试调试的代码的代码。这里没有人拥有您的file1.txt
,因此在它真正工作之前,没有人可以运行您的代码对其进行迭代。有关如何使用示例数据编写良好完整的最小示例的示例,请参见此处: