8.2. Reale-Welt-Datensätze#
scikit-learn bietet Werkzeuge zum Laden größerer Datensätze, wobei diese bei Bedarf heruntergeladen werden.
Sie können mit den folgenden Funktionen geladen werden:
|
Lädt den Olivetti Faces Datensatz von AT&T (Klassifikation). |
|
Lädt die Dateinamen und Daten aus dem 20 newsgroups Datensatz (Klassifikation). |
|
Lädt und vektorisiert den 20 newsgroups Datensatz (Klassifikation). |
|
Lädt den Labeled Faces in the Wild (LFW) People Datensatz (Klassifikation). |
|
Lädt den Labeled Faces in the Wild (LFW) Pairs Datensatz (Klassifikation). |
|
Lädt den covertype Datensatz (Klassifikation). |
|
Lädt den RCV1 Multilabel Datensatz (Klassifikation). |
|
Lädt den kddcup99 Datensatz (Klassifikation). |
|
Lädt den California Housing Datensatz (Regression). |
|
Loader für den Datensatz zur Artenverteilung von Phillips et al. |
8.2.1. Der Olivetti-Datensatz mit Gesichtern#
Dieser Datensatz enthält eine Sammlung von Gesichtsaufnahmen, die zwischen April 1992 und April 1994 im AT&T Laboratories Cambridge aufgenommen wurden. Die Funktion sklearn.datasets.fetch_olivetti_faces ist die Funktion zum Abrufen/Cachen von Daten, die das Datenarchiv von AT&T herunterlädt.
Wie auf der ursprünglichen Website beschrieben:
Von jedem der 40 verschiedenen Motive gibt es zehn verschiedene Aufnahmen. Bei einigen Motiven wurden die Aufnahmen zu verschiedenen Zeiten gemacht, wobei Beleuchtung, Mimik (Augen offen/geschlossen, Lächeln/kein Lächeln) und Gesichtsdetails (Brille/keine Brille) variierten. Alle Aufnahmen wurden vor einem dunklen, homogenen Hintergrund gemacht, wobei die Motive aufrecht und frontal positioniert waren (mit Toleranz für leichte seitliche Bewegungen).
Datensatzmerkmale
Klassen |
40 |
Gesamtanzahl Samples |
400 |
Dimensionalität |
4096 |
Merkmale |
reell, zwischen 0 und 1 |
Das Bild ist in 256 Graustufen quantisiert und als vorzeichenlose 8-Bit-Integer gespeichert; der Loader konvertiert diese in Gleitkommazahlen im Intervall [0, 1], die für viele Algorithmen einfacher zu handhaben sind.
Das „Ziel“ für diese Datenbank ist eine Ganzzahl von 0 bis 39, die die Identität der abgebildeten Person angibt. Da es jedoch nur 10 Beispiele pro Klasse gibt, ist dieser relativ kleine Datensatz aus einer unüberwachten oder semi-überwachten Perspektive interessanter.
Der ursprüngliche Datensatz bestand aus 92 x 112 Bildern, während die hier verfügbare Version aus 64x64 Bildern besteht.
Bitte geben Sie bei der Verwendung dieser Bilder AT&T Laboratories Cambridge als Quelle an.
8.2.2. Der 20 Newsgroups Textdatensatz#
Der 20 Newsgroups-Datensatz umfasst rund 18000 Newsgroups-Beiträge zu 20 Themen, aufgeteilt in zwei Teilmengen: eine zum Trainieren (oder zur Entwicklung) und die andere zum Testen (oder zur Leistungsbewertung). Die Aufteilung zwischen Trainings- und Testset basiert auf Nachrichten, die vor und nach einem bestimmten Datum gepostet wurden.
Dieses Modul enthält zwei Lader. Der erste, sklearn.datasets.fetch_20newsgroups, gibt eine Liste der Roh-Texte zurück, die an Textmerkmalextraktoren wie CountVectorizer mit benutzerdefinierten Parametern übergeben werden können, um Merkmalsvektoren zu extrahieren. Der zweite, sklearn.datasets.fetch_20newsgroups_vectorized, gibt sofort verwendbare Merkmale zurück, d.h. es ist nicht notwendig, einen Merkmalextraktor zu verwenden.
Datensatzmerkmale
Klassen |
20 |
Gesamtanzahl Samples |
18846 |
Dimensionalität |
1 |
Merkmale |
Text |
Verwendung#
Die Funktion sklearn.datasets.fetch_20newsgroups ist eine Funktion zum Abrufen/Cachen von Daten, die das Datenarchiv von der ursprünglichen 20 Newsgroups-Website herunterlädt, den Archivinhalt im Ordner ~/scikit_learn_data/20news_home extrahiert und sklearn.datasets.load_files für den Trainings- oder Testordner oder beide aufruft.
>>> from sklearn.datasets import fetch_20newsgroups
>>> newsgroups_train = fetch_20newsgroups(subset='train')
>>> from pprint import pprint
>>> pprint(list(newsgroups_train.target_names))
['alt.atheism',
'comp.graphics',
'comp.os.ms-windows.misc',
'comp.sys.ibm.pc.hardware',
'comp.sys.mac.hardware',
'comp.windows.x',
'misc.forsale',
'rec.autos',
'rec.motorcycles',
'rec.sport.baseball',
'rec.sport.hockey',
'sci.crypt',
'sci.electronics',
'sci.med',
'sci.space',
'soc.religion.christian',
'talk.politics.guns',
'talk.politics.mideast',
'talk.politics.misc',
'talk.religion.misc']
Die tatsächlichen Daten liegen in den Attributen filenames und target. Das Attribut target ist der Ganzzahlindex der Kategorie.
>>> newsgroups_train.filenames.shape
(11314,)
>>> newsgroups_train.target.shape
(11314,)
>>> newsgroups_train.target[:10]
array([ 7, 4, 4, 1, 14, 16, 13, 3, 2, 4])
Es ist möglich, nur eine Unterauswahl der Kategorien zu laden, indem die Liste der zu ladenden Kategorien an die Funktion sklearn.datasets.fetch_20newsgroups übergeben wird.
>>> cats = ['alt.atheism', 'sci.space']
>>> newsgroups_train = fetch_20newsgroups(subset='train', categories=cats)
>>> list(newsgroups_train.target_names)
['alt.atheism', 'sci.space']
>>> newsgroups_train.filenames.shape
(1073,)
>>> newsgroups_train.target.shape
(1073,)
>>> newsgroups_train.target[:10]
array([0, 1, 1, 1, 0, 1, 1, 0, 0, 0])
Text in Vektoren umwandeln#
Um Textdaten für prädiktive oder Clustering-Modelle zu verwenden, muss der Text zunächst in Vektoren numerischer Werte umgewandelt werden, die für statistische Analysen geeignet sind. Dies kann mit den Hilfsprogrammen von sklearn.feature_extraction.text erreicht werden, wie im folgenden Beispiel gezeigt, das TF-IDF-Vektoren von Unigramm-Tokens aus einer Teilmenge von 20news extrahiert.
>>> from sklearn.feature_extraction.text import TfidfVectorizer
>>> categories = ['alt.atheism', 'talk.religion.misc',
... 'comp.graphics', 'sci.space']
>>> newsgroups_train = fetch_20newsgroups(subset='train',
... categories=categories)
>>> vectorizer = TfidfVectorizer()
>>> vectors = vectorizer.fit_transform(newsgroups_train.data)
>>> vectors.shape
(2034, 34118)
Die extrahierten TF-IDF-Vektoren sind sehr spärlich, mit durchschnittlich 159 Nicht-Null-Komponenten pro Stichprobe in einem Raum mit über 30000 Dimensionen (weniger als 0,5 % Nicht-Null-Merkmale).
>>> vectors.nnz / float(vectors.shape[0])
159.01327...
sklearn.datasets.fetch_20newsgroups_vectorized ist eine Funktion, die fertige Token-Zählmerkmale anstelle von Dateinamen zurückgibt.
Textfilterung für realistischeres Training#
Es ist für einen Klassifikator einfach, sich auf bestimmte Dinge zu überanpassen, die in den 20 Newsgroups-Daten vorkommen, wie z.B. Newsgroups-Header. Viele Klassifikatoren erreichen sehr hohe F-Scores, aber ihre Ergebnisse würden sich nicht auf andere Dokumente verallgemeinern lassen, die nicht aus diesem Zeitraum stammen.
Betrachten wir zum Beispiel die Ergebnisse eines multinomialen Naive-Bayes-Klassifikators, der schnell trainiert und einen ordentlichen F-Score erzielt.
>>> from sklearn.naive_bayes import MultinomialNB
>>> from sklearn import metrics
>>> newsgroups_test = fetch_20newsgroups(subset='test',
... categories=categories)
>>> vectors_test = vectorizer.transform(newsgroups_test.data)
>>> clf = MultinomialNB(alpha=.01)
>>> clf.fit(vectors, newsgroups_train.target)
MultinomialNB(alpha=0.01, class_prior=None, fit_prior=True)
>>> pred = clf.predict(vectors_test)
>>> metrics.f1_score(newsgroups_test.target, pred, average='macro')
0.88213...
(Das Beispiel Klassifizierung von Textdokumenten unter Verwendung spärlicher Merkmale mischt die Trainings- und Testdaten zufällig, anstatt sie nach Zeit zu segmentieren, und in diesem Fall erzielt der multinomiale Naive Bayes einen viel höheren F-Score von 0,88. Sind Sie schon verdächtig, was in diesem Klassifikator vor sich geht?)
Schauen wir uns an, was die informativsten Merkmale sind.
>>> import numpy as np
>>> def show_top10(classifier, vectorizer, categories):
... feature_names = vectorizer.get_feature_names_out()
... for i, category in enumerate(categories):
... top10 = np.argsort(classifier.coef_[i])[-10:]
... print("%s: %s" % (category, " ".join(feature_names[top10])))
...
>>> show_top10(clf, vectorizer, newsgroups_train.target_names)
alt.atheism: edu it and in you that is of to the
comp.graphics: edu in graphics it is for and of to the
sci.space: edu it that is in and space to of the
talk.religion.misc: not it you in is that and to of the
Jetzt können Sie viele Dinge sehen, auf die sich diese Merkmale überangepasst haben.
Fast jede Gruppe wird dadurch unterschieden, ob Header wie
NNTP-Posting-Host:undDistribution:häufiger oder seltener vorkommen.Ein weiteres signifikantes Merkmal betrifft, ob der Absender mit einer Universität verbunden ist, was entweder durch seine Header oder seine Signatur angezeigt wird.
Das Wort „Artikel“ ist ein signifikantes Merkmal, basierend darauf, wie oft Leute frühere Beiträge zitieren, wie diese: „In Artikel [Artikel-ID] schrieb [Name] <[E-Mail-Adresse]>:“
Andere Merkmale entsprechen den Namen und E-Mail-Adressen bestimmter Personen, die zu dieser Zeit gepostet haben.
Mit einer so großen Fülle von Hinweisen, die Newsgroups unterscheiden, müssen die Klassifikatoren kaum Themen aus dem Text identifizieren, und sie alle schneiden auf demselben hohen Niveau ab.
Aus diesem Grund bieten die Funktionen, die 20 Newsgroups-Daten laden, einen Parameter namens **remove**, der angibt, welche Arten von Informationen aus jeder Datei entfernt werden sollen. **remove** sollte ein Tupel sein, das eine beliebige Teilmenge von ('headers', 'footers', 'quotes') enthält, was angibt, Header, Signaturblöcke und Zitatblöcke zu entfernen.
>>> newsgroups_test = fetch_20newsgroups(subset='test',
... remove=('headers', 'footers', 'quotes'),
... categories=categories)
>>> vectors_test = vectorizer.transform(newsgroups_test.data)
>>> pred = clf.predict(vectors_test)
>>> metrics.f1_score(pred, newsgroups_test.target, average='macro')
0.77310...
Dieser Klassifikator verlor viel von seinem F-Score, nur weil wir Metadaten entfernt haben, die wenig mit Themenklassifizierung zu tun haben. Er verliert noch mehr, wenn wir auch diese Metadaten aus den Trainingsdaten entfernen.
>>> newsgroups_train = fetch_20newsgroups(subset='train',
... remove=('headers', 'footers', 'quotes'),
... categories=categories)
>>> vectors = vectorizer.fit_transform(newsgroups_train.data)
>>> clf = MultinomialNB(alpha=.01)
>>> clf.fit(vectors, newsgroups_train.target)
MultinomialNB(alpha=0.01, class_prior=None, fit_prior=True)
>>> vectors_test = vectorizer.transform(newsgroups_test.data)
>>> pred = clf.predict(vectors_test)
>>> metrics.f1_score(newsgroups_test.target, pred, average='macro')
0.76995...
Andere Klassifikatoren kommen mit dieser schwierigeren Version der Aufgabe besser zurecht. Probieren Sie das Beispiel Beispiel-Pipeline für Textmerkmalextraktion und -bewertung mit und ohne die Option remove aus, um die Ergebnisse zu vergleichen.
Datenüberlegungen
Die Cleveland Indians sind ein Major-League-Baseballteam mit Sitz in Cleveland, Ohio, USA. Im Dezember 2020 wurde berichtet, dass „nach mehreren Monaten der Diskussionen, die durch den Tod von George Floyd und eine landesweite Auseinandersetzung mit Rassismus und Kolonialismus ausgelöst wurden, die Cleveland Indians beschlossen haben, ihren Namen zu ändern.“ Team-Besitzer Paul Dolan „machte deutlich, dass das Team seinen inoffiziellen Spitznamen – die Tribe – nicht zu seinem neuen Teamnamen machen wird.“ „Es wird kein halber Schritt weg von den Indians sein“, sagte Dolan. „Wir werden keinen Namen mit indianischem Thema haben.“
https://www.mlb.com/news/cleveland-indians-team-name-change
Empfehlung
Bei der Bewertung von Textklassifikatoren auf den 20 Newsgroups-Daten sollten Sie Newsgroups-spezifische Metadaten entfernen. In scikit-learn können Sie dies tun, indem Sie
remove=('headers', 'footers', 'quotes')setzen. Der F-Score wird niedriger sein, da er realistischer ist.Dieser Textdatensatz enthält Daten, die für bestimmte NLP-Anwendungen ungeeignet sein können. Ein Beispiel ist im Abschnitt „Datenüberlegungen“ oben aufgeführt. Die Herausforderung bei der Verwendung aktueller Textdatensätze in der NLP für Aufgaben wie Satzvervollständigung, Clustering und andere Anwendungen besteht darin, dass kulturell voreingenommene und aufwiegelnde Texte Vorurteile verbreiten werden. Dies sollte bei der Verwendung des Datensatzes, bei der Überprüfung der Ausgabe berücksichtigt werden, und die Voreingenommenheit sollte dokumentiert werden.
Beispiele
8.2.3. Der Labeled Faces in the Wild-Datensatz für Gesichtserkennung#
Dieser Datensatz ist eine Sammlung von JPEG-Bildern berühmter Persönlichkeiten, die aus dem Internet gesammelt wurden, und die Details sind auf der Kaggle-Website verfügbar.
https://www.kaggle.com/datasets/jessicali9530/lfw-dataset
Jedes Bild ist auf ein einzelnes Gesicht zentriert. Die typische Aufgabe wird als Gesichtsverifizierung bezeichnet: Ein binärer Klassifikator muss anhand eines Paares von zwei Bildern vorhersagen, ob die beiden Bilder von derselben Person stammen.
Eine alternative Aufgabe, Gesichtserkennung oder Identifizierung, besteht darin, anhand des Bildes eines unbekannten Gesichts den Namen der Person durch Bezugnahme auf eine Galerie von zuvor gesehenen Bildern identifizierter Personen zu identifizieren.
Sowohl die Gesichtsverifizierung als auch die Gesichtserkennung sind Aufgaben, die typischerweise auf den Ausgaben eines für die Gesichtserkennung trainierten Modells ausgeführt werden. Das beliebteste Modell für die Gesichtserkennung heißt Viola-Jones und ist in der OpenCV-Bibliothek implementiert. Die LFW-Gesichter wurden von diesem Gesichtserkenner aus verschiedenen Online-Websites extrahiert.
Datensatzmerkmale
Klassen |
5749 |
Gesamtanzahl Samples |
13233 |
Dimensionalität |
5828 |
Merkmale |
echt, zwischen 0 und 255 |
Verwendung#
scikit-learn bietet zwei Lader, die automatisch die Metadatendateien herunterladen, cachen, parsen, JPEGs dekodieren und die interessanten Ausschnitte in memmapped NumPy-Arrays konvertieren. Die Größe dieses Datensatzes beträgt über 200 MB. Der erste Ladevorgang dauert in der Regel mehr als ein paar Minuten, um den relevanten Teil der JPEG-Dateien vollständig in NumPy-Arrays zu dekodieren. Wenn der Datensatz einmal geladen wurde, dauert das Laden bei nachfolgenden Aufrufen weniger als 200 ms, da eine memmapped Version auf der Festplatte im Ordner ~/scikit_learn_data/lfw_home/ mithilfe von joblib zwischengespeichert wird.
Der erste Lader wird für die Aufgabe der Personenidentifizierung verwendet: eine Multiklassen-Klassifizierungsaufgabe (daher überwachtes Lernen).
>>> from sklearn.datasets import fetch_lfw_people
>>> lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)
>>> for name in lfw_people.target_names:
... print(name)
...
Ariel Sharon
Colin Powell
Donald Rumsfeld
George W Bush
Gerhard Schroeder
Hugo Chavez
Tony Blair
Der Standardausschnitt ist eine rechteckige Form um das Gesicht, wobei der größte Teil des Hintergrunds entfernt wird.
>>> lfw_people.data.dtype
dtype('float32')
>>> lfw_people.data.shape
(1288, 1850)
>>> lfw_people.images.shape
(1288, 50, 37)
Jedes der 1140 Gesichter ist im Array target einer einzelnen Personen-ID zugeordnet.
>>> lfw_people.target.shape
(1288,)
>>> list(lfw_people.target[:10])
[5, 6, 3, 1, 0, 1, 3, 4, 3, 0]
Der zweite Lader wird typischerweise für die Aufgabe der Gesichtsverifizierung verwendet: Jede Stichprobe ist ein Paar von zwei Bildern, die zur selben Person gehören oder nicht.
>>> from sklearn.datasets import fetch_lfw_pairs
>>> lfw_pairs_train = fetch_lfw_pairs(subset='train')
>>> list(lfw_pairs_train.target_names)
['Different persons', 'Same person']
>>> lfw_pairs_train.pairs.shape
(2200, 2, 62, 47)
>>> lfw_pairs_train.data.shape
(2200, 5828)
>>> lfw_pairs_train.target.shape
(2200,)
Sowohl für die Funktion sklearn.datasets.fetch_lfw_people als auch für die Funktion sklearn.datasets.fetch_lfw_pairs ist es möglich, eine zusätzliche Dimension mit den RGB-Farbkanälen zu erhalten, indem color=True übergeben wird. In diesem Fall hat die Form (2200, 2, 62, 47, 3).
Der Datensatz sklearn.datasets.fetch_lfw_pairs ist in 3 Teilmengen unterteilt: das Entwicklungs-train-Set, das Entwicklungs-test-Set und ein Evaluations-10_folds-Set zur Berechnung von Leistungskennzahlen mittels 10-facher Kreuzvalidierung.
Referenzen
Labeled Faces in the Wild: A Database for Studying Face Recognition in Unconstrained Environments. Gary B. Huang, Manu Ramesh, Tamara Berg, and Erik Learned-Miller. University of Massachusetts, Amherst, Technical Report 07-49, October, 2007.
Beispiele
8.2.4. Wald-Deckungsarten#
Die Stichproben in diesem Datensatz entsprechen 30x30m großen Waldflächen in den USA, gesammelt zur Vorhersage der Deckungsart jeder Fläche, d.h. der dominanten Baumart. Es gibt sieben Deckungsarten, was dies zu einem Multiklassen-Klassifizierungsproblem macht. Jede Stichprobe hat 54 Merkmale, die auf der Homepage des Datensatzes beschrieben sind. Einige der Merkmale sind boolesche Indikatoren, während andere diskrete oder kontinuierliche Messungen sind.
Datensatzmerkmale
Klassen |
7 |
Gesamtanzahl Samples |
581012 |
Dimensionalität |
54 |
Merkmale |
int |
sklearn.datasets.fetch_covtype lädt den Covertype-Datensatz; er gibt ein dictionary-ähnliches ‚Bunch‘-Objekt zurück, mit der Merkmalsmatrix im Mitglied data und den Zielwerten im Mitglied target. Wenn das optionale Argument ‚as_frame‘ auf ‚True‘ gesetzt ist, werden data und target als Pandas DataFrames zurückgegeben, und es gibt zusätzlich ein Mitglied frame. Der Datensatz wird bei Bedarf aus dem Web heruntergeladen.
8.2.5. RCV1-Datensatz#
Reuters Corpus Volume I (RCV1) ist ein Archiv von über 800.000 manuell kategorisierten Newswire-Geschichten, die von Reuters, Ltd. für Forschungszwecke zur Verfügung gestellt wurden. Der Datensatz ist ausführlich beschrieben in [1].
Datensatzmerkmale
Klassen |
103 |
Gesamtanzahl Samples |
804414 |
Dimensionalität |
47236 |
Merkmale |
reell, zwischen 0 und 1 |
sklearn.datasets.fetch_rcv1 lädt die folgende Version: RCV1-v2, Vektoren, vollständige Sätze, Themen-Multilabel.
>>> from sklearn.datasets import fetch_rcv1
>>> rcv1 = fetch_rcv1()
Es gibt ein dictionary-ähnliches Objekt zurück, mit den folgenden Attributen:
data: Die Merkmalsmatrix ist eine spärliche scipy CSR-Matrix mit 804414 Stichproben und 47236 Merkmalen. Nicht-Null-Werte enthalten kopiernormierte, log-TF-IDF-Vektoren. Eine annähernd chronologische Aufteilung wird in [1] vorgeschlagen: Die ersten 23149 Stichproben sind das Trainingsset. Die letzten 781265 Stichproben sind das Testset. Dies folgt der offiziellen chronologischen Aufteilung von LYRL2004. Das Array hat 0,16 % Nicht-Null-Werte.
>>> rcv1.data.shape
(804414, 47236)
target: Die Zielwerte sind in einer spärlichen scipy CSR-Matrix gespeichert, mit 804414 Stichproben und 103 Kategorien. Jede Stichprobe hat einen Wert von 1 in ihren Kategorien und 0 in anderen. Das Array hat 3,15 % Nicht-Null-Werte.
>>> rcv1.target.shape
(804414, 103)
sample_id: Jede Stichprobe kann anhand ihrer ID identifiziert werden, die (mit Lücken) von 2286 bis 810596 reicht.
>>> rcv1.sample_id[:3]
array([2286, 2287, 2288], dtype=uint32)
target_names: Die Zielwerte sind die Themen jeder Stichprobe. Jede Stichprobe gehört zu mindestens einem Thema und bis zu 17 Themen. Es gibt 103 Themen, die jeweils durch einen String dargestellt werden. Ihre Korpusfrequenzen erstrecken sich über fünf Größenordnungen, von 5 Vorkommen für ‚GMIL‘ bis zu 381327 für ‚CCAT‘.
>>> rcv1.target_names[:3].tolist()
['E11', 'ECAT', 'M11']
Der Datensatz wird von der rcv1-Homepage heruntergeladen, falls erforderlich. Die komprimierte Größe beträgt etwa 656 MB.
Referenzen
8.2.6. Kddcup 99 Datensatz#
Der KDD Cup '99 Datensatz wurde durch die Verarbeitung der tcpdump-Teile des DARPA Intrusion Detection System (IDS) Evaluation Dataset von 1998 erstellt, das vom MIT Lincoln Lab erstellt wurde [2]. Die künstlichen Daten (beschrieben auf der Homepage des Datensatzes) wurden unter Verwendung eines geschlossenen Netzwerks und handeingefügter Angriffe erzeugt, um eine große Anzahl verschiedener Angriffstypen mit normaler Aktivität im Hintergrund zu erzeugen. Da das ursprüngliche Ziel darin bestand, einen großen Trainingsdatensatz für überwachte Lernalgorithmen zu erstellen, gibt es einen großen Anteil (80,1 %) abnormaler Daten, was in der realen Welt unrealistisch ist und für die unüberwachte Anomalieerkennung, die darauf abzielt, „abnormale“ Daten zu erkennen, unangemessen ist, d.h.
qualitativ anders als normale Daten
in großer Minderheit unter den Beobachtungen.
Wir transformieren den KDD-Datensatz somit in zwei verschiedene Datensätze: SA und SF.
SA wird durch einfaches Auswählen aller normalen Daten und eines kleinen Anteils abnormaler Daten erhalten, um einen Anomalieanteil von 1 % zu erzielen.
SF wird wie in [3] durch einfaches Auswählen der Daten, deren Attribut logged_in positiv ist, gebildet, was zu einem Anteil von 0,3 % Angriffen führt.
http und smtp sind zwei Teilmengen von SF, die mit dem dritten Merkmal ‚http‘ (bzw. ‚smtp‘) übereinstimmen.
Allgemeine KDD-Struktur
Gesamtanzahl Samples |
4898431 |
Dimensionalität |
41 |
Merkmale |
diskret (int) oder kontinuierlich (float) |
Ziele |
str, ‚normal.‘ oder Name des Anomalie-Typs |
SA-Struktur
Gesamtanzahl Samples |
976158 |
Dimensionalität |
41 |
Merkmale |
diskret (int) oder kontinuierlich (float) |
Ziele |
str, ‚normal.‘ oder Name des Anomalie-Typs |
SF-Struktur
Gesamtanzahl Samples |
699691 |
Dimensionalität |
4 |
Merkmale |
diskret (int) oder kontinuierlich (float) |
Ziele |
str, ‚normal.‘ oder Name des Anomalie-Typs |
http-Struktur
Gesamtanzahl Samples |
619052 |
Dimensionalität |
3 |
Merkmale |
diskret (int) oder kontinuierlich (float) |
Ziele |
str, ‚normal.‘ oder Name des Anomalie-Typs |
smtp-Struktur
Gesamtanzahl Samples |
95373 |
Dimensionalität |
3 |
Merkmale |
diskret (int) oder kontinuierlich (float) |
Ziele |
str, ‚normal.‘ oder Name des Anomalie-Typs |
sklearn.datasets.fetch_kddcup99 lädt den kddcup99-Datensatz; er gibt ein dictionary-ähnliches Objekt zurück, mit der Merkmalsmatrix im Mitglied data und den Zielwerten im Mitglied target. Das optionale Argument „as_frame“ konvertiert data in einen Pandas DataFrame und target in eine Pandas Series. Der Datensatz wird bei Bedarf aus dem Web heruntergeladen.
Referenzen
Analysis and Results of the 1999 DARPA Off-Line Intrusion Detection Evaluation, Richard Lippmann, Joshua W. Haines, David J. Fried, Jonathan Korba, Kumar Das.
K. Yamanishi, J.-I. Takeuchi, G. Williams, and P. Milne. Online unsupervised outlier detection using finite mixtures with discounting learning algorithms. In Proceedings of the sixth ACM SIGKDD international conference on Knowledge discovery and data mining, pages 320-324. ACM Press, 2000.
8.2.7. California Housing-Datensatz#
Datensatzmerkmale
- Anzahl der Instanzen:
20640
- Anzahl der Attribute:
8 numerische, prädiktive Attribute und das Ziel
- Attributinformationen:
MedInc Median-Einkommen in Blockgruppe
HouseAge Median-Alter der Häuser in der Blockgruppe
AveRooms Durchschnittliche Anzahl von Zimmern pro Haushalt
AveBedrms Durchschnittliche Anzahl von Schlafzimmern pro Haushalt
Population Blockgruppenbevölkerung
AveOccup Durchschnittliche Haushaltsgröße
Latitude Breitengrad der Blockgruppe
Longitude Längengrad der Blockgruppe
- Fehlende Attributwerte:
None
Dieser Datensatz wurde aus dem StatLib-Repository bezogen. https://www.dcc.fc.up.pt/~ltorgo/Regression/cal_housing.html
Die Zielvariable ist der Median-Hauswert für kalifornische Bezirke, ausgedrückt in Hunderttausenden von Dollar (100.000 $).
Dieser Datensatz wurde aus der US-Volkszählung von 1990 abgeleitet, wobei eine Zeile pro Volkszählungsblockgruppe verwendet wurde. Eine Blockgruppe ist die kleinste geografische Einheit, für die das U.S. Census Bureau Stichprobendaten veröffentlicht (eine Blockgruppe hat typischerweise eine Bevölkerung von 600 bis 3.000 Personen).
Ein Haushalt ist eine Gruppe von Personen, die in einem Haus leben. Da die durchschnittliche Anzahl von Zimmern und Schlafzimmern in diesem Datensatz pro Haushalt angegeben ist, können diese Spalten für Blockgruppen mit wenigen Haushalten und vielen leeren Häusern, wie z. B. Ferienorten, überraschend hohe Werte aufweisen.
Es kann mit der Funktion sklearn.datasets.fetch_california_housing heruntergeladen/geladen werden.
Referenzen
Pace, R. Kelley and Ronald Barry, Sparse Spatial Autoregressions, Statistics and Probability Letters, 33:291-297, 1997.
8.2.8. Datensatz zur Artenverteilung#
Dieser Datensatz repräsentiert die geografische Verbreitung von zwei Arten in Mittel- und Südamerika. Die beiden Arten sind:
„Bradypus variegatus“ , das Braunkehlfaultier.
„Microryzomys minutus“, auch bekannt als der kleine Waldreisratte, ein Nagetier, das in Peru, Kolumbien, Ecuador, Peru und Venezuela lebt.
Der Datensatz ist kein typischer Datensatz, da kein Bunch mit den Attributen data und target zurückgegeben wird. Stattdessen haben wir Informationen, die die Erstellung einer „Dichtekarte“ der verschiedenen Arten ermöglichen.
Das Gitter für die Karte kann mit den Attributen x_left_lower_corner, y_left_lower_corner, Nx, Ny und grid_size aufgebaut werden, die jeweils den x- und y-Koordinaten der unteren linken Ecke des Gitters, der Anzahl der Punkte entlang der x- und y-Achse und der Schrittweite im Gitter entsprechen.
Die Dichte an jedem Ort des Gitters ist im Attribut coverage enthalten.
Schließlich enthalten die Attribute train und test Informationen über den Standort einer Art an einem bestimmten Ort.
Der Datensatz wird von Phillips et al. (2006) bereitgestellt.
Referenzen
„Maximum entropy modeling of species geographic distributions“ S. J. Phillips, R. P. Anderson, R. E. Schapire - Ecological Modelling, 190:231-259, 2006.
Beispiele