如何选择特征尺寸

时间:2020-05-06 01:26:49

标签: python numpy feature-extraction feature-selection

我尝试使用SVM在纸上复制实验,以增加我在机器学习方面的学习/了解。在本文中,作者提取特征并选择特征尺寸。然后,他显示一张表格,其中F代表特征向量的大小,N代表面部图像

enter image description here

然后他使用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])

1 个答案:

答案 0 :(得分:1)

因此,您有两个图像信息数组(一个未处理,另一个已调整大小和展平),以及一列相应的类值(我们通常将其称为标签)。但是,当前有两件事情与设置不符:

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

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


回到表中,N代表数据集中的图像数量,F代表与该图像关联的相应要素阵列的数量。举例来说,假设我们有五十种独立的葡萄酒和五个功能(颜色,味道,酒精含量,pH,光密度)。 N的5个将是其中的五种,F的2将是colour, taste

如果我不得不猜测您的功能将是什么,那么实际上它们将是一个功能-图像数据本身。查看您的数据结构,您拥有的每个标签/类别都会有多个人(人),每个人都带有该人的图像的多个示例。请注意,多个人不是独立的功能-在您构建数据的方式中,这些人被归为一个类别。

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