2017-02-26 3 views
0

Neuling für Data Science hier.Erstellen eines K-nächsten Nachbarn Klassifikator mit PCA-Werten

Ich habe einen Datensatz von hoher Dimensionalität. Es gibt 83 Proben mit 2308 Dimensionen, seine Form ist (83, 2308). Außerdem habe ich eine Reihe von Beispieltypen, die 83 Länge hat, deren Form (83,) ist.

Ich versuche einen KNN-Klassifikator (2 Nachbarn) mit einer Teilmenge meines ursprünglichen Datensatzes zu trainieren und verwende ihn, um den Probentyp der verbleibenden Datenpunkte (die Test-Teilmenge) vorherzusagen. Meine Trainingsdaten haben die Form (66, 2308) und ich trainiere sie zu einem Probenartenfeld (63,).

Mein Ziel ist es, meinen KNN-Klassifikator mit einem Trainingssatz zu trainieren, der in der Dimensionalität reduziert ist, also habe ich PCA darauf ausgeführt. Ich habe nur die ersten 10 PCs behalten. Nach der Transformation meines Trainingssatzes ist seine Form (63, 10).

Leider kann ich diesen reduzierten Trainingssatz nicht verwenden, um Vorhersagen zu meinem unreduzierten Testset zu machen. Das Ausführen meines Codes gibt mir den Fehler: "Die Dimension der Abfragedaten muss der Dimension" Trainingsdaten "entsprechen.

Ich möchte die ersten 10 PCs in mein KNN-Modell integrieren können. Irgendwelche Hilfe, um das zu ermöglichen?

Hier ist mein Code als Referenz:

import numpy as np 
from sklearn.neighbors import KNeighborsClassifier 

# creates my training and testing partitions 
train_ind, test_ind = test_train_id(cancer_types, 0.8) 

# create the train partition 
genes_train = genes[train_ind, :] 

# perform PCA on the train partition 
gene_pca = PCA(10) 
gene_pca.fit(genes_train) 

# transform the gene partition with the PCA 
genes_train_red = gene_pca.transform(genes_train) 

# the KNN model 
model = KNeighborsClassifier(2) 
model.fit(genes_train_red, cancer_types[train_ind]) 

predict = model.predict(genes[train_ind]) 

np.mean(predict == cancer_types[test_ind]) 


print('The unreduced train set has shape',genes[train_ind, :].shape) 
print('The label set being trained to has shape', cancer_types[train_ind].shape) 
print('------', '\n', 'After PCA, the reduced train set has shape', genes_train_red.shape ,'\n') 

print('The unreduced test set has shape', genes[test_ind].shape) 

Antwort

1

Sie Ihr Modell mit dieser Linie auf den reduzierten Dimensionen ausgestattet:

model.fit(genes_train_red, cancer_types[train_ind]) 

Jetzt fragen Sie einige andere Daten wie folgt prognostizieren:

predict = model.predict(genes[train_ind]) 

Natürlich kann model.predict() nur Proben mit dem gleichen Input-Dim vorhersagen ension (Sie haben nur 10 PCA-Komponenten behalten). Also, ohne Ihre neue Eingabe zu transformieren (die immer noch in ihrer ursprünglichen Form ist; nicht durch PCA reduziert), wird es nicht funktionieren.

Gemäßer Gebrauch würde wie folgt aussehen:

predict = model.predict(gene_pca.transform(genes[train_ind])) 
+0

Dank für Ihre Antwort danken! Das ist, was ich gesucht habe: eine Möglichkeit, Vorhersagen über meinen ursprünglichen Datensatz zu machen, während ich reduzierte Trainingsdaten verwende. –

Verwandte Themen