Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scikit学习';s DecisionTreeClassifier';s拟合方法给出的值错误:cand';t将输入阵列从形状(10,35)广播到形状(10)_Python_Python 3.x_Machine Learning_Scikit Learn - Fatal编程技术网

Python Scikit学习';s DecisionTreeClassifier';s拟合方法给出的值错误:cand';t将输入阵列从形状(10,35)广播到形状(10)

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

因此,我试图建立一个决策树,我的目标是数组[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 = 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
,因此在它真正工作之前,没有人可以运行您的代码对其进行迭代。有关如何使用示例数据编写良好完整的最小示例的示例,请参见此处: