Ich versuche, Hauptkomponentenanalyse auf Datensätzen mit Bildern durchzuführen, aber immer, wenn ich pca.transform aus dem Modul sklearn.decomposition anwenden möchte, bekomme ich diesen Fehler: * AttributeError: 'PCA' Objekt hat kein Attribut 'mean _' *. Ich weiß, was dieser Fehler bedeutet, aber ich habe keine Ahnung, wie ich das beheben soll. Ich denke, einige von euch wissen, wie man das repariert.Principal Component Analysis funktioniert nicht
Vielen Dank für Ihre Hilfe
Mein Code:
from sklearn import svm
import numpy as np
import glob
import os
from PIL import Image
from sklearn.decomposition import PCA
image_dir1 = "C:\Users\private\Desktop\K FOLDER\private\train"
image_dir2 = "C:\Users\private\Desktop\K FOLDER\private\test1"
Standard_size = (300,200)
pca = PCA(n_components = 10)
file_open = lambda x,y: glob.glob(os.path.join(x,y))
def matrix_image(image_path):
"opens image and converts it to a m*n matrix"
image = Image.open(image_path)
print("changing size from %s to %s" % (str(image.size), str(Standard_size)))
image = image.resize(Standard_size)
image = list(image.getdata())
image = map(list,image)
image = np.array(image)
return image
def flatten_image(image):
"""
takes in a n*m numpy array and flattens it to
an array of the size (1,m*n)
"""
s = image.shape[0] * image.shape[1]
image_wide = image.reshape(1,s)
return image_wide[0]
if __name__ == "__main__":
train_images = file_open(image_dir1,"*.jpg")
test_images = file_open(image_dir2,"*.jpg")
train_set = []
test_set = []
"Loop over all images in files and modify them"
train_set = [flatten_image(matrix_image(image)) for image in train_images]
test_set = [flatten_image(matrix_image(image)) for image in test_images]
train_set = np.array(train_set)
test_set = np.array(test_set)
train_set = pca.fit_transform(train_set) "line where error occurs"
test_set = pca.fit_transform(test_set)
Vollzurückverfolgungs:
Traceback (most recent call last):
File "C:\Users\Private\workspace\final_submission\src\d.py", line 54, in <module>
train_set = pca.transform(train_set)
File "C:\Python27\lib\site-packages\sklearn\decomposition\pca.py", line 298, in transform
if self.mean_ is not None:
AttributeError: 'PCA' object has no attribute 'mean_'
Edit1: Also habe ich versucht, bevor die Umwandlung es um das Modell zu passen, und jetzt bekomme ich einen noch seltsameren Fehler. Ich habe nachgesehen, und es geht um f2py, ein Modul, das Fortran zu Python portiert, das Teil der Numpy-Bibliothek ist.
File "C:\Users\Private\workspace\final_submission\src\d.py", line 54, in <module>
pca.fit(train_set)
File "C:\Python27\lib\site-packages\sklearn\decomposition\pca.py", line 200, in fit
self._fit(X)
File "C:\Python27\lib\site-packages\sklearn\decomposition\pca.py", line 249, in _fit
U, S, V = linalg.svd(X, full_matrices=False)
File "C:\Python27\lib\site-packages\scipy\linalg\decomp_svd.py", line 100, in svd
full_matrices=full_matrices, overwrite_a = overwrite_a)
ValueError: failed to create intent(cache|hide)|optional array-- must have defined dimensions but got (0,)
Edit2:
So habe ich geprüft, ob meine train_set und DATA_SET alle Daten enthalten sind, und sie tun es nicht. Ich habe meine image_dirs überprüft, und sie enthalten die richtigen Orte (nur für die Klarheit, ich habe sie, indem ich auf die tatsächlichen Dateien, Blick auf die Eigenschaften eines der Bilder und kopiert den Standort). Der Fehler sollte woanders liegen.
Sie sollten vollständige Rückverfolgung bereitstellen. – zero323
Wahr. Ich werde, gib mir eine Sekunde. – Learner
vielleicht sollten Sie 'fit()' zuerst? – joaquin