Python 构建特征矩阵和标签向量:
我有一个数据集“数字”。该数据集包括1797个小图像(8x8像素),每个图像包括一个手写数字(0-9)。每个图像被视为一个以像素为特征的数据样本。因此,要构建特征表,必须将每个8x8图像转换为具有64个特征列(64个像素)的特征矩阵行。如何为它构建特征矩阵和标签向量 如果您使用的是Python 构建特征矩阵和标签向量:,python,matplotlib,scikit-learn,Python,Matplotlib,Scikit Learn,我有一个数据集“数字”。该数据集包括1797个小图像(8x8像素),每个图像包括一个手写数字(0-9)。每个图像被视为一个以像素为特征的数据样本。因此,要构建特征表,必须将每个8x8图像转换为具有64个特征列(64个像素)的特征矩阵行。如何为它构建特征矩阵和标签向量 如果您使用的是numpy和cv2,您可以执行以下操作: import numpy as np import cv2 fname = "image1.jpg" image = cv2.imread(fname)
numpy
和cv2
,您可以执行以下操作:
import numpy as np
import cv2
fname = "image1.jpg"
image = cv2.imread(fname) # (8, 8, 1)
feature = image.reshape(64) # (64,)
N = 10 # number of images
data = np.zeros((N, 64))
for index in range(N):
# get the current image and convert to feature, as above
data[index] = np.copy(feature)
要读取一组图像并加载到“特征矩阵”(一个numpy
数组),您可以执行以下操作:
import numpy as np
import cv2
fname = "image1.jpg"
image = cv2.imread(fname) # (8, 8, 1)
feature = image.reshape(64) # (64,)
N = 10 # number of images
data = np.zeros((N, 64))
for index in range(N):
# get the current image and convert to feature, as above
data[index] = np.copy(feature)
现在,数据矩阵的每一行都是一个示例(64维特征列表)
这有用吗
标签向量可以是1D numpy数组,即labels=np.zero(N)
编辑:
有多种方法可以读取图像:
(1) img=cv2.imread(文件名)
(2) 使用matplotlib:
import matplotlib.image as mpimg
img = mpimg.imread(filename)
(3) 使用PIL(或枕头):
读取图像后,检查图像的形状是值得的,这样您就知道图像的通道、宽度和高度顺序正确,适合您的应用。您可以按照scikit学习教程的指导学习,在那里他们使用的是数字数据集 更详细地说。如果像示例中那样加载数据集,则可以简单地重塑图像:
from sklearn import datasets
digits = datasets.load_digits()
# To apply a classifier on this data, we need to flatten the image, to
# turn the data in a (samples, feature) matrix:
n_samples = len(digits.images)
data = digits.images.reshape((n_samples, -1))
这使得
数据
成为一个2D矩阵,包含n_样本
行和尽可能多的列,以适合展平图像。对不起,我不知道cv2模块,没有它我们有什么办法吗?当然,我已经更新了三种最流行方法的答案。很可能您将在使用的任何python发行版中安装matplotlib,因此我建议您安装matplotlib。cv2是python opencv模块-它对于执行一般图像操作非常有用。我在一个文件夹中有1797个图像,如何在一个numpy数组中加载所有图像??您应该使用(并且可能接受)下面@KPLauritzen的答案,因为这正是您需要回答的问题。否则,要加载一幅图像,你可以找到更多的细节,所以我得到了它,并将其转换为特征矩阵和标签向量,然后应用随机森林,得到了大约92%的准确率。我有没有办法列出所有错误分类的图像?