Andere verfügbaren Datensätze

Scikit-learn stellt eine Vielzahl von Datensätzen zum Testen von Lernalgorithmen zur Verfügung.

Sie kommen in drei Geschmacksrichtungen:

  • Gepackte Daten: Diese kleinen Datensätze sind Teil der Installation von scikit-learn
  • Herunterladbare Daten: Diese größeren Datensätze stehen zum Download zur Verfügung und können per Scikit gelernt werden Enthält Tools, die diesen Prozess optimieren. Diese Tools finden Sie in sklearn.datasets.fetch_ *
  • Generierbare Daten: Es gibt mehrere Datensätze, die auf Modellen basieren und mittels seed-Werten generiert werden können auf a generiert werden können. Diese sind als sklearn.datasets.make_ * verfügbar

Mittels der Tab-Vervollständigungsfunktion von IPython können Sie die verfügbaren Dataset Loader, Fetcher und Generatoren nach dem Import des datasets Submoduls aus sklearn untersuchen,

datasets.load_<TAB>

or

datasets.fetch_<TAB>

or

datasets.make_<TAB>
In [2]:
from sklearn import datasets

Warnung: Viele dieser Datasets sind sehr groß und das Herunterladen kann sehr lange dauern!

Digits-Datenset laden

Wir werden uns nun einen dieser Datensätze genauer ansehen. Wir schauen uns den Ziffern-Datensatz an. Wir laden ihn zuerst:

In [27]:
from sklearn.datasets import load_digits
digits = load_digits()

Wir können uns wieder einen Überblick über die verfügbaren Attribute verschaffen, indem wir uns die "keys" anschauen:

In [28]:
digits.keys()
Out[28]:
dict_keys(['data', 'target', 'target_names', 'images', 'DESCR'])

Werfen wir einen Blick auf die Anzahl der Elemente und Funktionen:

In [4]:
n_samples, n_features = digits.data.shape
print((n_samples, n_features))
(1797, 64)
In [5]:
print(digits.data[0])
print(digits.target)
[ 0.  0.  5. 13.  9.  1.  0.  0.  0.  0. 13. 15. 10. 15.  5.  0.  0.  3.
 15.  2.  0. 11.  8.  0.  0.  4. 12.  0.  0.  8.  8.  0.  0.  5.  8.  0.
  0.  9.  8.  0.  0.  4. 11.  0.  1. 12.  7.  0.  0.  2. 14.  5. 10. 12.
  0.  0.  0.  0.  6. 13. 10.  0.  0.  0.]
[0 1 2 ... 8 9 8]

Die Daten liegen auch unter digits.images vor. Dabei handelt es sich um die Rohdaten der Bilder in der Form 8 Zeilen und 8 Spalten.

Bei "data" entspricht ein Bild einem eindimensionen Numpy-Array mit der Länge 64, und images enthält 2-dimensionale numpy-Arrays mit der Shape (8, 8)

In [39]:
print("Shape eines Items: ", digits.data[0].shape)
print("Datentype eines Items: ", type(digits.data[0]))
print("Shape eines Items: ", digits.images[0].shape)
print("Datentype eines Items: ", type(digits.images[0]))
Shape eines Items:  (64,)
Datentype eines Items:  <class 'numpy.ndarray'>
Shape eines Items:  (8, 8)
Datentype eines Items:  <class 'numpy.ndarray'>

Nun wollen wir die Daten visualisieren:

In [10]:
import matplotlib.pyplot as plt
# set up the figure
fig = plt.figure(figsize=(6, 6))  # figure size in inches
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)

# plot der Ziffern: 
# jedes Bild besteht aus 8x8 Pixel.
for i in range(64):
    ax = fig.add_subplot(8, 8, i + 1, xticks=[], yticks=[])
    ax.imshow(digits.images[i], cmap=plt.cm.binary, interpolation='nearest')
    
    # label the image with the target value
    ax.text(0, 7, str(digits.target[i]))
datensaetze_in_sklearn: Graph 0

Übungen

Aufgabe 1

