【问题标题】:How to select feature sizes如何选择特征尺寸
【发布时间】:2020-08-20 20:39:02
【问题描述】:

我正在尝试使用 SVM 在论文上复制一个实验,以增加我在机器学习方面的学习/知识。在本文中,作者提取特征并选择特征大小。他,然后给出一个表格,其中F代表特征向量的大小,N代表人脸图像

然后他使用 F >= 9 和 N >= 15 个参数。

现在,我想做的是像他在论文中那样实际抓取我提取的特征。

基本上,这就是我提取特征的方式:

def load_image_files(fullpath, dimension=(64, 64)):
    descr = "A image classification dataset"
    images = []
    flat_data = []
    target = []
    dimension=(64, 64)
    for category in CATEGORIES:
        path = os.path.join(DATADIR, category)
        for person in os.listdir(path):
            personfolder = os.path.join(path, person)
            for imgname in os.listdir(personfolder):
                class_num = CATEGORIES.index(category)
                fullpath = os.path.join(personfolder, imgname)
                img_resized = resize(skimage.io.imread(fullpath), dimension, anti_aliasing=True, mode='reflect')
                flat_data.append(img_resized.flatten())
                images.append(skimage.io.imread(fullpath))
                target.append(class_num)

    flat_data = np.array(flat_data)
    target = np.array(target)
    images = np.array(images)
    print(CATEGORIES)

    return Bunch(data=flat_data,
                     target=target,
                     target_names=category,
                     images=images,
                     DESCR=descr)

如何选择提取和存储的特征数量?或者我如何手动存储具有我需要的特征数量的向量?例如一个大小为 9 的特征向量

我正在尝试以这种方式分离我的功能:

X_train, X_test, y_train, y_test = train_test_split(
    image_dataset.data, image_dataset.target, test_size=0.3,random_state=109)

model = ExtraTreesClassifier(n_estimators=10)
model.fit(X_train, y_train)
print(model.feature_importances_)

不过,我的输出是:

[0. 0. 0. ... 0. 0. 0.]

对于 SVM 分类,我尝试使用 OneVsRestClassifier

model_to_set = OneVsRestClassifier(SVC(kernel="poly"))

parameters = {
    "estimator__C": [1,2,4,8],
    "estimator__kernel": ["poly", "rbf"],
    "estimator__degree":[1, 2, 3, 4],
}

model_tunning = GridSearchCV(model_to_set, param_grid=parameters)
model_tunning

model_tunning.fit(X_train, y_train)

prediction = model_tunning.best_estimator_.predict(X_test)

然后,一旦我调用预测,我得到:

Out[29]:
array([1, 0, 4, 2, 1, 3, 3, 0, 1, 1, 3, 4, 1, 1, 0, 3, 2, 2, 2, 0, 4, 2,
       2, 4])

【问题讨论】:

  • 您能否提供target 的结构 - 这是您的功能当前所在的位置。在不了解各个元素是什么的情况下,提出具体的解决方案具有挑战性
  • 我用我用来提取特征的函数编辑了这个问题

标签: python numpy feature-extraction feature-selection


【解决方案1】:

所以你有两个图像信息数组(一个未处理,另一个调整大小和展平)以及相应的类值列表(我们通常称为标签)。但是,目前有 2 件事与设置不完全正确:

1) 这里缺少多个features - 这些可能包括与从图像的形态/计算机视觉过程中提取特征相关的数据中的特定数组,或者它们可能是辅助数据,例如偏好、行为、购买列表.基本上,任何可以作为数字或分类格式的数组的东西。从技术上讲,您调整大小的图像是第二个功能,但我认为这不会对模型性能有任何改进。

2) target_names=category 在您的函数返回中会将最后一次迭代 pf 类别存储在 CATEGORIES 中。我不知道这是不是你想要的。


回到您的表格,N 是指数据集中的图像数量,F 是与该图像关联的相应特征数组的数量。举例来说,假设我们有 50 种不同的葡萄酒和 5 个特征(颜色、味道、酒精含量、pH 值、光密度)。 N of 5 将是其中的五种葡萄酒,F of 2 将是,例如,colour, taste

如果我不得不猜测您的特征是什么,它们实际上就是一个特征——图像数据本身。查看您的数据结构,您拥有的每个标签/类别都会有多个个人(人),每个人都有该人的多个图像示例。请注意,多个个体不是单独的特征 - 您构建数据的方式是,个体被归为一个类别。

那么,从这里到哪里?在不知道您正在阅读什么论文的情况下,很难建议该怎么做,但我会回去看看您是否可以向我们提供有关该问题的更多信息。

【讨论】:

  • 文章名称是董国民基于生理信息的热人脸识别。至于类别,我有 5 个类别的文件夹,每个文件夹有 20 个人,每个人都有很多图片,我真的不知道它是否真的向我展示了最后一次迭代。至于功能,有什么好方法可以将它们分隔成行和列?鉴于此,我必须稍后在 SVM 中安装它们
  • 很遗憾,我无法通过我的大学图书馆访问该论文或找到免费版本,抱歉。
  • 我们仍然缺少的是对功能/标签的清晰概念。您的 SVM 是否在尝试训练以查找给定照片的个人 ID(20 个文件夹),或者给定照片是否属于某个类别(5 个标签)。同一个人的每个类别中的所有 20 个子文件夹,即每个类别文件夹中的子文件夹 [1] 是否总是同一个人?如果是这样,那么您的标签实际上是 20 个子文件夹 ID 之一,而功能实际上是“类别”。一旦您知道自己想要什么,我们就可以建议将数据分离为标签/特征以进行 SVM 训练
  • 嗯,我的标签实际上是类别。至于究竟是什么功能,这实际上是我想弄清楚的。我想做的是获得不同大小的特征向量并测量它们以获得不同的识别率。不过,我到底要提取一个我选择的 N 大小的特征向量吗?
  • 问题,我可以使用降维方法来选择我的特征向量的大小吗?
猜你喜欢
  • 2014-09-12
  • 2014-09-21
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 2011-01-05
相关资源
最近更新 更多