2017-02-03 4 views
-2

Ich versuche mein maschinelles Lernsystem zu verbessern, indem ich meine Funktionen kombiniere. Ich habe einen Code geschrieben, um alle Kombinationen meiner Features zu generieren. Es scheint jedoch sehr ineffizient zu sein. Gibt es eine Möglichkeit, dies schneller zu machen?Wie macht man alle Kombinationen von Funktionen?

allcomb=[] 
for i in range(pow(2,len(features))): 
    com=[] 
    for j in (range(len(features))): 
     if((i&(1<<j))==1): 
      com.append(features[j]) 
    allcomb.append(com) 
+0

Grund für den Downvote? –

+0

Ich habe Ihre Frage nicht abgestimmt, aber schauen Sie sich [StackOverflow's an, wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) für einige Einsichten. – dantiston

+0

Bitte geben Sie mir einen Einblick, wie meine Frage schlecht ist? Ich sehe hier nichts falsch, ich war poilte und stelle eine echte Frage. Können Sie mir sagen, was ist falsch mit diesem @dantiston Danke –

Antwort

1

Zuerst überprüfen Sie Python itertools Paket; Dadurch wird Ihr Code effizienter und lesbarer. Sie können die meisten kombinatorischen Dinge tun, die Sie mit diesem Paket wollen.

Ein großer Vorteil ist, dass Sie einen Generator für die Folge von Kombinationen erhalten, so müssen Sie sie nicht speichern alle auf einmal in einer Liste.

Beachten Sie auch, dass Sie einen inhärent langsamen Prozess haben. Wenn Sie alle möglichen Kombinationen von 16 Merkmalen wollen, ist das 2 ** 16 mal durch jede Verarbeitungsschleife. Sie haben bereits 64 KB Iterationen, und das wird sich für jedes hinzugefügte Feature verdoppeln.

Können Sie eine PCA (Principal Component Analysis) und Funktionsreduzierung in Betracht ziehen, bevor Sie mit der Verarbeitung beginnen?

+0

Nach PCA und Feature-Auswahl habe ich 20 Funktionen, also wie kann ich optimieren, um die Kombination zu überprüfen? Ist es sogar möglich, kleiner als O (n * 2^n) zu gehen? –

+0

Von dem, was Sie bisher beschrieben haben, nein - Sie sind mit diesem 2^n fest. Sind Sie besorgt über die ** O ** -Komplexität oder über die tatsächliche Ausführungszeit? Wenn es an der Zeit ist, gibt es dann etwas, was Sie tun können, um Teilergebnisse aus einfacheren Läufen zu cachen oder Ergebnisse von einem Test zu verwenden, um einen anderen komplett zu vermeiden? – Prune

Verwandte Themen