面上的Python-scikit回归PCA

面上的Python-scikit回归PCA,python,machine-learning,scikit-learn,regression,pca,Python,Machine Learning,Scikit Learn,Regression,Pca,我有一个数据集,上面有表情快乐的脸。每个图像都有一个百分比(整数值)表示脸的快乐程度,范围为0-100%(0表示中性,100表示最大快乐)。我想在这方面应用PCA来降低维度,以便稍后应用机器学习,但我想知道我应该如何实现这一点 到目前为止我的代码: import os import cv2 import numpy as np from sklearn.decomposition import PCA folder = os.path.join('..','data','diff_face_s

我有一个数据集,上面有表情快乐的脸。每个图像都有一个百分比(整数值)表示脸的快乐程度,范围为0-100%(0表示中性,100表示最大快乐)。我想在这方面应用PCA来降低维度,以便稍后应用机器学习,但我想知道我应该如何实现这一点

到目前为止我的代码:

import os
import cv2
import numpy as np
from sklearn.decomposition import PCA

folder = os.path.join('..','data','diff_face_s')


#Holds per emotion the data
class diffPCA():
    def __init__(self, emo):
        self.emo = emo
        self.data = np.empty([1,270,270], dtype=np.uint8)
        self.pers = [0]
        self.perc = [0]
        #PCA
        self.pca = PCA(n_components = 2)

    #Add flattened image    
    def process(self, img, pers, perc):
        #img: diff_face, pers: person, perc: percentage
        img_raw = cv2.imread(os.path.join(folder, img), 0)
        img_flat = img_raw.flatten()
        self.data = np.vstack(img_flat)
        self.pers.append(pers)
        self.perc.append(perc)

    def doPCA(self):
        self.pca.fit(self.data)

    def printPCA(self):
        print(self.pca.explained_variance_ratio_)


#Emotions
happy = diffPCA(1)

for img in os.listdir(folder):
    print(img)
    #name
    #perc
    #pers
    #if name starts with 1:
    happy.process(img, perc, pers)

happy.doPCA()
happy.printPCA()
问题:

import os
import cv2
import numpy as np
from sklearn.decomposition import PCA

folder = os.path.join('..','data','diff_face_s')


#Holds per emotion the data
class diffPCA():
    def __init__(self, emo):
        self.emo = emo
        self.data = np.empty([1,270,270], dtype=np.uint8)
        self.pers = [0]
        self.perc = [0]
        #PCA
        self.pca = PCA(n_components = 2)

    #Add flattened image    
    def process(self, img, pers, perc):
        #img: diff_face, pers: person, perc: percentage
        img_raw = cv2.imread(os.path.join(folder, img), 0)
        img_flat = img_raw.flatten()
        self.data = np.vstack(img_flat)
        self.pers.append(pers)
        self.perc.append(perc)

    def doPCA(self):
        self.pca.fit(self.data)

    def printPCA(self):
        print(self.pca.explained_variance_ratio_)


#Emotions
happy = diffPCA(1)

for img in os.listdir(folder):
    print(img)
    #name
    #perc
    #pers
    #if name starts with 1:
    happy.process(img, perc, pers)

happy.doPCA()
happy.printPCA()

基于百分比的图像降维的最佳方法是什么?我可以用百分比列一个目标清单吗?我有100门课吗(每百分比1门)?

可能有助于了解如何进行。

感谢您的输入,这确实有助于编写代码。然而,如果这是正确的方法,我更多的是寻找一个理论上的答案。因为我只有一节课(快乐),或者我有100节课(0,1,2…100%)。它会在这么多的类上工作吗?或者我可以说它应该在一个值而不是类上工作吗?啊!不要做100个类,因为这个变量是有结构的。本质上,这是一个回归问题。但我认为仅仅应用线性回归(或PCA)不会得到任何令人满意的结果,因为它们将在像素空间中运行。因此,您应该首先提取诸如gabor能量之类的特征,或者为什么不像sklearn-theano那样提取神经网络的后续层。谢谢您的输入!我去看看。欢迎提供任何其他信息。