sklearn enthält einen „Wein-Datensatz“.

  • Suchen und laden Sie diesen Datensatz
  • Können Sie eine Beschreibung finden?
  • Wie heißen die Klassen und die Features?
  • Wo sind die Daten und die Daten und die Labels?

Aufgabe 2

Erzeugen Sie einen scatter-Plot mit den Features ash und color_intensity des Wine-Datensatzes.

Aufgabe 3

Erzeugen Sie eine Scatter-Matrix für das Wine-Datenset

Aufgabe 4

Finden und laden Sie den Olivetti-Datensatz der Photos mit Gesichtern enthält und stellen Sie die Gesichter dar.

Lösungen

Lösung zu Aufgabe 1

Laden des "Wine"-Datensets:

In [40]:
from sklearn import datasets

wine = datasets.load_wine()

Die BEschreibung erhält man mittels:

In [41]:
print(wine.DESCR)
.. _wine_dataset:

Wine recognition dataset
------------------------

**Data Set Characteristics:**

    :Number of Instances: 178 (50 in each of three classes)
    :Number of Attributes: 13 numeric, predictive attributes and the class
    :Attribute Information:
 		- Alcohol
 		- Malic acid
 		- Ash
		- Alcalinity of ash  
 		- Magnesium
		- Total phenols
 		- Flavanoids
 		- Nonflavanoid phenols
 		- Proanthocyanins
		- Color intensity
 		- Hue
 		- OD280/OD315 of diluted wines
 		- Proline

    - class:
            - class_0
            - class_1
            - class_2
		
    :Summary Statistics:
    
    ============================= ==== ===== ======= =====
                                   Min   Max   Mean     SD
    ============================= ==== ===== ======= =====
    Alcohol:                      11.0  14.8    13.0   0.8
    Malic Acid:                   0.74  5.80    2.34  1.12
    Ash:                          1.36  3.23    2.36  0.27
    Alcalinity of Ash:            10.6  30.0    19.5   3.3
    Magnesium:                    70.0 162.0    99.7  14.3
    Total Phenols:                0.98  3.88    2.29  0.63
    Flavanoids:                   0.34  5.08    2.03  1.00
    Nonflavanoid Phenols:         0.13  0.66    0.36  0.12
    Proanthocyanins:              0.41  3.58    1.59  0.57
    Colour Intensity:              1.3  13.0     5.1   2.3
    Hue:                          0.48  1.71    0.96  0.23
    OD280/OD315 of diluted wines: 1.27  4.00    2.61  0.71
    Proline:                       278  1680     746   315
    ============================= ==== ===== ======= =====

    :Missing Attribute Values: None
    :Class Distribution: class_0 (59), class_1 (71), class_2 (48)
    :Creator: R.A. Fisher
    :Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
    :Date: July, 1988

This is a copy of UCI ML Wine recognition datasets.
https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data

The data is the results of a chemical analysis of wines grown in the same
region in Italy by three different cultivators. There are thirteen different
measurements taken for different constituents found in the three types of
wine.

Original Owners: 

Forina, M. et al, PARVUS - 
An Extendible Package for Data Exploration, Classification and Correlation. 
Institute of Pharmaceutical and Food Analysis and Technologies,
Via Brigata Salerno, 16147 Genoa, Italy.

Citation:

