Python sklearn sgd Classifier的多输出预测?
我创建了一个与此类似的scikit模型。但是现在我想提取两个输出。我不知道如何在训练中通过这个。我也试过类似凯拉斯的方法。[y,z]作为列表。但它在scikit中不起作用。以前有人试过吗Python sklearn sgd Classifier的多输出预测?,python,machine-learning,scikit-learn,classification,gradient-descent,Python,Machine Learning,Scikit Learn,Classification,Gradient Descent,我创建了一个与此类似的scikit模型。但是现在我想提取两个输出。我不知道如何在训练中通过这个。我也试过类似凯拉斯的方法。[y,z]作为列表。但它在scikit中不起作用。以前有人试过吗 将numpy导入为np 从sklearn导入线性_模型 X=np.数组([[-1,-1],-2,-1],[1,1],[2,1]] Y=np.数组([1,1,2,2]) Z=np.数组([1,1,2,2]) clf=线性模型。SGDClassizer(最大iter=1000) clf.fit(X[Y,Z]) 输
将numpy导入为np
从sklearn导入线性_模型
X=np.数组([[-1,-1],-2,-1],[1,1],[2,1]]
Y=np.数组([1,1,2,2])
Z=np.数组([1,1,2,2])
clf=线性模型。SGDClassizer(最大iter=1000)
clf.fit(X[Y,Z])
输出:
ValueError:输入形状不正确(2,4)
(免责声明:我的ML有点生疏,但我感觉我知道你在找什么,这太长了,不能作为评论)
传递给clf.fit
的形状不正确
首先你要传递X,这很好,它是一个数组,里面有数组,每个数组都包含特性的值(对吗?)
现在,您要传递的第二个参数是由Y和Z组成的数组
如果我们查看,我们可以看到拟合函数需要一个Y,其格式如下:
y : numpy array, shape (n_samples,)
Target values
这意味着它必须是一个包含这n个样本的单个数组
我不太确定您试图与[Y,Z]
匹配的是什么,以及调用clf.predict
时预期的结果,但我认为您没有正确地形成目标数组
也许你应该把你的数组组成为Y=Y+Z:
YZ = [ [1,1], [1,1], [2,2], [2,2] ]
通过使用此YZ数组,当运行例如clf.predict([-1,-1])
时,将显示以下输出:
clf.predict([-1, -1])
output: [1,1]
(免责声明:我的ML有点生疏,但我感觉我知道你在找什么,这太长了,不能作为评论)
传递给clf.fit
的形状不正确
首先你要传递X,这很好,它是一个数组,里面有数组,每个数组都包含特性的值(对吗?)
现在,您要传递的第二个参数是由Y和Z组成的数组
如果我们查看,我们可以看到拟合函数需要一个Y,其格式如下:
y : numpy array, shape (n_samples,)
Target values
这意味着它必须是一个包含这n个样本的单个数组
我不太确定您试图与[Y,Z]
匹配的是什么,以及调用clf.predict
时预期的结果,但我认为您没有正确地形成目标数组
也许你应该把你的数组组成为Y=Y+Z:
YZ = [ [1,1], [1,1], [2,2], [2,2] ]
通过使用此YZ数组,当运行例如clf.predict([-1,-1])
时,将显示以下输出:
clf.predict([-1, -1])
output: [1,1]
首先,你的目标不是你想象的那样:
[Y,Z]
#[数组([1,1,2,2]),数组([1,1,2,2])]
可以说,您想要的应该有四行,如X
,即
W=np.array([[1,1],[1,1],[2,2],[2,2]]
W
#结果:
数组([[1,1],
[1, 1],
[2, 2],
[2, 2]])
但即使进行了此更改,您也会再次遇到类似的错误:
clf.fit(X,W)
[...]
ValueError:输入形状不正确(4,2)
因为,正如SGDClassizer中明确提到的,因变量y
应该有一列:
fit
(X,y,coef_init=None,intercept_init=None,sample_weight=None)
y:numpy数组,形状(n个样本,)
目标值
可以说,您正在寻找的是scikit learn的:
从sklearn.multioutput导入MultiOutputClassifier
sgd=线性模型。sgd分类器(最大iter=1000)
multi_target_sgd=多输出分类器(sgd,n_作业=-1)
多目标尺寸(X,W)
fit
现在工作正常,输出如下:
clf.predict([-1, -1])
output: [1,1]
multi-outputClassifier(估计器=sgdclassizer(alpha=0.0001,平均值=False,class_-weight=None,epsilon=0.1,
eta0=0.0,拟合截距=真,l1_比率=0.15,
学习率=最佳,损耗=铰链,最大电阻=1000,无电阻=无,
n_作业=1,惩罚=l2',功率=0.5,随机状态=None,
shuffle=True,tol=None,verbose=0,warm\u start=False),
n_作业=-1)
只需记住,主题分类器没有做任何比为每个目标输出装配一个分类器更复杂的事情;从另一方面:
多目标分类
该策略包括为每个目标装配一个分类器。这是一个
扩展本机不支持的分类器的简单策略
多目标分类
首先,你的目标不是你想象的那样:
[Y,Z]
#[数组([1,1,2,2]),数组([1,1,2,2])]
可以说,您想要的应该有四行,如X
,即
W=np.array([[1,1],[1,1],[2,2],[2,2]]
W
#结果:
数组([[1,1],
[1, 1],
[2, 2],
[2, 2]])
但即使进行了此更改,您也会再次遇到类似的错误:
clf.fit(X,W)
[...]
ValueError:输入形状不正确(4,2)
因为,正如SGDClassizer中明确提到的,因变量y
应该有一列:
fit
(X,y,coef_init=None,intercept_init=None,sample_weight=None)
y:numpy数组,形状(n个样本,)
目标值
可以说,您正在寻找的是scikit learn的:
从sklearn.multioutput导入MultiOutputClassifier
sgd=线性模型。sgd分类器(最大iter=1000)
multi_target_sgd=多输出分类器(sgd,n_作业=-1)
多目标尺寸(X,W)
fit
现在工作正常,输出如下:
clf.predict([-1, -1])
output: [1,1]
multi-outputClassifier(估计器=sgdclassizer(alpha=0.0001,平均值=False,class_-weight=None,epsilon=0.1,
eta0=0.0,拟合截距=真,l1_比率=0.15,
学习率=最佳,损耗=铰链,最大电阻=1000,无电阻=无,