【发布时间】:2018-05-06 18:38:29
【问题描述】:
我有一个带有标签和图像的文本数据集。标签是表示手写数字的一维元素。 Dimension:(1010,)。图片为 28*28 像素大小的图片。Dimension:(1010, 784)。从文本数据集读取后,我有以下数据集 reformatData['data'] 和 reformatData['target'] - 分别是 [n_samples, n_features] 和 [n_samples]。
同样,这些尺寸:(1010, 784) (1010,) 打印时reformatData
现在我正在尝试进行二进制分类并将数字引入矩阵,我尝试使用以下函数来完成。
digits1=[8]
digits2=[1]
def read(digits):
rows=28
cols=28
#lbl = array("b", reformatData['target'])
lbl = reformatData['target']
img=reformatData['data']
#img = array("B", reformatData['data'])
ind = [ k for k in xrange(len(lbl)) if lbl[k] in digits]
images = matrix(0, (len(ind), rows*cols))
labels = matrix(0, (len(ind), 1))
for i in xrange(len(ind)):
images[i, :] = img[ ind[i]*rows*cols : (ind[i]+1)*rows*cols ]
labels[i] = lbl[ind[i]]
return images, labels
print read(digits=digits1)
输出
(<0x784 matrix, tc='i'>, <0x1 matrix, tc='i'>)
我预计:
(<1010x784 matrix, tc='i'>, <1010x1 matrix, tc='i'>)
我该如何解决这个问题?
【问题讨论】:
-
如果您尝试将特征矩阵和目标向量提供给 sklearn 中的分类算法,则无需将两者连接起来。除非我误解了你的问题
-
这正是我想要做的。我不担心矩阵连接。我的问题是如何在该矩阵中引入“数字”,以便我可以执行二进制 SVM 分类:就像这里 cvxopt.org/applications/svm/index.html
-
也许我仍然不清楚您要做什么。您的特征矩阵的大小应为 [n_samples, n_features],正如您在上面阐明的那样,您的目标向量的大小应为 [n_samples, 1]。特征矩阵的每一列都应与训练集的每个图像中相应像素的相同指示位置有关。在这种情况下,每一行将代表一个单独的训练示例(或图像)。到目前为止我们达成了一致吗?
-
是的,rahlf23。谢谢你的第二部分。因此,如果我想做数字 3 和数字 6,那么概述问题,我该如何介绍它。如果我没有上面定义的“数字”变量来操作
-
通过您分享的链接的示例试图对 0 和 1 进行分类,您是否试图将此示例扩展到两个以上的类?
标签: python numpy scikit-learn svm