Lichman, M. (2013). UCI Machine Learning Repository
[http://archive.ics.uci.edu/ml]. Irvine, CA: University of California,
School of Information and Computer Science. 

.. topic:: References

  (1) S. Aeberhard, D. Coomans and O. de Vel, 
  Comparison of Classifiers in High Dimensional Settings, 
  Tech. Rep. no. 92-02, (1992), Dept. of Computer Science and Dept. of  
  Mathematics and Statistics, James Cook University of North Queensland. 
  (Also submitted to Technometrics). 

  The data was used with many others for comparing various 
  classifiers. The classes are separable, though only RDA 
  has achieved 100% correct classification. 
  (RDA : 100%, QDA 99.4%, LDA 98.9%, 1NN 96.1% (z-transformed data)) 
  (All results using the leave-one-out technique) 

  (2) S. Aeberhard, D. Coomans and O. de Vel, 
  "THE CLASSIFICATION PERFORMANCE OF RDA" 
  Tech. Rep. no. 92-01, (1992), Dept. of Computer Science and Dept. of 
  Mathematics and Statistics, James Cook University of North Queensland. 
  (Also submitted to Journal of Chemometrics).

Die Namen der Klassen und der Features erhalten wir mit den Attributen "target_names" und "feature_names":

In [42]:
print(wine.target_names)
print(wine.feature_names)
['class_0' 'class_1' 'class_2']
['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline']
In [43]:
daten = wine.data
gelabelte_daten = wine.target

Lösung zu Aufgabe 2

In [44]:
from sklearn import datasets
import matplotlib.pyplot as plt

wine = datasets.load_wine()

features = 'ash', 'color_intensity'
features_index = [wine.feature_names.index(features[0]),
                  wine.feature_names.index(features[1])]


colors = ['blue', 'red', 'green']

for label, color in zip(range(len(wine.target_names)), colors):
    plt.scatter(wine.data[wine.target==label, features_index[0]], 
                wine.data[wine.target==label, features_index[1]],
                label=wine.target_names[label],
                c=color)

plt.xlabel(features[0])
plt.ylabel(features[1])
plt.legend(loc='upper left')
plt.show()
datensaetze_in_sklearn 2: Graph 1

Lösung zu Aufgabe 3

In [45]:
import pandas as pd
from sklearn import datasets

wine = datasets.load_wine()
def rotate_labels(df, axes):
    """ changing the rotation of the label output, 
    y labels horizontal and x labels vertical """
    n = len(df.columns)
    for x in range(n):
        for y in range(n):
            # to get the axis of subplots
            ax = axs[x, y]
            # to make x axis name vertical  
            ax.xaxis.label.set_rotation(90)
            # to make y axis name horizontal 
            ax.yaxis.label.set_rotation(0)
            # to make sure y axis names are outside the plot area
            ax.yaxis.labelpad = 50

wine_df = pd.DataFrame(wine.data, columns=wine.feature_names)
axs = pd.plotting.scatter_matrix(wine_df, 
                                 c=wine.target, 
                                 figsize=(8, 8),
                                );

rotate_labels(wine_df, axs)
datensaetze_in_sklearn 3: Graph 2

Lösung zur Aufgabe 4

In [46]:
from sklearn.datasets import fetch_olivetti_faces
In [47]:
# Laden des Datensatzes
faces = fetch_olivetti_faces()
downloading Olivetti faces from https://ndownloader.figshare.com/files/5976027 to /home/bernd/scikit_learn_data
In [48]:
faces.keys()
Out[48]:
dict_keys(['data', 'images', 'target', 'DESCR'])
In [49]:
n_samples, n_features = faces.data.shape
print((n_samples, n_features))
(400, 4096)
In [50]:
np.sqrt(4096)
Out[50]:
64.0
In [51]:
faces.images.shape
Out[51]:
(400, 64, 64)
In [52]:
faces.data.shape
Out[52]:
(400, 4096)
In [53]:
print(np.all(faces.images.reshape((400, 4096)) == faces.data))
True
In [54]:
# set up the figure
fig = plt.figure(figsize=(6, 6))  # figure size in inches
fig.subplots_adjust(left=0, right=1, bottom=0, top=1, hspace=0.05, wspace=0.05)

# plot the digits: each image is 8x8 pixels
for i in range(64):
    ax = fig.add_subplot(8, 8, i + 1, xticks=[], yticks=[])
    ax.imshow(faces.images[i], cmap=plt.cm.bone, interpolation='nearest')
    
    # label the image with the target value
    ax.text(0, 7, str(faces.target[i]))
set up the figure: Graph 3

Weitere Datensätze

sklearn verfügt über viele weitere Datensätze. Wenn Sie noch weitere benötigen, finden Sie mehr in dieser interessanten Liste von Datensätzen bei Wikipedia.