Mögliche Kombination 2er Gruppen von Features

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
cellat
User
Beiträge: 5
Registriert: Donnerstag 26. März 2020, 09:40

Hallo zusammen,
ich hänge seit gestern an einem Problem fest und bitte um Hilfe.
Es geht um folgendes Problem. Ich habe ein Dataset mit 16 Bundesländer als Features und möchte die 16 Features als alle möglichen 2er Gruppen Kombinationen haben, also alle möglichen 15x1 ,14x2,13x3, ..., 8x8. Fürs erste habe ich folgendes gebastelt.

Code: Alles auswählen

from itertools import combinations
features = ['Bayern', 'NRW', 'BB', 'BaWü','Berlin','Bremen','HH','Hessen','MV','NSN','RLP','SH','SL','SN','SNA','TH']

a=list(combinations(features,15))
print(a)
b=list(combinations(features,1))
print('')
print(b)
print('')

result = zip(a, b)
result_set = set(result)
print(result_set)
out:

Code: Alles auswählen

[('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'TH'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SN', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SL', 'SN', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'SH', 'SL', 'SN', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BB', 'BaWü', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BB', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), 
('Bayern', 'NRW', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), 
('Bayern', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), 
('NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH')]

[('Bayern',), ('NRW',), ('BB',), ('BaWü',), ('Berlin',), ('Bremen',), ('HH',), ('Hessen',), ('MV',), ('NSN',), ('RLP',), ('SH',), ('SL',), ('SN',), ('SNA',), ('TH',)]

{(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SN', 'SNA', 'TH'), ('BaWü',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SNA', 'TH'), ('BB',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA'), ('Bayern',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('SH',)), 
(('NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('TH',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('Bremen',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('RLP',)), 
(('Bayern', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('SNA',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('HH',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'TH'), ('NRW',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('NSN',)), 
(('Bayern', 'NRW', 'BB', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('SL',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('Hessen',)), 
(('Bayern', 'NRW', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('SN',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SL', 'SN', 'SNA', 'TH'), ('Berlin',)), 
(('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'MV', 'NSN', 'RLP', 'SH', 'SL', 'SN', 'SNA', 'TH'), ('MV',))}
Das Problem ist wenn ich zip benutze, dann wird einfach willkürlich miteinander verbunden. Ich würde es gerne so haben dass ein Element in a so mit einem Element in b gezipt wird, welches in a nicht vorkommt. Nehemen wir das erste Element

('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SN', 'SNA', 'TH'), ('BaWü',))

Hier kommt ja BaWü in der Linken Liste vor. Eigentlich sollte es so sein
('Bayern', 'NRW', 'BB', 'BaWü', 'Berlin', 'Bremen', 'HH', 'Hessen', 'MV', 'NSN', 'RLP', 'SH', 'SN', 'SNA', 'TH'), ('SL',))
weil links 'SL' nicht drine ist.

Das gleiche dann mit 14x1,13x3, ... , 8x8.
Ich bin noch ein Python noob und kenne mich da nicht so richtig aus. Es gibt bestimmt effiziente Methode dies zu berechnen.
Ich bin für jede Hilfe dankbar,

Gruß
cellat
Sirius3
User
Beiträge: 17753
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst set-Operationen benutzen:

Code: Alles auswählen

from itertools import combinations

features = {'Bayern', 'NRW', 'BB', 'BaWü','Berlin','Bremen','HH','Hessen','MV','NSN','RLP','SH','SL','SN','SNA','TH'}
ab = [(set(a), features - set(a)) for a in combinations(features,15)]
cellat
User
Beiträge: 5
Registriert: Donnerstag 26. März 2020, 09:40

Sirius3 hat geschrieben: Donnerstag 26. März 2020, 11:15 Du willst set-Operationen benutzen:

Code: Alles auswählen

from itertools import combinations

features = {'Bayern', 'NRW', 'BB', 'BaWü','Berlin','Bremen','HH','Hessen','MV','NSN','RLP','SH','SL','SN','SNA','TH'}
ab = [(set(a), features - set(a)) for a in combinations(features,15)]
Danke :D . Echt guter trick mit "ab = [(set(a), features - set(a)) for a in combinations(features,15)]". Und ich hatte mir etwas mit if Bedingungen vorgestellt. Gut danke dir!
cellat
User
Beiträge: 5
Registriert: Donnerstag 26. März 2020, 09:40

Hallo zusammen,
noch eine Frage zu dieser Thematik.
Leider funktioniert der Code nicht für Arrays bzw Vektoren. Der Code gibt mir eine Fehlermeldung an.

Code: Alles auswählen

a=[1,2,3,4]
b=[4,5,6,7]
c=[1,2]
d=[3,4,8]
kl= [[1,2,3,4],[4,5,6,7],[1,2],[3,4,8]]


ab = [(list(set(a)), kl - set(a)) for a in combinations(kl,3)] 
print(ab)
Out:

Code: Alles auswählen

TypeError                                 Traceback (most recent call last)
<ipython-input-37-e59d627aa4fc> in <module>
      6 
      7 
----> 8 ab = [(list(set(a)), kl - set(a)) for a in combinations(kl,3)]
      9 print(ab)
     10 

<ipython-input-37-e59d627aa4fc> in <listcomp>(.0)
      6 
      7 
----> 8 ab = [(list(set(a)), kl - set(a)) for a in combinations(kl,3)]
      9 print(ab)
     10 

TypeError: unhashable type: 'list'

Wie kann man hier denn den Fehler beheben? Danke an alle. Bleibt gesund!

VG
cellat
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@cellat: Du hast da weder Arrays noch Vektoren, sondern Listen. `b`, `c`, und `d` werden definiert, aber nicht verwendet.

Elemente in einem `set()` müssen „hashable“ sein, also ``hash(item)`` muss funktionieren. Das tut es bei Listen nicht, weil das zu schnell zu Fehlern führen kann, insbesondere als Schlüssel in Wörterbüchern, aber auch in Mengen. Und da von `kl` etwas abgezogen werden soll, wird das bei einer Liste auch zu einem Problem führen, denn von Listen kann man mit einem ``-``-Operator nichts abziehen.

Müssen die Elemente von `kl` denn unbedingt Listen sein? Tupel mit ganzen Zahlen drin, sind nämlich „hashable“. Und wie gesagt, `kl` muss ein `set` bleiben.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Entweder verstehe ich diese Aufgaben grundsätzlich falsch oder ihr habt jetzt gerade die falsche Lösung präsentiert.
So wie ich das verstanden habe möchte er 2er Gruppen aus allen verfügbaren Bundesländern bilden (ohne Wiederholung).

Dann wäre nach meinem Verständnis das die Lösung:

Code: Alles auswählen

list(combinations(features, r=2))
Ergebnis:

Code: Alles auswählen

[('SN', 'BB'),
 ('SN', 'SH'),
 ('SN', 'SNA'),
 ('SN', 'HH'),
 ('SN', 'TH'),
 ('SN', 'RLP'),
 ('SN', 'Bayern'),
 ('SN', 'BaWü'),
 ('SN', 'NSN'),
 ('SN', 'Berlin'),
 ('SN', 'MV'),
...,
]
Der Test, ob sich was wiederholt:

Code: Alles auswählen

res = set(combinations(features, r=2))                                                                             
("SN", "BB") in res                                                                                                 
("BB", "SN") in res                                                                                                 
Die erste Tupel kommt in der Liste vor, die zweite nicht.
Wenn man das möchte:

Code: Alles auswählen

res |= {(b, a) for a, b in res}
Letztendlich verdoppelt sich die Anzahl von 120 auf 240.
Wenn man a mit b testet, wird man wahrscheinlich nicht b mit a nochmal testen.
Ich denke dieser Schritt ist überflüssig. Setzt natürlich auch voraus, dass es das gewünschte Ergebnis ist.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
cellat
User
Beiträge: 5
Registriert: Donnerstag 26. März 2020, 09:40

Müssen die Elemente von `kl` denn unbedingt Listen sein? Tupel mit ganzen Zahlen drin, sind nämlich „hashable“. Und wie gesagt, `kl` muss ein `set` bleiben.
Hallo,
danke für deine Antwort.

Ursprünglich ist mein Problem folgendes ich habe ein Dataset die folgendermaßen aussieht.

Code: Alles auswählen

Unnamed: 0	Bundesland	tage
0	0		Bayern		28
1	1		Bayern		188
2	2		Bayern		23
3	3		Bayern		183
4	4		Bayern		89

usw. das sind nur die ersten 5 Einträge.
Die Anzahl der Einträge von den Bundesländern sind unterschiedlich groß.

Code: Alles auswählen

print(df.groupby('Bundesland')['tage'].count())
Bundesland
BB         434
BaWü      1142
Bayern    1985
Berlin     888
Bremen      18
HH         422
Hessen     971
MV         227
NRW       1850
NSN        625
RLP        572
SH         168
SL         111
SN        1020
SNA        431
TH         583
Name: tage, dtype: int64
Dann habe ich den ich nenne es mal Percentilmatrix auf gestellt die Spalten sind die Bundesländer und Zeile Percentile 33% und 66%

Code: Alles auswählen

import pandas as pd
import numpy as np

states = np.unique(df['Bundesland'])

state_data = dict()
for state in states:
    state_data[state] = np.percentile(df[df['Bundesland'] == state]['tage'],[33,66],interpolation = 'nearest')
print(state_data)

dataMatrix = np.array([state_data[i] for i in states]).T

print(dataMatrix)
out:

Code: Alles auswählen

{'BB': array([20, 69], dtype=int64), 'BaWü': array([39, 83], dtype=int64), 'Bayern': array([26, 59], dtype=int64), 'Berlin': array([22, 32], dtype=int64), 'Bremen': array([26, 60], dtype=int64), 'HH': array([22, 29], dtype=int64), 'Hessen': array([25, 71], dtype=int64), 'MV': array([21, 93], dtype=int64), 'NRW': array([17, 70], dtype=int64), 'NSN': array([19, 59], dtype=int64), 'RLP': array([ 39, 108], dtype=int64), 'SH': array([26, 50], dtype=int64), 'SL': array([ 40, 121], dtype=int64), 'SN': array([23, 75], dtype=int64), 'SNA': array([28, 99], dtype=int64), 'TH': array([23, 68], dtype=int64)}
[[ 20  39  26  22  26  22  25  21  17  19  39  26  40  23  28  23]
 [ 69  83  59  32  60  29  71  93  70  59 108  50 121  75  99  68]]
Danach den Chi-Quadrat-Unabhängigkeitstest auf den Percentilmatrix angewendet.

Code: Alles auswählen

from scipy import stats
from scipy.stats import chi2_contingency

werte= stats.chi2_contingency(dataMatrix)

print(werte)

stat, p, dof, expected = chi2_contingency(dataMatrix)

alpha = 0.05

print('significance=%.3f, p=%.3f' % (alpha, p))
if p <= alpha:
    print('Variables are associated (reject H0)')
else:
    print('Variables are not associated(fail to reject H0)')

Out:

Code: Alles auswählen

(27.276324194207646, 0.026563956748882133, 15, array([[ 23.70294494,  32.49167734,  22.63764405,  14.3815621 ,
         22.90396927,  13.58258643,  25.56722151,  30.36107554,
         23.17029449,  20.77336748,  39.14980794,  20.24071703,
         42.87836108,  26.09987196,  33.82330346,  24.23559539],
       [ 65.29705506,  89.50832266,  62.36235595,  39.6184379 ,
         63.09603073,  37.41741357,  70.43277849,  83.63892446,
         63.82970551,  57.22663252, 107.85019206,  55.75928297,
        118.12163892,  71.90012804,  93.17669654,  66.76440461]]))
significance=0.050, p=0.027
Variables are associated (reject H0)
Ich möchte jetzt die Features/Variable so gruppieren, für die der p-Wert am kleinsten ist. D.h. erstmal alle möglichen Kombinationen 2er gruppe also nur 2 Variable, dazu wollte ich alle möglichen 15x1 Gruppierung haben:

Code: Alles auswählen

from itertools import combinations

features = {'Bayern', 'NRW', 'BB', 'BaWü','Berlin','Bremen','HH','Hessen','MV','NSN','RLP','SH','SL','SN','SNA','TH'}
ab = [(list(set(a)), features - set(a)) for a in combinations(features,15)]
print(ab)
Out:

Code: Alles auswählen

[(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL'], {'TH'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL', 'TH'], {'Bremen'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'SL', 'TH'], {'HH'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'HH', 'SL', 'TH'], {'Hessen'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Hessen', 'NSN', 'HH', 'SL', 'TH'], {'Bayern'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL', 'TH'], {'Berlin'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'Hessen', 'HH', 'SL', 'TH'], {'NSN'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL', 'TH'], {'SN'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL', 'TH'], {'RLP'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'Bremen', 'TH'], {'SL'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL', 'TH'], {'SH'}), 
(['BB', 'SNA', 'MV', 'BaWü', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL', 'TH'], {'NRW'}), 
(['BB', 'SNA', 'MV', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL', 'TH'], {'BaWü'}), 
(['BB', 'SNA', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL', 'TH'], {'MV'}), 
(['BB', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL', 'TH'], {'SNA'}), 
(['SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL', 'TH'], {'BB'})]

Nur halt anstatt Strings der Bundesländer wollte ich eigentlich die Vektoren bzw. die Einträge von der jeweiligen Bundesländer haben und dann concatenate() benutzen damit die Einträge als ein Vektor zusammengefügt werden. Um es besser zu verstehen was ich meine nehmen wir den ersten Eintrag direkt oben
(['BB', 'SNA', 'MV', 'BaWü', 'NRW', 'SH', 'SN', 'RLP', 'Bremen', 'Berlin', 'Bayern', 'NSN', 'Hessen', 'HH', 'SL'], {'TH'})
die Linkeseite davon möchte ich als ein Vektor haben und dann np.percentile benutzen und dann den chi-quadrat-Unabhängigkeitstest anwenden um den p-Wert zu bestimmen und das für alle Tuppel, um die beste Gruppierung zu finden. Das ist das erste Hürde später dann für alle 14x2, 13x3, ... , 8x8 Gruppierungen :lol: . Und dann später noch für alle 14x1x1, 13x2x1, 12x2x2, 11x4x1, 11x3x2, usw. :lol:
Aber ich habe es nicht mal geschafft die Einträge zusammenzufügen :cry: .

Code: Alles auswählen

import pandas as pd
import numpy as np
from itertools import combinations

features=dict()
states=np.unique(df['Bundesland'])
for state in states:
    features[state]=np.array(df[df['Bundesland']==state]['tage'])

features_vektor=([features[k] for k in states])
print(features_vektor) 

ab = [(set(a), features_vektor - set(a)) for a in combinations(features_vektor,15)]
print(ab)
print(features_vektor) habe ich nicht ins out nicht eingefügt das es zu lang ist sondern nur den fehler
Out:

Code: Alles auswählen

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-31-439784da884f> in <module>
     12 print(features_vektor)
     13 
---> 14 ab = [(set(a), features_vektor - set(a)) for a in combinations(features_vektor,15)]
     15 print(ab)

<ipython-input-31-439784da884f> in <listcomp>(.0)
     12 print(features_vektor)
     13 
---> 14 ab = [(set(a), features_vektor - set(a)) for a in combinations(features_vektor,15)]
     15 print(ab)

TypeError: unhashable type: 'numpy.ndarray'
Ob es Statistisch gesehen sinn macht weiß ich nicht, da ich noch neu in dem Gebiet bin und versuche weiter zu lernen. Es gibt bestimmt viel effizientere Methoden dies zu lösen von der ich aber nicht bescheid weiß :cry: . Bin für jede Hilfestellung und Anregung dankbar.

VG
cellat
cellat
User
Beiträge: 5
Registriert: Donnerstag 26. März 2020, 09:40

@ DeaD_EyE Danke für deine Antwort. Es war schon richtig was Sirius gepostet hat. Genau wie ich es mir vorgestellt habe. Nur war es für Strings richtig. Im ersten Post habe ich mit Absicht die Problemstellung vereinfacht, damit ich euch nicht viel Zeit zu nehmen. Jedoch hat es doch nicht für den eigentliches Problem nicht viel Beigetragen, da wie von blackjack erwähnt
Elemente in einem `set()` müssen „hashable“ sein, also ``hash(item)`` muss funktionieren. Das tut es bei Listen nicht, weil das zu schnell zu Fehlern führen kann, insbesondere als Schlüssel in Wörterbüchern, aber auch in Mengen. Und da von `kl` etwas abgezogen werden soll, wird das bei einer Liste auch zu einem Problem führen, denn von Listen kann man mit einem ``-``-Operator nichts abziehen.
VG
cellat
Antworten